[SQL]資料庫還原的經驗分享

[SQL]資料庫還原的經驗分享

有些時候會收到一些朋友詢問有關於資料庫備份的問題,而大部分都是發生在資料庫還原的時候出了問題,因此整理幾個自己的經驗提供給大家參考看看:

  • 千萬不要相信別人已經做好備份了,大部分出問題都是發生在要還原備份檔的時候才發現備份資料有少或者是有異常,但已經把原本的資料庫給刪除或者是損毀了,這時候找誰來都沒有用了。甚至遇到更惡毒的 MIS 會跟你說「我記錯了,但你自己怎麼沒有記得要備份…」

  • 要記住原本資料庫的大小,有些時候遇到一些很天才的 MIS,他們可能有個非常大的儲存裝置,比方說拿了 12 顆 600G SAS 的硬碟作了 RAID 6,建立了一個約 5TB 的空間,想說反正這個都要給資料庫使用,於是建立資料庫的時候設定初始大小為 4TB,要記住當資料庫備份的時候他原本設定的空間是多大,當你 Restore 的時候也一定是要多大,結果當某天資料庫發現有異常想要找備份檔 Restore 成為另外一個資料庫的時候,才發現沒有地方可以放那個資料庫 ( 就算你真的資料量沒有那麼多也不行 )。

  • 了解備份類型是很重要的,SQL Server 有提供完整備份、差異備份和交易紀錄備份,當你要去幫別人備份資料庫的時候要特別注意,如果他們有使用到差異備份或交易紀錄備份之一的時候,很可能會因為你做了完整備份而破壞了他們原本有的備份計畫了,導致後續要做還原的時候會出問題。如果你是習慣用管理工具備份資料庫的時候,最好要勾選 "只複製備份";如果你是習慣使用指令的話,建議多加上 WITH COPY_ONLY 的參數。

copy_only

  • 可以考慮使用新版本的管理工具,SQL Server 的管理工具一般來說會支援到往前兩個版本的資料庫,因此可以考慮使用新版本的管理工具讓你使用起來較為方便,像是 SQL Server 2012 的管理工具,還可以針對時間點的部分讓你用 GUI 的圖形讓你可以更方便去操作。

sql2012

  • 在刪除原始資料庫或者是要覆蓋原本資料庫之前,一定要先確認你的備份檔是可以正確 Restore 的,有些時候我自己到客戶端去處理的時候,儘可能得先把備份檔複製一份在我的 NB 上面,先確認這份可以 Restore 回來之後,才去進行任何的操作;或者是如果客戶資料有機密性不方便複製出來的話,如果客戶的硬碟空間允許的話,可以先把客戶原本的資料庫用卸離的方式,將他移到其他目錄下去保存,以免發生問題的時候還有還原的原始狀況。

  • 如果費用允許的話,建議可以採用微軟 System Center 家族的 SCDPM 這套產品來使用,他不會跟你原本的備份類型相衝突,他可以隨時保存最新一兩個月內的資料庫的資料,可以在有需要的時候將資料庫回復到某台 SQL Server 上面,操作起來蠻簡單的,算是蠻經濟實惠的一套產品。