2012-02-02 44 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 

这一次删除一个星期的历史,直到你赶上了。好的是,你可以坚持这个工作,并定期运行(例如每周),它会做正确的事情。