SQL Server資料庫的無監管自動制作備份和恢復計劃及Job
大家都知道資料庫的重要性,因此制作備份和恢復計劃也很重要。
這裡把很久之前寫的Job和大家分享一下,Run了1年多了 總共包括3個Job. 其中兩個Job,一個是完全制作備份,這裡叫做DBBackup吧,另一個是事物日誌的制作備份,就叫做DBLogBackup吧。 另一個Job是恢復的Job叫做RestoreDB吧. 大體上是這樣的. 這裡的資料庫名字叫做 Test 假設2個Server(當然也可以3個server),online的資料庫用名字是A,用來制作備份的server叫做B,用來restore的server也在B上面。 在DBBackup裡面總共包括7個步驟(這個Job是每天晚上的1:00進行): 1,首先是檢查資料庫的完整性(用DBCC Checkdb),成功進行下一步,否則退出。 dbcc checkdb('Test') 2,制作備份資料庫,以資料庫名字和日期命名,成功進行下一步,否則退出。 declare @sql as varchar(200) select @sql='backup database Test to DISK='''+'D:\Test'+convert(varchar(20),getdate(),12)+'.bak''' execute sp_sqlexec @sql 3,Copy 備份檔案到另一個專門的制作備份Server, 成功進行下一步,否則退出。 declare @a as varchar(200) select @a='Test'+convert(varchar(200),getdate(),12)+'.bak' select @a='copy d:\'+@a+' \\B\d$\'+@a exec xp_cmdshell @a 4,Copy 前一天的事物日誌,成功進行下一步,否則退出。 declare @a as varchar(200) select @a='Testlog' select @a='copy /y d:\'+@a+'.bak \\B\d$\'+@a+convert(varchar(200),dateadd(d,-1,getdate()),12)+'.bak' exec xp_cmdshell @a 5,清楚事物日誌,成功進行下一步,否則退出。 backup log Test to Testlog with init 6,移除A上的10天以前的備份檔案,也就是說只保留最近10天的備份檔案(節省server空間)。成功進行下一步,否則退出。 declare @a as varchar(200) select @a='Test'+convert(varchar(200),dateadd(d,-10,getdate()),12)+'.bak' select @a='del d:\'+@a exec xp_cmdshell @a 7,移除制作備份server上的備份檔案,也就是B上面也只保留10天的備份檔案(節省server空間).成功後退出,否則退出。 declare @a as varchar(200) select @a='Test'+convert(varchar(200),dateadd(d,-10,getdate()),12)+'.bak' select @a=' del \\B\d$\'+@a exec xp_cmdshell @a select @a='Testlog'+convert(varchar(200),dateadd(d,-10,getdate()),12)+'.bak' select @a=' del \\B\d$\'+@a exec xp_cmdshell @a 再一個就是用來制作備份事物日誌的Job,DBLogBackup 總共有2個步驟(在每天的清晨1:30開始,每一個小時一次,到晚上11:59:59) 1,制作備份事物日誌,成功進行下一步,否則退出。 backup log Test to TestLog 2,Copy制作備份的事物日誌文件到Server B上面(每一個小時Copy一次)。成功後退出,否則退出。 declare @a as varchar(200) select @a='Testlog.bak' select @a='copy /y d:\'+@a+' \\172.26.6.10\d$\'+@a exec xp_cmdshell @a 最後一個就是恢復到資料庫B上的Job,RestoreDB. 這個Job可以run在B上面。只有1個步驟。 新增的資料庫名字是TestDB use master declare @Path as varchar(200) select @Path ='d:\Test' + convert(char(6),getdate(),12) + '.bak' print @Path RESTORE DATABASE TestDB FROM DISK = @Path with replace, move 'Test_data' to 'd:\TestDB\Testdb_Data.MDF', move 'Test_log' to 'd:\TestDB\Testdb_log.ldf' go 在這2個server上執行的這3個Job需要在共同的Domain中. 並且這2個Server需要用Domain帳號登入,包括每個SQL Server的service也是. 這樣才可以配置SQL Mail.以便用Mail來通知你有沒有成功. 當然了,配置SQL Mail當時也是測試了很久的. |
所有時間均為台北時間。現在的時間是 06:04 PM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *