问题描述
==========
SQL Server 2000中msdbdata.mdf文件迅速增长到20G
故障排查
========
MSDB数据库中restorefile和restorefilegroup表占用了较大空间(共约19G),存放在restorefile和resotrefilegroup的记录主要是对于该服务器所发生过的所有backup和restore操作的历史记录,可能原因如下:
1.可能是由于您之前发生过较多的备份和还原的操作
2.创建过备份和还原的维护计划
3.由于该SQL Server实例使用了较旧的时间,备份还原历史堆积导致
我们通过调用sp_delete_backuphistory来删除较早的备份和还原历史记录,但是发现经过长时间的进行都无法成功。
您通过对bakcupset,restorefile和restorefilegroup创建索引,试图能够成功调用sp_delete_backuphistory,但仍旧失败。
经过使用一下语句查询,发现resotrefile和restorefilegroup创建的是非聚集索引:
Select * from sysdindexes where id=OBJECT_ID(‘restorefile’)
Select * from sysdindexes where id=OBJECT_ID(‘restorefilegroup’)
返回结果indid=0,这说明创建的非聚集索引。
我们通过CREATE CLUSTERED INDEX语句为这两张大表创建聚集索引(聚集索引指索引中存放真实的数据,非聚集索引的索引中只存放索引键,不存放数据)。
创建成功后,再次执行sp_delete_backuphistory,可以成功执行,MSDB也可以成功收缩。
解决办法:
==========
1.使用一下语句为MSDB的几张大表创建聚集索引
USE msdb;
GO
CREATE CLUSTERED INDEX [backupset_s01] ON [dbo].[backupset] ([media_set_id])
CREATE CLUSTERED INDEX [restorefile_s01] ON [dbo].[restorefile] ([restore_history_id])
CREATE CLUSTERED INDEX [restorefilegroup_s01] ON [dbo].[restorefilegroup] ([restore_history_id])
2.执行一下语句删除备份和还原的历史记录
USE msdb;
GO
EXEC sp_delete_backuphistory '01/01/11';
3.建议定期执行sp_delete_backuphistory
附加
==========
参考链接:http://msdn.microsoft.com/zh-cn/library/ms188328(v=SQL.90).aspx