概述
今天襄阳反馈有台SqlServer服务器后出现“事务日志空间已满”的错误,以为长时间没有截断日志,导致日志文件太大,结果发现不是此问题,观察发现在Sqlserver的Log日志目录中堆积了大量的sqldump*.log,sqldump*.txt,sqldump*.mdmp文件,一分钟有很多个这样的文件,将磁盘空间耗尽。
部分报错:
下面简单介绍下解决过程~
1、检查数据库完整性
DBCC CHECKDB('msdb')
观察结果可以发现sysjobhistory表有问题:
sysjobhistory的 DBCC 结果。
消息 8933,级别 16,状态 1,第 1 行
表错误: 对象 ID 149575571,索引 ID 1,分区 ID 72057594039828480,分配单元 ID 72057594040811520 (类型为 In-row data)。页 (1:1816) 上的低键值(级别 0)不大于等于父代 (1:474) 槽 3 中的键值。
消息 8981,级别 16,状态 1,第 1 行
表错误: 对象 ID 149575571,索引 ID 1,分区 ID 72057594039828480,分配单元 ID 72057594040811520 (类型为 In-row data)。(1:3069) 的下一指针指向页 (1:1820)。但既未遇到 (1:1820),也未遇到其父级。可能是因为链链接错误。
消息 8978,级别 16,状态 1,第 1 行
表错误: 对象 ID 149575571,索引 ID 1,分区 ID 72057594039828480,分配单元 ID 72057594040811520 (类型为 In-row data)。页 (1:1821) 缺少上一页 (1:1817) 对它的引用。可能是因为链链接有问题。
对象 'sysjobhistory' 的 186 页中有 853 行。
CHECKDB 在表 'sysjobhistory' (对象 ID 149575571)中发现 0 个分配错误和 3 个一致性错误。
2、分析表的索引
DBCC showcontig('sysjobhistory')
3、重建表索引
DBCC DBREINDEX('sysjobhistory')
4、重新检查数据库完整性
DBCC CHECKDB('msdb')
后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下!