摘要:[SQL] 還原資料庫 - 小眉角
今天在自我演練 SQL Server 災難復原的動作,也順便真實的檢視那堆每天累積的 BAK 檔到底有沒有用。災難演練、還原測試是必須的,以免突發狀況時無法處理。
下圖是MSDN說明「資料庫還原」的圖片
假設你如上圖的同時採用了 Full、Differential、Log Backup,你會設定在不同時間點去做這些動作,例如
- 每星期日凌晨 03:00 [Full Backup]
- 每天凌晨 02:00 [Differential Backup]
- 每隔15分鐘 [Transaction Log Backup]
=== 底下丟出一些問題,來找答案 ===
- 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,以免最近的交易紀錄全被你的還原給殺了,請參考。