Sqlserver 清除维护相关日志

在Sqlserver使用过程中msdb数据库越来越大 这个就要定期删除长时间不用的日志。

---1.查看作业历史记录

复制代码
SELECT TOP 1000 [instance_id]
      ,[job_id]
      ,[step_id]
      ,[step_name]
      ,[sql_message_id]
      ,[sql_severity]
      ,[message]
      ,[run_status]
      ,[run_date]
      ,[run_time]
      ,[run_duration]
      ,[operator_id_emailed]
      ,[operator_id_netsent]
      ,[operator_id_paged]
      ,[retries_attempted]
      ,[server]
  FROM [msdb].[dbo].[sysjobhistory]
 
 --删除操作记录
  delete from [msdb].[dbo].[sysjobhistory]
复制代码

 

 

---2.查看维护计划日志

复制代码
--查询指定日期前的日志
SELECT [task_detail_id]
      ,[plan_id]
      ,[subplan_id]
      ,[start_time]
      ,[end_time]
      ,[succeeded]
      ,[logged_remotely]
      ,[source_server_name]
      ,[plan_name]
      ,[subplan_name]
  FROM [msdb].[dbo].[sysmaintplan_log] where start_time<'2021-01-01'
-- 删除指定日期前的日志
  delete from [msdb].[dbo].[sysmaintplan_log]  where start_time<'2021-01-01'
复制代码

---3.查看维护计划日志详情

复制代码
--查询指定日期前的日志明细
SELECT  [task_detail_id]
      ,[line1]
      ,[line2]
      ,[line3]
      ,[line4]
      ,[line5]
      ,[server_name]
      ,[start_time]
      ,[end_time]
      ,[error_number]
      ,[error_message]
      ,[command]
      ,[succeeded]
  FROM [msdb].[dbo].[sysmaintplan_logdetail] where start_time<'2021-01-01'
 
--删除指定日期前的日志明细 
  delete from [msdb].[dbo].[sysmaintplan_logdetail] where start_time<'2021-01-01'
复制代码

 

复制代码
USE msdb

GO

-- 查看对象空间专用情况,发现排名第一的sysmaintplan_logdetail占用空间超过100G

SELECT  OBJECT_NAME(i.object_id) AS objectName,

        i.name AS indexName,
        SUM(a.total_pages) AS totalPages,
        SUM(a.used_pages) AS usedPages,
        SUM(a.data_pages) AS dataPages,
        (SUM(a.total_pages) * 8) / 1024 AS totalSpaceMB,
        (SUM(a.used_pages) * 8) / 1024 AS usedSpaceMB,
        (SUM(a.data_pages) * 8) / 1024 AS dataSpaceMB
FROM    sys.indexes i
INNER JOIN sys.partitions p ON i.object_id = p.object_id AND
                               i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY i.object_id,
        i.index_id,
        i.name
ORDER BY SUM(a.total_pages) DESC,
        OBJECT_NAME(i.object_id);

-- 清理维护日志(truncate之前,临时解除外键约束)
ALTER TABLE [dbo].[sysmaintplan_log] DROP CONSTRAINT [FK_sysmaintplan_log_subplan_id];
GO
ALTER TABLE [dbo].[sysmaintplan_logdetail] DROP CONSTRAINT [FK_sysmaintplan_log_detail_task_id];
GO
TRUNCATE TABLE msdb.dbo.sysmaintplan_logdetail;
GO
TRUNCATE TABLE msdb.dbo.sysmaintplan_log;
GO

ALTER TABLE [dbo].[sysmaintplan_log] WITH CHECK ADD CONSTRAINT [FK_sysmaintplan_log_subplan_id] FOREIGN KEY([subplan_id])
REFERENCES [dbo].[sysmaintplan_subplans] ([subplan_id]);
GO
ALTER TABLE [dbo].[sysmaintplan_logdetail] WITH CHECK ADD CONSTRAINT [FK_sysmaintplan_log_detail_task_id] FOREIGN KEY([task_detail_id])
REFERENCES [dbo].[sysmaintplan_log] ([task_detail_id]) ON DELETE CASCADE;
GO


复制代码
posted @   Thenext  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示