SQLSERVER--定期清理维护作业的历史记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQLSERVER--定期清理维护作业的历史记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2923字,纯文字阅读大概需要5分钟。
内容图文
msdb.dbo.sp_delete_database_backuphistory @database_name = N‘monitor‘ GO执行该存储过程后,会在msdb数据库中嵌套地删除备份相关的N张表,其中一条删除语句如下:
DELETE msdb.dbo.backupmediafamily FROM msdb.dbo.backupmediafamily bmf WHERE bmf.media_set_id IN ( SELECT media_set_id FROM @media_set_id ) AND ( ( SELECT COUNT(*) FROM msdb.dbo.backupset WHERE media_set_id = bmf.media_set_id ) = 0 )
当备份和还原历史记录信息较多的时候,删除操作消耗的资源会成几何数增长,由于该服务器用作日志传送服务器,承载很多个数据库的日志传送,因此相关备份表中存有大量数据,导致删除操作长时间不能完成。
解决办法:
定期执行下面脚本来清理备份还原数据:
--设置历史记录保存期限为1天 DECLARE @keepMinutes BIGINT SET @keepMinutes= 60*24 DECLARE @expiredDT NVARCHAR(100) SELECT @expiredDT = dbo.ufn_FormatDate(DATEADD(MINUTE, 0 - @keepMinutes, GETDATE()), ‘yyyy-MM-ddTHH:mm:ss‘) EXEC msdb.dbo.sp_delete_backuphistory @expiredDT EXEC msdb.dbo.sp_purge_jobhistory @oldest_date = @expiredDT EXEC msdb.dbo.sp_maintplan_delete_log NULL, NULL, @expiredDT
上面脚本中使用到一个日期格式转换函数,代码为:
/****** Object: UserDefinedFunction [dbo].[ufn_FormatDate] Script Date: 2015/11/24 19:40:45 ******/ DROP FUNCTION [dbo].[ufn_FormatDate] GO /****** Object: UserDefinedFunction [dbo].[ufn_FormatDate] Script Date: 2015/11/24 19:40:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --==================================== --将时间转换成制定格式的字符串 CREATE FUNCTION [dbo].[ufn_FormatDate] ( @Datetime DATETIME , @FormatMask VARCHAR(32) ) RETURNS VARCHAR(32) AS BEGIN DECLARE @StringDate VARCHAR(32) SET @StringDate = @FormatMask IF ( CHARINDEX(‘YYYY‘, @StringDate) > 0 ) SET @StringDate = REPLACE(@StringDate, ‘YYYY‘, DATENAME(YY, @Datetime)) IF ( CHARINDEX(‘YY‘, @StringDate) > 0 ) SET @StringDate = REPLACE(@StringDate, ‘YY‘, RIGHT(DATENAME(YY, @Datetime), 2)) IF ( CHARINDEX(‘MM‘, @StringDate) > 0 ) SET @StringDate = REPLACE(@StringDate, ‘MM‘, RIGHT(‘0‘ + CONVERT(VARCHAR, DATEPART(MM, @Datetime)), 2)) IF ( CHARINDEX(‘DD‘, @StringDate) > 0 ) SET @StringDate = REPLACE(@StringDate, ‘DD‘, RIGHT(‘0‘ + DATENAME(DD, @Datetime), 2)) IF ( CHARINDEX(‘HH‘, @StringDate) > 0 ) SET @StringDate = REPLACE(@StringDate, ‘HH‘, RIGHT(‘0‘ + DATENAME(HH, @Datetime), 2)) IF ( CHARINDEX(‘mm‘, @StringDate) > 0 ) SET @StringDate = REPLACE(@StringDate, ‘mm‘, RIGHT(‘0‘ + DATENAME(mm, @Datetime), 2)) IF ( CHARINDEX(‘ss‘, @StringDate) > 0 ) SET @StringDate = REPLACE(@StringDate, ‘ss‘, RIGHT(‘0‘ + DATENAME(ss, @Datetime), 2)) IF ( CHARINDEX(‘ms‘, @StringDate) > 0 ) SET @StringDate = REPLACE(@StringDate, ‘ms‘, RIGHT(‘0‘ + DATENAME(ms, @Datetime), 2)) RETURN @StringDate END --==================================== GOView Code
没多少技术含量,厚脸拿出来供初学者学习下!
============================================
SQLSERVER--定期清理维护作业的历史记录
标签:
本文系统来源:http://www.cnblogs.com/TeyGao/p/5388349.html
内容总结
以上是互联网集市为您收集整理的SQLSERVER--定期清理维护作业的历史记录全部内容,希望文章能够帮你解决SQLSERVER--定期清理维护作业的历史记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。