查看單個文章
舊 2004-08-15, 05:44 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 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當時也是測試了很久的.
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次