[SQL] 還原資料庫 - 小眉角

摘要:[SQL] 還原資料庫 - 小眉角

 

今天在自我演練 SQL Server 災難復原的動作,也順便真實的檢視那堆每天累積的 BAK 檔到底有沒有用。災難演練、還原測試是必須的,以免突發狀況時無法處理。

下圖是MSDN說明「資料庫還原」的圖片


 

假設你如上圖的同時採用了 Full、Differential、Log Backup,你會設定在不同時間點去做這些動作,例如

  • 每星期日凌晨 03:00 [Full Backup]
  • 每天凌晨 02:00 [Differential Backup]
  • 每隔15分鐘 [Transaction Log Backup]
  •  
MS SQL 提供了媒體集、媒體家族,讓你可以將多個備份「附加」在同一個備份媒體中(以磁碟來說就是放在同一個檔案裡)
 
↓ 使用媒體集就可以在還原時選取一個備份檔後,出現備份清單供你選擇要還原哪幾的備份內容
 
使用 SQL Agent 維護工作,我們可能會為了區別備份版本,會在備份檔名上加上日期時間(例如:DB1_Log_backup_201102160130.trn)
 

 

=== 底下丟出一些問題,來找答案 ===

  • Q1:使用日期來命名 bak 檔,可以同時選多個備份檔來還原嗎?
  • Q2:依排程在每天 02:00 會同時做 Differential 跟 Log Backup,那還原時需要2份都還原嗎?
  • Q3:每隔15分鐘 Log Backup,那可以跳著還原嗎?
  • Q4:還原時最重要的事?

 

 

Q1:使用日期來命名 bak 檔,可以同時選多個備份檔來還原嗎?

A:當以時間日期命名備份檔時,意思就是每一個備份都屬於不同的檔案,也就是在每個檔案中其備份都為「WITH  FILE = 1」第一個備份無附加,所以你要同時還原就會出現下面的錯誤訊息(錯誤代碼:3231)

SQL錯誤代碼訊息:參考

Q2:依排程在每天 02:00 會同時做 Differential 跟 Log Backup,那還原時需要2份都還原嗎?

A:SQL在備份的時候,會給每個備份一個LSN號碼,標示著先後順序,稍微測試一下,你就能知道在同一個時間點的 Log Backup 是不需要還原的。

Q3:每隔15分鐘 Log Backup,那可以跳著還原嗎?

 A:不行。因為每次的 Log Backup 都是記錄前15分鐘裡做了哪些動作,記錄完了就會將LOG清除,所以還原時也必須依序的還原

跳著還原你會得到下面的錯誤訊息


Q4:還原時最重要的事?

A:別衝動......當資料有問題時,在做還原之前,請先備份結尾記錄 tail log,以免最近的交易紀錄全被你的還原給殺了,請參考