啟用定時備份後,資料庫執行一長,必然會積累很多的備份檔案,占用大量儲存空間,然而時間久遠的備份檔案可能已經失效,不再具有保留的意義。對於占用儲存空間又沒有保留意義的檔案,當然是清理掉比較好。
清理這種失效的備份檔案的方法,windows下可以寫批處理檔案,linux下可以shell指令碼。dm7本身提供的系統過程sp_batch_del_bak用於清理超期或冗餘的備份檔案非常好用。
下文就對sp_batch_del_bak做個介紹,通過乙個清理出錯的場景,引出該過程的使用方法。
一、sp_batch_del_bak的呼叫方法:
舉例,刪除當前系統時間之前,且離當前系統時間最遠的bookshop表空間的乙個備份檔案:
call sp_batch_del_bak('bookshop', '', 2, sysdate, 1);
注:只能刪除系統目錄下(dm.ini配置的bak_path)的備份,如果備份在其他地方就需要修改bak_path引數值。
上例中引數說明:
'bookshop':物件名,可以是資料庫名、表空間名、表名;
'':模式名,僅對錶名有效;
2:級別,取值1、2、3,分別對應:資料庫級、表空間級、表級;
sysdate:要刪除的備份檔案時間節點;
1:刪除1個sysdate前備份的檔案,該數量為-1時,則刪除sysdate前備份的全部備份檔案。
二、刪除時遇到的異常情況模擬:
sp_batch_del_bak函式會連續刪除指定時間節點前的n個備份集,前提情況是當前的備份集是連續不斷的,中間沒有人為刪除過。
設定定時備份job每隔一分鐘備份一次。可以看見當前備份集是連續的。然後呼叫函式刪除當前時間的前兩個備份集,這樣就是會刪除15點51和15點52分的備份集。
但是如果手動刪除過其中某個備份檔案,再執行就會出現隨機刪除兩個備份集的情況:
可以看到執行完函式之後把15點53分和16點01分的備份集刪除了,這樣一來本來應該被刪除的54分的備份集就保留了下來,之後再執行刪除都會隨機刪除。
三、原因追蹤及解決方法:
再仔細研究過這個函式之後發現在《dm7_sql語言使用手冊》中對這個函式使用有乙個備註:
即:在刪除備份之前首先要構建備份鍊錶,將各個備份檔案按序排列,從而不會產生因人為刪除之後導致的本來應該被刪除的備份集不刪除。
在構建完備份鍊錶之後再呼叫刪除備份的系統過程,結果如下:
將54分和55分的備份刪除。
四、總結:
dm7本身提供的系統過程sp_batch_del_bak可以用於清理超期或冗餘的備份檔案。
呼叫該過程前,需要先構建備份鍊錶,避免系統統計的備份檔案資訊過期而造成清理錯誤的情況。
MYSQL定時刪除備份 二
為了解決公司備份伺服器備份資料量越來越多,或者因為不可知的原因導致資料庫崩壞,寫了這個指令碼。1,將指令碼拉到備份伺服器上,在指定的目錄下執行mysql deleted.sh,會在指定的目錄刪除7天之前的備份資料,即使因為不可知的原因導致資料庫崩壞,也會保留最新的乙份。指令碼如下,有注釋。可以根據本...
如何找回已刪除檔案
相信大家在使用電腦的過程中,都有過一不小心或者不經意間把重要檔案刪除了的情況,關於救回已刪除檔案,你們都做過哪些努力呢?我們第一就是要到資源 筒救回已刪除檔案是否存在,如果檔案在資源 筒,您只需右擊它一鍵還原即可。如果不在,您還能找回刪除檔案嗎?其實,從電腦中永久刪除不在資源 筒中的檔案,它的內容不...
如何救回已刪除檔案
相信大家在使用電腦的過程中,都有過一不小心或者不經意間把重要檔案刪除了的情況,關於救回已刪除檔案,你們都做過哪些努力呢?我們第一就是要到資源 筒救回已刪除檔案是否存在,如果檔案在資源 筒,您只需右擊它一鍵還原即可。如果不在,您能將已刪除檔案救回嗎?其實,從電腦中永久刪除不在資源 筒中的檔案,它的內容...