1. 程式人生 > >SQL Server 維護計劃實現資料庫備份(策略實戰)

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個步驟是一 一對應的;

clip_image001

(Figure1:資料夾命名規範)

2. 建立名為Medusa的維護計劃,並建立如下圖的4個子計劃:

clip_image003

(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是具體設定的效果圖:

clip_image004

(Figure3:子計劃Full)

clip_image005

(Figure4:子計劃Diff)

clip_image006

(Figure5:子計劃Log)

clip_image007

(Figure6:子計劃Save)

5. 儲存維護計劃後,在SQL Server代理的作業中會生成Figure7的作業列表:

clip_image008

(Figure7:Job列表)

6. 執行一段時間後,在各個資料夾中會生成一系列的檔案:

clip_image009

(Figure8:Full檔案)

clip_image010

(Figure9:Diff檔案)

clip_image012

(Figure10:Log檔案)

clip_image013

(Figure11:Save檔案)

7. 有了這些檔案之後,我們可以雖然還原到某個時間點上的資料,資料的差異為一個小時,例如你是在2012-12-11的15:48:00分誤操作了資料庫,我能回滾到最接近這個時間的是:2012-12-11的15:00:00

clip_image015

(Figure12:還原完整備份檔案)

clip_image017

(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

三、注意事項

  1. 備份計劃中“每天在8:00:00和23:59:59之間、每1小時執行資料庫的日誌備份”很多人會問:這中間相差8個小時的資料不做日誌備份呢?其實我是這樣考慮的,在凌晨的時候,大部分的情況這段時間是在跑定時器處理資料,如果不是程式有BUG,一般不會造成資料錯誤需要恢復,而且這個時候使用者操作頁面也不頻繁(個人認為更多資料誤操作是因為人為操作不當引起的),你可以根據自己的業務情況做些調整;
  2. 備份計劃中“每個月的最後一個星期日的1:00:00執行資料庫的完整備份”,這樣做的目的是儘量不影響全備份又能保留一份完整的備份檔案,如果需要更加嚴謹一點,你可以把它換成“僅複製備份(COPY_ONLY)”,這需要在維護計劃中使用T-SQL進行備份,這就可以完全不影響日誌鏈;
  3.  維護計劃的可以通過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

四、參考文獻