您的位置:   主页 > 技术文章

sqlserver数据库系统表损坏的语句修复的处理方法

时间:2010-03-25 14:42来源:青岛数据恢复 作者:青岛四通数据恢复公司 点击:1200次

一, 系统表损坏一般出现以下几种情况:

      (1) 用 DBCC CHECKDB 携带任何参数都无法修复数据库,也就是说:DBCC CHECKDB对这个帐套根本不起作用;

 无法执行如下操作:
select * from sysobjects 或select * from sysindexes
或select * from syscolumns ;
      无法用SQL server DTS或其他SQL 脚本导库工具进行导库,导库的中途失败,报告:连接中断      在企业管理器或查询分析器中,部分用户数据表无法访问。
 
修复的方法:
 
例:一sql svr数据库,实体名为:AIS20030529181217
用DBCC CHECKDB检测,报告(用DBCC CHECKDB 带任何参数都是以下提示):
服务器: 消息 8966,级别 16,状态 1,行 1
未能读取并闩锁页 (1:29262)(用闩锁类型 SH)。SYSOBJECTS 失败。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
 
执行select * from sysobjects,报告如下:
服务器: 消息 644,级别 21,状态 3,行 1
未能在索引页 (1:29262) 中找到 RID ‘16243a6d19100’的索引条目(索引 ID 0,数据库‘AIS20030529181217’)。
连接中断
   但是执行select * from sysindexes 和select * from syscolumns 正常。
   这说明只有sysobjects表损坏,而 sysindexes 和 syscolumns 没有问题。
 
处理步骤:
第一步: 处理可以访问的数据表
(1.1) 找出哪些表不可访问;
   新建立一个sql svr数据库,数据库实体名为AisNew。进入查询分析器,执行如下SQL:
--****************************************************
useAIS20030529181217
DECLARE @TbName VARCHAR(80)
DECLARE FindErrTable SCROLL CURSOR FOR 
 selectnamefrom AisNew.dbo.sysobjectswhere xtype=‘u’order byname
OPEN FindErrTable
FETCH FindErrTable INTO @TbName
 WHILE@@FETCH_STATUS<>-1
     BEGIN
           print @TbName
           exec( ‘select top 1 * from’+ @TbName)
           FETCH FindErrTable INTO @TbName
     END
PRINT ‘Scan Complate…’
CLOSE FindErrTable
DEALLOCATE FindErrTable
--****************************************************
   执行此SQL给出的报告的最后几行为:
…
T_voucher
服务器: 消息 644,级别 21,状态 3,行 1
未能在索引页 (1:29262) 中找到 RID ‘161dd201a100’的索引条目(索引 ID 0,数据库‘AIS20030529181217’)。
连接中断
 
    根据以上报告可以知道 T_voucher 表在sysobjects表中的对应记录出错,造成T_voucher不能访问。修改上面的SQL:在声明游标的记录集中屏蔽T_voucher 表。即:
…
DECLARE FindErrTable SCROLL CURSOR FOR 
 select name from AisNew.dbo. sysobjects where xtype=‘u’ and name != ’t_voucher’
 order by name
…
    修改完毕,继续执行此SQL。如此反复,就能够不断报告出sysobjects中那些表不能访问。
 (1.2) 导 库
       用SQL DTS工具将AIS20030529181217中可以访问的数据表导入AisNew。
 
青岛四通数据恢复中心在数据库系统表损坏方面已成功解决,本中心花巨资(数千美元)引进国外的sql server数据库修复软件,修复后的数据库可以在企业管理里正常附加。数据库里的表可以100%恢复。
 
 
 
青岛数据库修复       www.raidst.com       联系人:王鹏      电话: 15063041430