[SQL]備份不見了 ?!

[SQL]備份不見了 ?!

收到一個求助電話,一個同事很熱心的幫客戶在 SQL Server 的主機上,使用維護計畫精靈來建立排程定時備份,為了避免過多的備份檔導致硬碟空間不足,也在徵得客戶的同意下,設定只保留四週的備份資料。原本以為這是個簡單任務,只要透過 SQL Server Agent 就可以幫我們處理完畢了,所以也沒有多思考甚麼,但問題就是這樣發生了。

 

原來客戶在本來的備份目錄下有個特定時間他們自己手動去備份的備份檔是有特殊意義的,但是在設定維護計畫之後,原本以為維護計畫會去清除的備份檔只有透過維護計畫所備份出來的檔案,但聽同仁和客戶的描述起來,似乎不是所想像的一般,因此也模擬的類似的情況測試一下。

 

首先我們先用 Hyper-V 的 Guest OS 上安裝 SQL Server,並且建立一個 TESTDB 的測試資料庫

001

 

先手動備份資料庫出來

002

 

接著用維護計畫精靈仿照客戶的環境

003

 

如同客戶的環境加入「維護清除工作」

004

 

在這裡我為了要測試,設定只保留兩天內的資料

005

 

因此調整日期測試第一天可以正常備份出來,原始手動備份的備份檔 TESTDB.bak 也一樣存在於目錄下

006

 

接下來模擬第二天,之前的手動備份檔真的被刪除了……

007

 

此時趕快找到一套軟體「Recuva File Recovery」,總算把檔案給找回來了。

008

 

在跟同事討論的過程中,有人提到了那如果是其他的資料庫也備份在同樣的目錄下,或者是有類似的名稱的話,那麼 SQL Server 是否也會誤刪呢 ? 答案是不會的,因為 SQL Server 在刪除檔案前,會先去檢查 msdb 的資料庫,查看設定要清除的期限之前該資料庫有哪些備份檔,才去做動作的。而不是直接檢查該目錄下的檔案是否有過期就會自動刪除。

 

經過這次的經驗,建議如果要做類似的處理前,一定要記得先確認好相關環境,這次是運氣好剛好在刪除檔案的時候就及時發現,還有機會用回復軟體把備份檔給救回來,否則時間過久了那風險就會很大了。