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
相关推荐
坚定信念,勇往无前7 分钟前
electron-vite 安装better-sqlite3
javascript·数据库·electron
大明者省11 分钟前
Ubuntu22.04 宝塔面板与 XFCE 远程桌面端口兼容性分析
运维·服务器·数据库·笔记
liudanzhengxi37 分钟前
巧用ULN2003A轻松扩展单片机IO口
数据库·mongodb
Teable任意门互动1 小时前
深度解析:AI 赋能开源多维表格,实现企业全场景数据整合与高效应用
数据库·人工智能·低代码·信息可视化·开源·数据库开发
DevOpenClub1 小时前
职教高考及高职分类招生控制线 API 接口
java·数据库·高考
funnycoffee1231 小时前
华为S5736交换机3层ECMP负载方式
linux·服务器·数据库
添砖java‘’1 小时前
MySQL复合查询
数据库·mysql
星川水月1 小时前
Access数据库快速入门——外部数据导入和SQL简单查询
数据库·sql·access
清平乐的技术专栏2 小时前
一文读懂Kafka中的“消费”(对标MySQL数据库)
数据库·mysql·kafka