曾經(jīng)遇到過一個用戶MSDB數(shù)據(jù)庫非常大,讓我?guī)兔Σ椴槭鞘裁丛?。使用sp_spaceused找出了所有表的數(shù)據(jù)大小,發(fā)現(xiàn)問題是SQL Server備份和還原歷史表數(shù)據(jù)太大。用戶經(jīng)常會做日志備份,但是從來沒有清除過歷史記錄。后來在設置了維護計劃定期清除備份記錄,問題就不在發(fā)生了。
這里列出了查詢SQL Server備份還原記錄的語句以及如何清理數(shù)據(jù)庫備份還原的腳本:
--查詢SQL Server備份歷史
SELECT CONVERT(CHAR(100),SERVERPROPERTY('Servername'))ASServer, msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_start_date, msdb.dbo.backupset.backup_finish_date, msdb.dbo.backupset.expiration_date, CASE msdb..backupset.type WHEN 'D' THEN 'Database' WHEN 'L' THEN 'Log' END ASbackup_type, msdb.dbo.backupset.backup_size, msdb.dbo.backupmediafamily.logical_device_name, msdb.dbo.backupmediafamily.physical_device_name, msdb.dbo.backupset.nameASbackupset_name, msdb.dbo.backupset.description FROM msdb.dbo.backupmediafamily INNER JOIN msdb.dbo.backupsetONmsdb.dbo.backupmediafamily.media_set_id=msdb.dbo.backupset.media_set_id ORDER BY msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_finish_date
-----查詢SQLServer還原歷史
select bus.server_nameas'server',rh.restore_date,bus.database_nameas'database', CAST(bus.first_lsnASVARCHAR(50))asLSN_First, CAST(bus.last_lsnASVARCHAR(50))asLSN_Last, CASE rh.[restore_type] WHEN 'D'THEN'Database' WHEN 'F'THEN'File' WHEN 'G'THEN'Filegroup' WHEN 'I'THEN'Differential' WHEN 'L'THEN'Log' WHEN 'V'THEN'Verifyonly' END ASrhType FROM msdb.dbo.backupsetbus INNER JOINmsdb.dbo.restorehistoryrhON rh.backup_set_id=bus.backup_set_id
---清除20120101之前所有的備份還原記錄(沒有參數(shù)指定只刪除備份或者歡迎記錄)
use msdb go exec sp_delete_backuphistory@oldest_date='20121010'
--刪除'AdventureWorks2012'數(shù)據(jù)庫的備份還原記錄(沒有參數(shù)指定保留日期,All或者None)
USE msdb; GO EXEC sp_delete_database_backuphistory@database_name='AdventureWorks2012';
|
|