SQLServer備份指令碼

taogchan發表於2013-10-09

企業管理器
--管理
--SQL Server代理
--右鍵作業
--新建作業
--"常規"項中輸入作業名稱
--"步驟"項
--新建
--"步驟名"中輸入步驟名
--"型別"中選擇"Transact-SQL 指令碼(TSQL)"
--"資料庫"選擇執行命令的資料庫
--"命令"中輸入要執行的語句:
                     
--確定
--"排程"項
--新建排程
--"名稱"中輸入排程名稱
--"排程型別"中選擇你的作業執行安排
--如果選擇"反覆出現"
--點"更改"來設定你的時間安排為一天一次


然後將SQL Agent服務啟動,並設定為自動啟動,否則你的作業不會被執行

設定方法:
我的電腦--控制皮膚--管理工具--服務--右鍵 SQLSERVERAGENT--屬性--啟動型別--選擇"自動啟動"--確定.

 

/*******************完整備份作業*******************/
--完整備份,每週一次
USE Master
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\FullBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.bak'
BACKUP DATABASE [demo] TO
WITH RETAINDAYS=15,NOFORMAT,NOINIT,
NAME=N'Demo完整備份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO

 


/*******************差異備份作業*******************/
--截斷日誌
USE Master
GO
BACKUP LOG Demo  WITH NO_LOG
GO
--收縮日誌檔案
USE Demo
GO
DBCC SHRINKFILE (N'Demo_log',0,TRUNCATEONLY)
GO
--差異備份,每天一次
USE Master
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\DiffBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.diff'
BACKUP DATABASE [Demo] TO
WITH DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,
NAME=N'Demo差異備份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO

 


/******************日誌備份作業*******************/
--日誌備份,每小時一次
USE Demo
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\logbak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.trn'
BACKUP LOG [Demo] TO
WITH RETAINDAYS=3,NOFORMAT,NOINIT,
NAME=N'Demo日誌備份',SKIP,NOREWIND,
NOUNLOAD,STATS=10
GO

 


--刪除過期的備份檔案,每天兩次
declare @str varchar(100),@dir varchar(100),@fileName varchar(30)
set @dir='del D:\DBtext\jgj\DBABak\'
set @filename=left(replace(replace(replace(convert(varchar,getdate()-15,20),'-',''),' ',''),':',''),8)
set @str=@dir+'fullbak'+@filename+'*.bak'
exec xp_cmdshell @str
set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),' ',''),':',''),8)
set @str=@dir+'diffbak'+@filename+'*.diff'
exec xp_cmdshell @str
set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),' ',''),':',''),8)
set @str=@dir+'logbak'+@filename+'*.trn'
exec xp_cmdshell @str

 

======================================================================
SQL還原
======================================================================
1、驗證備份
------------------------------------------------------------
restore headeronly from bak3
restore filelistonly from bak3 with file=1
restore labelonly from bak3
restore verifyonly from bak3
----------------------------------------------------------------------
2、從備份中還原
-------------------------------------------------------------------------
restore headeronly from bak1
restore database d1 from bak1 with file=2        --從完全備份中恢復
----------------------------------------------------------------------
restore headeronly from bak2              --從差異備份中恢復
restore database d2 from bak2 with file=1,norecovery   
restore database d2 from bak2 with file=5,recovery
----------------------------------------------------------------------
restore headeronly from bak3              --從日誌備份中恢復
restore database d3 from bak3 with file=1,norecovery
restore log    d3 from bak3 with file=2,norecovery
restore log    d3 from bak3 with file=3,norecovery
restore log    d3 from bak3 with file=4,norecovery
restore log    d3 from bak3 with file=5,recovery
----------------------------------------------------------------------
restore database d3 from bak3 with file=1,norecovery      --恢復到指定時間
restore log    d3 from bak3 with file=2,norecovery
restore log    d3 from bak3 with file=3,norecovery
restore log    d3 from bak3 with file=4,recovery,stopat='2003-08-15 11:29:00.000'
----------------------------------------------------------------------
restore database d5 filegroup='FG2' from bak5 with file=4,norecovery --還原檔案組備份
restore log d5 from bak5 with file=5,norecovery
restore log d5 from bak5 with file=7,recovery
----------------------------------------------------------------------
restore headeronly from bak6                --還原檔案備份
restore database d5 file='d5_data3' from bak6 with file=6,norecovery
restore log d5 from bak6 with file=7,norecovery
restore log d5 from bak6 with file=9,recovery
----------------------------------------------------------------------
restore database d5 from bak6 with replace    --刪除現有資料庫,從備份中重建資料庫
----------------------------------------------------------------------
create database d6            --move to將資料庫檔案移動到新位置
on primary
(name=d6_data,
filename='E:\Program Files\Microsoft SQL Server\MSSQL\data\d6_Data.MDF',
size=2MB)
log on
(name=d6_log,
filename='E:\Program Files\Microsoft SQL Server\MSSQL\data\d6_log.ldf',
size=2MB)
go
backupdatabase d6 to bak6 with init
drop database d6
restore database d6 from bak6
with move 'd6_data' to 'e:\data\d6\d6_data.mdf',
move 'd6_log'to 'e:\data\d6\d6_log.ldf'
sp_helpdb d6
----------------------------------------------------------------------
3、分離與重連線資料庫
--------------------------------------
sp_detach_db 'd6'       
sp_attach_db 'd6','e:\data\d6\d6_data.mdf','e:\data\d6\d6_log.ldf'
--------------------------------------
sp_detach_db d6
go
create database d6
on primary
(filename='e:\data\d6\d6_data.mdf')
for attach
go
----------------------------------------------------------------------
4、恢復損壞的系統資料庫
----------------------------------------------------------------------
1)先備份MASTER、MSDB
2)停止SQL服務,將MASTER資料庫檔案刪除或者重新命名。這樣,SQL服務將不能啟動。
3)系統資料庫的還原
-----------------------------------------------
(1)如果SQL服務還能啟動,則從備份中恢復系統資料庫。
(2)如果SQL服務不能啟動,則需要重建系統資料庫。
使用SQL資料夾TOOLS\BINN目錄下的Rebuildm.exe重建master資料庫。
(3)建立備份裝置,指向以前的備份裝置。
(4)以單使用者模式啟動SQL
cd programe files\microsoft sql server\mssql\binn
sqlservr.exe -c -m
(5)進查詢分析器,從備份中恢復master資料庫。
restore database master from masterbak
restore database msdb from disk='e:\bak\msdb.bak'
MASTER還原後,SQL中使用者資料庫的資訊也會恢復。
(6)如果MASTER沒有備份,則需要用sp_attach_db命令將使用者資料庫附加到新的MASTER資料庫中。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22392018/viewspace-773984/,如需轉載,請註明出處,否則將追究法律責任。

相關文章