运行的时候发现了这个问题
dbbc checkdb
.
它引发了损坏错误,所以我们继续对数据库进行 dbcc 检查目录,结果是
消息 3852,级别 16,状态 1,第 1 行
sys.objects (type=IT) 中的行 (object_id=160237313) 在 sys.indexes 中没有匹配的行 (object_id=160237313,index_id=0)。消息 3852,级别 16,状态 1,第 1 行
sys.objects(type=IT)中的行(object_id=160237313)在 sys.columns 中没有匹配的行(object_id=160237313,column_id=1)消息 3857,级别 16,状态 1,第 1 行
属性 (internal_type=NULL,parent_id=NULL,parent_minor_id=NULL) 是必需的,但在 sys.internal_tables 中缺少行 (object_id=160237313)。
我尝试了多种方法,例如修复重建和恢复数据丢失,但没有解决这个问题
问题是由于
select *
from sys.internal_tables
where parent_id is null
导致
name object_id principal_id schema_id parent_object_id type type_desc create_date modify_date is_ms_shipped is_published is_schema_published internal_type internal_type_desc parent_id parent_minor_id lob_data_space_id filestream_data_space_id
queue_messages_144237256 160237313 NULL 4 144237256 IT INTERNAL_TABLE 2023-02-25 16:07:28.660 2023-02-25 16:07:28.660 0 0 0 NULL NULL NULL NULL 0 NULL
有什么办法可以恢复这个数据库吗?
任何改变系统表的方法,这似乎是来自服务代理的队列消息
dbcc checkdb repair_allow_data_loss
dbcc checkdb repair_rebuild