201102161246[SQL] 還原資料庫 - 小眉角
今天在自我演練 SQL Server 災難復原的動作,也順便真實的檢視那堆每天累積的 BAK 檔到底有沒有用。上一次新購的 IBM x3650 M2 無預警的突然掛點,才使用2個月就被迫更換「良品」主機板,預設的維護模式 5x7 也只能隔天來維修(心裡狂罵~我最重要的 Service 放在上面,還是新機器就給我出這樣的錯誤,以後哪敢買IBM的 Server 阿!...而賣機器的經銷商也只能表現出「好像」跟我一樣急,問題還是只能托給「原廠授權」X宜慢慢來)
問題在換了第「二」片良品主機板終於好了,我的 Service 早已移到其他台了,我老闆大罵怎麼新機器就主機板故障,叫XX經銷商換一台新的來.........
說也說了,講也講了......但在這行的網友就知道,XX經銷商怎麼可能買一台新的賠你,一年沒交關數千萬算什麼喀...唉~現實阿!
我還留一個辦事不力的印象給老闆,因為 Server 沒換新的阿!
......後來連記憶體都壞了一條,16GB的RAM居然混雜了3種品牌的記憶體,數量也不對稱。下次採購的時候一定要標明記憶體是用哪一家,或是只能同一牌;也許你會說混插又沒關係,規格一樣就好了~對阿!我也知道...但是重要的 Server 掛點,你就會不想要「拼湊」的高貴伺服器。
---這一篇不是工作雜罵啦~-------------
是災難演練、還原測試是必須的,以免突發狀況時無法處理。
下圖是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,以免最近的交易紀錄全被你的還原給殺了,請參考。