如何修复系统表sysindexes?

jyh070207 2011-11-02 05:45:49
如何修复系统表sysindexes?
因意外停电,导致数据库出错,经检查是用户数据库的sysindeses表出了问题,

在查询分析器中运行
select * from sysindexes
出错如下:
服务器: 消息 7105,级别 22,状态 6,行 1
text、ntext 或 image 节点的页 (1:97010),槽 1 不存在。

连接中断

-------------------------------
进行以下修复操作:
USE master
Go
sp_dboption 'db_03','single user','true'
Go
USE zcerp_psm_b
DBCC CHECKDB('db_03',REPAIR_ALLOW_DATA_LOSS)
Go

用单用户模式,
运用DBCC CHECKDB('db_03',REPAIR_ALLOW_DATA_LOSS)

出错信息如下:

服务器: 消息 8965,级别 16,状态 1,行 1
表错误: 对象 ID 2。text、ntext 或 image 节点(位于页 (1:97010),槽 6,文本 ID 321668513792)被页 (1:779),槽 2 引用,但在扫描中未曾发现该节点。
'sysindexes' 的 DBCC 结果。
DBCC 语句的修复级别导致回避了此修复。
系统无法自修复此错误。

对象 'sysindexes' 有 3903 行,这些行位于 187 页中。
CHECKTABLE 发现了 0 个分配错误和 11 个一致性错误(在表 'sysindexes' 中,该表的对象 ID 为 2)。

完成后依然没有修复!

请教如何修复已有问题的sysindexes表





...全文
902 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2011-11-02
  • 打赏
  • 举报
回复
这个问题应该不是sysindex表的错误,而是有索引错误的那个表,无法按现有索引找到相关的记录内容了.
-晴天 2011-11-02
  • 打赏
  • 举报
回复
建议:
将现有数据库中的含有text,ntext,image类型列的表,用导出的方法导到同一服务器的其他数据库中,然后在原数据库中用truncate table 命令删除所有记录,然后再用dbcc检查,不行再处理下一个表.相信在处理完有错误的表时,这个问题会被解决掉.然后再把数据导回来.
jyh070207 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fredrickhu 的回复:]
SQL code
USE MASTER
GO
sp_dboption ‘databaseName’, ’single user’, ‘true’
Go
DBCC CHECKDB(’databaseName’, REPAIR_REBUILD)
Go
USE databaseName
go
exec sp_msforeachtable ‘DBCC CHECKTABLE(''’?''’……
[/Quote]
采用允许丢失数据的方式修复,还是不行....主要是sysindexes表有问题
--小F-- 2011-11-02
  • 打赏
  • 举报
回复
USE MASTER
GO
sp_dboption ‘databaseName’, ’single user’, ‘true’
Go
DBCC CHECKDB(’databaseName’, REPAIR_REBUILD)
Go
USE databaseName
go
exec sp_msforeachtable ‘DBCC CHECKTABLE(''’?''’,REPAIR_REBUILD)’
go
sp_dboption ‘databaseName’, ’single user’, ‘false’
Go
如果还不行,可以采用允许丢失数据的方式修复,如下:
USE MASTER
GO
sp_dboption ‘databaseName’, ’single user’, ‘true’
Go
DBCC CHECKDB(’databaseName’, REPAIR_ALLOW_DATA_LOSS)
Go
USE databaseName
go
exec sp_msforeachtable ‘DBCC CHECKTABLE(''’?''’,REPAIR_REBUILD)’
go
sp_dboption ‘databaseName’, ’single user’, ‘false’
Go



复制如下命令,写入记事本,保存为:运行CHKDSK.bat 双击运行,完了重启电脑.一般能解决的.
@ECHO OFF
for %%1 in (c: d: e: f: G: h: i: j: k: l: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:) do (if exist %%1 ECHO Y|chkdsk %%1 /R /x)
@pause
jyh070207 2011-11-02
  • 打赏
  • 举报
回复
重建不了表索引,用户表的数据都没有问题,有问题只是sysindexes表.
服务器: 消息 7105,级别 22,状态 6,行 1
text、ntext 或 image 节点的页 (1:97010),槽 1 不存在。

现在的想法是,能不能找有问题的记录对应的表,只这些表重建一下,是否可行,

整个库的导需要的时间太长.数据库现在还能用.
中国风 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jyh070207 的回复:]

是sql 2000 用户数据库中sysindexes,
DBCC DBREINDEX 出相同的错误.
[/Quote]

修復前備份一下,看所有表的索引都重建一下,再看看有沒有

有錯時,新建DB把數據導入新DB。
jyh070207 2011-11-02
  • 打赏
  • 举报
回复
是sql 2000 用户数据库中sysindexes,
DBCC DBREINDEX 出相同的错误.
中国风 2011-11-02
  • 打赏
  • 举报
回复
SQL2000?

sysindexes為系統表
-晴天 2011-11-02
  • 打赏
  • 举报
回复
DBCC DBREINDEX
-晴天 2011-11-02
  • 打赏
  • 举报
回复
重建一下索引试试.

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧