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

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=uorder byname
OPEN FindErrTable
FETCH FindErrTable INTO @TbName
 WHILE@@FETCH_STATUS<>-1
     BEGIN
           print @TbName
           execselect 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