正如我在前面的技巧“您的数据库上次恢复是什么时候呢?”中提到的,SQL Server使msdb数据库内系统表中的备份和恢复记录保持激活状态。没有正常的维护,这些系统表将变得很大,从而导致对于msdb数据库整体超大。
这些msdb表包括:
backupfile
backupfilegroup backupmediafamily backupmediaset backupset restorefile restorefilegroup restorehistory |
幸运的是,微软提供了两个系统存储过程,你可以用它们来限制保存出具的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 |
正如你看到的,只有这个给定数据库的记录被删除了:
图三