2012-02-02 33 views
1

我們有一個SQL Server 2000實例,其中MSDB已經發展到一個巨大的規模,因爲備份歷史從未在幾年內被刪除。我想徹底清除備份歷史記錄(我不明白爲什麼需要)並釋放所有這些數據使用的磁盤空間。SQL Server 2000 - 刪除備份歷史記錄是否有快速的方法?

我意識到你可以使用sp_delete_backuphistory命令,但這太慢了(在2個小時內沒有任何反應),並且在執行事務日誌文件的時候會增長以填充整個磁盤(幾GB)。 SQL Server 2000似乎不支持數據庫執行此數據庫。

我需要找到一種方法來刪除所有不首先填滿磁盤的數據。因此,要麼分階段刪除,以便日誌不會變大,要麼可能使用truncate table,但我不確定是否有安全的方法來執行此操作,並且由於我不是SQL專家,真的知道如何做到這一點,而不會破壞我的數據庫!

任何幫助,將不勝感激!

回答

1

儘量減少一次刪除的行數。 sp_delete_backuphistory的第一個參數是要保留的最古老的一天。

EXEC sp_delete_backuphistory '2000-01-01' 
EXEC sp_delete_backuphistory '2001-01-01' 
EXEC sp_delete_backuphistory '2002-01-01' 
... 

它也可以幫助降低恢復模式Simple如果它是目前Full

0

首先進行備份, 然後爲每年創建數據庫並從備份文件中爲一年數據恢復數據庫。 然後在完成所有過程後清除所有日誌文件。

2

我使用類似以下內容:

declare @oldest_date datetime, @newest_date datetime 

select @oldest_date = min(backup_start_date) from backupset 
select @newest_date = dateadd(day, -45, getdate()) 

while(@oldest_date <= @newest_date) 
begin 
    exec sp_delete_backuphistory @oldest_date 
    set @oldest_date = dateadd(day, 7, @oldest_date) 
end 

這一次刪除一個星期的歷史,直到你趕上了。好的是,你可以堅持這個工作,並定期運行(例如每週),它會做正確的事情。