正如我在前面的技巧「您的數據庫上次恢復是何時呢?」中提到的,SQL Server使msdb數據庫內系統表中的備份和恢復記錄保持激活狀態。沒有正常的維護,這些系統表將變得很大,從而致使對於msdb數據庫總體超大。數據庫
這些msdb表包括:spa
backupfile backupfilegrouprest backupmediafamilyci backupmediasetio backupsettable restorefiletest restorefilegroupdate restorehistoryfile |
幸運的是,微軟提供了兩個系統存儲過程,你能夠用它們來限制保存出具的msdb數據庫表的大小。第一個程序刪除日期晚於某個給定時間的全部備份和恢復。第二個程序容許你刪除某個特定數據庫的全部備份和恢復記錄。讓咱們具體看看這兩個程序。技巧
經過觀察我係統上的msdb表backupset和restorehistory,我發現下面的已經執行的數據庫備份和恢復:
圖一
可能使用的第一個程序是sp_delete_backuphistory。這個系統存儲過程帶有一個參數 – 一個截止時間。任何早於給定時間的日期都會從這個技巧前面提到的msdb表中刪除。在下面的例子中,我將刪除全部4/2/2009的全部日期。
-- delete all backup/restore history prior to a specified date use msdb go exec sp_delete_backuphistory '2009-04-02' go |
再次查看這些表。我發現全部早於4/2/2009而且與這些已經刪除的條目有關的備份記錄都已經清除。
圖二
第二個系統存儲過程容許你刪除某個特定數據庫的歷史備份數據,這個程序被稱做sp_delete_database_backuphistory。不幸的是,這個程序沒有提供一個選擇截止日期的更好的選項;它全有或全無。在下一個例子中,我將刪除一個給定數據庫的全部備份記錄。
-- delete all backup history for a specific database use msdb go exec sp_delete_database_backuphistory 'test1' go |
正如你看到的,只有這個給定數據庫的記錄被刪除了:
圖三