SQL Server 維護計劃實現資料庫備份(策略實戰)
一、背景
之前寫過一篇關於備份的文章:SQL Server 維護計劃實現資料庫備份,上面文章使用完整備份和差異備份基本上能解決資料庫備份的問題,但是為了保障資料更加安全,我們需要再次完善我們的備份計劃;
下面這篇文章主要加入了日誌備份,並對設計備份的頻率和設計命名規範等問題進行實戰;
二、最佳實踐
(一) 備份計劃
1) 每週星期日的2:00:00執行資料庫的完整備份;
2) 每週星期一至星期六每天的2:00:00執行資料庫的差異備份;
3) 每天在8:00:00和23:59:59之間、每1小時執行資料庫的日誌備份;
4) 每個月的最後一個星期日的1:00:00執行資料庫的完整備份;
(二) 計劃講解
1. 根據備份檔案的不同,我建立了4個檔案用於存放備份檔案:(Medusa是資料庫名)
1) Medusa_Full:用於存放完整備份檔案;
2) Medusa_Diff:用於存放差異備份檔案;
3) Medusa_Log:用於存放日誌備份檔案;
4) Medusa_Save:用於存放保留備份檔案;
上面的4個資料夾與備份計劃的4個步驟是一 一對應的;
(Figure1:資料夾命名規範)
2. 建立名為Medusa的維護計劃,並建立如下圖的4個子計劃:
(Figure2:子計劃列表)
3. 設定【清除歷史記錄】、【清除維護】的保留時間:
1) Subplan_Full:保留完整備份檔案4周;(1個*4周=4個檔案)
2) Subplan_Diff:保留差異備份檔案2周;(6個*2周=12個檔案)
3) Subplan_Log:保留日誌備份檔案1周;(16個*7天=112個檔案)
4) Subplan_Save:保留備份檔案1年;(1個*12月=12個檔案)
上面的時間策略需要根據資料庫的安全級別、磁碟空間、業務特性等情況共同解決的,你可以根據的實際情況進行修改和調整;
4. 下面的Figure3、Figure4、Figure5、Figure6是具體設定的效果圖:
(Figure3:子計劃Full)
(Figure4:子計劃Diff)
(Figure5:子計劃Log)
(Figure6:子計劃Save)
5. 儲存維護計劃後,在SQL Server代理的作業中會生成Figure7的作業列表:
(Figure7:Job列表)
6. 執行一段時間後,在各個資料夾中會生成一系列的檔案:
(Figure8:Full檔案)
(Figure9:Diff檔案)
(Figure10:Log檔案)
(Figure11:Save檔案)
7. 有了這些檔案之後,我們可以雖然還原到某個時間點上的資料,資料的差異為一個小時,例如你是在2012-12-11的15:48:00分誤操作了資料庫,我能回滾到最接近這個時間的是:2012-12-11的15:00:00
(Figure12:還原完整備份檔案)
(Figure13:還原差異、日誌備份檔案)
在使用SSMS的還原的時候,系統會幫你找到最近的備份檔案,並且進行了勾選,要完成上面的還原,根據我們之前的備份計劃,我們需要檔案:
1) 完整備份檔案:Barfoo.Medusa_backup_2012_12_09_020005_0612500.bak
2) 差異備份檔案:Barfoo.Medusa_backup_2012_12_11_020005_8354977.bak
3) 日誌備份檔案:
Barfoo.Medusa_backup_2012_12_11_080005_4808937.trn
Barfoo.Medusa_backup_2012_12_11_090005_4816881.trn
Barfoo.Medusa_backup_2012_12_11_100005_6543553.trn
Barfoo.Medusa_backup_2012_12_11_110005_7645233.trn
Barfoo.Medusa_backup_2012_12_11_120005_8434417.trn
Barfoo.Medusa_backup_2012_12_11_130004_9379977.trn
Barfoo.Medusa_backup_2012_12_11_140005_2044137.trn
Barfoo.Medusa_backup_2012_12_11_150005_2208329.trn
還原的步驟就是先還原完整備份檔案,接著還原差異備份檔案,再依次執行日誌備份檔案,這樣就能回滾到你想要的時間點:2012-12-11的15:00
三、注意事項
- 備份計劃中“每天在8:00:00和23:59:59之間、每1小時執行資料庫的日誌備份”很多人會問:這中間相差8個小時的資料不做日誌備份呢?其實我是這樣考慮的,在凌晨的時候,大部分的情況這段時間是在跑定時器處理資料,如果不是程式有BUG,一般不會造成資料錯誤需要恢復,而且這個時候使用者操作頁面也不頻繁(個人認為更多資料誤操作是因為人為操作不當引起的),你可以根據自己的業務情況做些調整;
- 備份計劃中“每個月的最後一個星期日的1:00:00執行資料庫的完整備份”,這樣做的目的是儘量不影響全備份又能保留一份完整的備份檔案,如果需要更加嚴謹一點,你可以把它換成“僅複製備份(COPY_ONLY)”,這需要在維護計劃中使用T-SQL進行備份,這就可以完全不影響日誌鏈;
- 維護計劃的可以通過T-SQL指令碼生成嘛?
sp_add_maintenance_plan
sp_delete_maintenance_plan_db
sp_add_maintenance_plan_db
sp_delete_maintenance_plan_job
sp_add_maintenance_plan_job
sp_help_maintenance_plan
sp_delete_maintenance_plan
四、參考文獻