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]
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,以免最近的交易紀錄全被你的還原給殺了,請參考

回應
Google Search
Google
平均分數:0 顆星
投票人數:0
我要評分:
Google