曾經(jīng)遇到過(guò)一個(gè)用戶MSDB數(shù)據(jù)庫(kù)非常大,讓我?guī)兔Σ椴槭鞘裁丛颉J褂胹p_spaceused找出了所有表的數(shù)據(jù)大小,發(fā)現(xiàn)問(wèn)題是SQL Server備份和還原歷史表數(shù)據(jù)太大。用戶經(jīng)常會(huì)做日志備份,但是從來(lái)沒(méi)有清除過(guò)歷史記錄。后來(lái)在設(shè)置了維護(hù)計(jì)劃定期清除備份記錄,問(wèn)題就不在發(fā)生了。
這里列出了查詢SQL Server備份還原記錄的語(yǔ)句以及如何清理數(shù)據(jù)庫(kù)備份還原的腳本:
--查詢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.restorehistoryrhONrh.backup_set_id=bus.backup_set_id
---清除20120101之前所有的備份還原記錄(沒(méi)有參數(shù)指定只刪除備份或者歡迎記錄)
use msdb
go
exec sp_delete_backuphistory@oldest_date='20121010'
--刪除'AdventureWorks2012'數(shù)據(jù)庫(kù)的備份還原記錄(沒(méi)有參數(shù)指定保留日期,All或者None)
USE msdb;
GO
EXEC sp_delete_database_backuphistory@database_name='AdventureWorks2012';
聯(lián)系客服