Sqlserver DBCC Check 遇到Msg 3853报错涉及sys.columns和sys.objects信息不匹配的解决方法

对数据库CacheDBMSIntl执行DBCC checkcatalog('CacheDBMSIntl')时遇到报错如下

sql 复制代码
Msg 3853, Level 16, State 1, Line 7
Attribute (object_id=1071830442) of row (object_id=1071830442,column_id=1) in sys.columns does not have a matching row (object_id=1071830442) in sys.objects.
Msg 3853, Level 16, State 1, Line 7
Attribute (object_id=1071830442) of row (object_id=1071830442,column_id=2) in sys.columns does not have a matching row (object_id=1071830442) in sys.objects.
...
Msg 3853, Level 16, State 1, Line 7
Attribute (object_id=1071830442) of row (object_id=1071830442,column_id=51) in sys.columns does not have a matching row (object_id=1071830442) in sys.objects.

这段报错看起来是sys.columns中1到51个字段对应的表的object_id=1071830442和sys.objects对应的表的object_id匹配不是,使用如下两个语句查询这个两个系统视图,发现果然如此,sys.objects没有该表的记录,但是sys.columns有该表的记录,说明系统视图sys.objects和sys.columns信息对应不上,按正常逻辑只要是执行drop table这张操作是会同时在这两个系统视图删除这表的信息,而且Sqlserver从Sqlserver 2005之后就不能再对系统视图执行dml操作否则会报错Ad hoc updates to system catalogs are not allowed。了解到这个数据库实例是从Sqlserver 2000一路升级到Sqlserver 2019,猜测应该是之前有人在Sqlserver 2000的时候有人执行了delete from sys.objects where object_id=1071830442这样的操作,导致了这样的问题。了解了原因后,开始尝试修复操作

1、使用允许数据丢失的修复方式DBCC CHECKDB ('CacheDBMSIntl',REPAIR_ALLOW_DATA_LOSS)来修复,发现依旧报和DBCC checkcatalog('CacheDBMSIntl')一样的错误。

2、把这个数据库备份,再把备份恢复到其他数据库服务器,在其他数据库服务器上执行DBCC checkcatalog('CacheDBMSIntl'),发现报错依旧

3、使用安装软件的Repair选项发现一样无法解决。

最后的解决思路是使用copy database的方式重建一个新的CacheDBMSIntl_new,再把CacheDBMSIntl改名为CacheDBMSIntl_old,再把CacheDBMSIntl_new改名为CacheDBMSIntl,至此彻底解决

sql 复制代码
select * from sys.objects where object_id=1071830442
select * from sys.columns where object_id=1071830442
相关推荐
lingggggaaaa5 分钟前
小迪安全v2023学习笔记(一百三十四讲)—— Windows权限提升篇&数据库篇&MySQL&MSSQL&Oracle&自动化项目
java·数据库·windows·笔记·学习·安全·网络安全
小光学长7 分钟前
基于Vue的保护动物信息管理系统r7zl6b88 (程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
一匹电信狗34 分钟前
【MySQL】数据库的相关操作
linux·运维·服务器·数据库·mysql·ubuntu·小程序
TDengine (老段)2 小时前
连接 TDengine 遇到报错 “failed to connect to server, reason: Connection refused” 怎么办?
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
李慕婉学姐3 小时前
Springboot黄河文化科普网站5q37v(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
Cabbage_acmer3 小时前
MySQL期中考试突击!
数据库·mysql
Lu Yao_4 小时前
Redis 缓存
数据库·redis·缓存
小桥流水人家哇4 小时前
性能测试单场景测试时,是设置并发读多个文件,还是设置不同的用户读不同的文件?
数据库·性能测试技巧
表示这么伤脑筋的题我不会4 小时前
Oracle 21C 部署ogg踩过的坑
数据库·oracle
你不是我我4 小时前
【Java 开发日记】MySQL 与 Redis 如何保证双写一致性?
数据库·redis·缓存