以文本方式查看主题

-  昂捷论坛  (http://enjoyit.com.cn/bbs/index.asp)
--  □-技术研讨会  (http://enjoyit.com.cn/bbs/list.asp?boardid=36)
----  数据库表损坏的处理  (http://enjoyit.com.cn/bbs/dispbbs.asp?boardid=36&id=7609)

--  作者:czg1981
--  发布时间:2010/7/19 19:48:22
--  数据库表损坏的处理

如果对数据操作时,提示循环冗余等错误,可以执行一下 dbcc checkdb 检查表的逻辑性,如果出现类似的提示:

消息 8966,级别 16,状态 2,第 1 行
无法使用闩锁类型 SH 读取并闩锁页 (1:5782420)。23(数据错误(循环冗余检查)。) 失败。
消息 2533,级别 16,状态 1,第 1 行
表错误: 看不到分配给对象 ID 174883940,索引 ID 0,分区 ID 11461193891840,分配单元 ID 72057595680129024 (类型为 In-row data)的页 (1:7473486)。该页可能无效,或者页头中可能包含错误的分配单元 ID。

 

这说明数据库中有表(174883940)有损坏,先将数据库改成单用户状态exec sp_dboption enjoy_store, N\'single\', N\'true\',然后执行可以执行DBCC checkdb (enjoy_store,REPAIR_ALLOW_DATA_LOSS)进行修改,或者通过表的ID找到具体的表名称,对表进行单个修复,如:dbcc checktable (\'tbs_d_gds\',REPAIR_REBUILD),再将数据库状态改回来exec sp_dboption enjoy_store, N\'single\', N\'false\'


--  作者:czg1981
--  发布时间:2010/8/11 9:12:19
--  

查看错误表名称可以用系统索引

select * from sysobjects where id=\'174883940\'