sqlserver系统表损坏处理方法_第1页
sqlserver系统表损坏处理方法_第2页
sqlserver系统表损坏处理方法_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SQL Serve系统表损坏的处理方法一、SQL SV瞰据库中三张重要的系统表sysobjects :在数据库内创建的每个对象(约束、默认值、日志、规则、存 储过程等)在表中占一行。sysindexes :数据库中的每个索引和表在表中各占一行。syscolum ns :每个表和视图中的每列在表中占一行,存储过程中的每个参数 在表中也占一行。这三张表用ID (表ID)字段关联。这三张系统表一旦损坏,与之对应数据库对 象将无法访问,其作用相当于 DOS的“文件分配表”。二、系统表损坏的症状用DBCCCHECKD携带任何参数都无法修复数据库,也就是说:DBCCCHECKDB 对这个帐套根本不起作用;

2、无法执行如下操作:select * from sysobjects 或 select * from sysindexes 或 select * from syscolumns ;无法用SQL server DTS或其他SQL脚本导库工具进行导库,导库的中途失 败,报告:连接中断;在企业管理器或查询分析器中,部分用户数据表无法访问。三、处理方法处理这种数据库,分为两个大的步骤:第一步:处理可以访问的数据表1)找出哪些表不可访问,即:系统表中哪些记录损坏;2)用SQL server DTS把能够访问的用户数据表导入一个新的 DataBase。 在导库时,不能选折(1)中不能访问的数据表。第二步:处

3、理不可访问的数据表:1)找出系统表中错误记录的ID ;2)根据“错误记录的 ID”,删除 sysobjects、sysindexes、syscolumns 表 错误的记录;3)根据“错误记录的ID” ,重建系统表记录;4)重建完毕,如果该表可以访问,那么用DTS单独将此表导入新的DataBase。说明:重建系统表方式不一定会成功,比如由于DISK I/O错误,如果仅仅是保存系统表的磁盘扇区出错,那么重建系统表方式可以挽回数据。如果保存用户数据表的磁盘扇区出错,那么即使重建系统表也不能解决问题。如果重要的用户数据表无法导库,如:t_Voucher、IcStockbill 、ICSale等,那么可

4、以用用“第二步”中的方法一试。四、例例:一 sql svr 数据库,实体名为:AIS20030529181217用DBCC CHECK检测,报告(用DBCC CHECKDB任何参数都是以下提示):服务器:消息8966,级别16,状态1,行1未能读取并闩锁页(1:29262)(用闩锁类型 SH)。SYSOBJECT缺败。DBCC执行完毕。如果 DBCC输出了错误信息,请与系统管理员联系。执行 select * from sysobjects,报告如下:服务器:消息644,级别21,状态3,行1未能在索引页 (1:29262) 中找到 RID 6243a6d19100的索引条目(索引 ID 0,数

5、 据库 AIS20030529181217 ')。连接中断但是执行 select * from sysindexes 和 select * from syscolumns 正常。 这说明只有 sysobjects 表损坏,而 sysindexes 和 syscolumns 没有问题。处理步骤:第一步:处理可以访问的数据表(1.1) 找出哪些表不可访问;新建立一个sql svr数据库,数据库实体名为AisNew。进入查询分析器,执 行如下SQL*use AIS20030529181217DECLARTbNameVARCHA(RO)DECLARFi ndErrTable SCROLL CU

6、RSOR FORselect namefrom AisNew.dbo. sysobjects where xtype= u" order by nameOPENFi ndErrTableFETCHFi ndErrTableINTO TbNameWHILE FETCH_STA<USBEGINprint TbNameexec( select top 1 * from ' + TbName)FETCHFi ndErrTableINTO TbNameENDPRINT Scan Complate 'CLOSED ndErrTableDEALLOCATEi ndErrTab

7、le*执行此SQL给出的报告的最后几行为:T_voucher服务器:消息644,级别21,状态3,行1未能在索引页(1:29262) 中找到RID 1'61dd201a100'的索引条目(索引 ID 0,数据库 AIS20030529181217 )。连接中断根据以上报告可以知道T_voucher表在sysobjects表中的对应记录出错,造 成T_voucher不能访问。修改上面的SQL在声明游标的记录集中屏蔽 T_voucher表。 即:'and name !='voucherDECLARFi ndErrTableSCROLL CURSOR FORselec

8、t name from AisNew.dbo. sysobjects where xtype= order by n ame修改完毕,继续执行此SQL如此反复,就能够不断报告出 sysobjects中那些 表不能访冋(1.2) 导库用SQL DTS工具将AIS20030529181217中可以访问的数据表导入 AisNew。第二步:处理不可访问的数据表:(2.1)找出系统表中错误记录的ID-获得 AIS20030529181217中 T_voucher 表在 sysobjects 中的 ID :SELECTid FROMMS20030529181217.dbo. sysobjects WHER

9、Eame= 't_voucher '=123(说明:通常即使sysobjects 表损坏,不能做select * from sysobjects 查询, 但是可以做 select ID,name from sysobjects 查询。如果 select ID,name from sysobjects 查询也不能执行,可以对照 AisNew和AIS20030529181217两个数据库 中的同名表:syscolumns。根据 AisNew.dbo. syscolumns 表中 T_voucher 所占字段 的个数以及各个字段的名称,在AIS20030529181217.dbo.

10、syscolumns中找出T_voucher所对应的记录,由此获得 T_voucher在AIS20030529181217数据库的系 统表中所分配的ID。)-获得 AisNew 中 T_voucher 表在 sysobjects 中的 ID :SELECTid FROMAisNew.dbo. sysobjects WHEREame= 't_voucher '=456(2.2) 删除AIS20030529181217中系统表中错误记录:WHEREI=123WHEREI=123DELETEAIS20030529181217.dbo. sysobjectsDELETEAIS20030

11、529181217.dbo. sysin dexessyscolumns WHERid=123DELETEAIS20030529181217.dbo.(2.3) 重建系统表记录-重建 AIS20030529181217.dbo.sysobjects 表中 T_voucher 表对应的记录:INSERT INTO AIS20030529181217.dbo. sysobjects(n ame,id,xtype,uid,i nfo,status,base_schema_ver,repli nfo,pare nt_o bj,crdate,ftcatid)SELECTt_voucher_b :123,

12、xtype,uid,info,status,base_schema_ver,replinfo,parent_obj,crdate,ftcatidFROM AisNew.dbo. sysobjects WHERid=456-重建 AIS20030529181217.dbo.sysindexes 表中 t_voucher 表对应的记录:INSERT INTO AIS20030529181217.dbo. sysin dexes(id,status,first,i ndid,root, minlen ,keyc nt,groupid,dpages,reserved,used,rowc nt,rowm

13、 odctr,reserved3,reserved4,xmaxle n,maxirow,OrigFillFactor,StatVersio n,reserved2,Fir stIAM,impid,lockflags,pgmodctr,keys ,n ame,statblob)SELECT123,status,first,i ndid,root, minlen ,keyc nt,groupid,dpages,reserved,used,rowc nt,rowm odctr,reserved3,reserved4,xmaxle n,maxirow,OrigFillFactor,StatVersio

14、 n,reserved2,Fir stIAM,impid,lockflags,pgmodctr,keys ,n ame,statblobFROMXisNew.dbo. sysindexes WHERid=456-重建 AIS20030529181217.dbo.syscolumns 表中 t_voucher 表对应的记录:INSERT INTO AIS20030529181217.dbo. syscolu mns(n ame,id,xtype,typestat,xusertype,le ngth,xprec,xscale,colid,xoffset,bitpos,reserve d,colst

15、at,cdefault,doma in,nu mber,colorderby,autoval,offset,collati oni d,la nguage) SELECTn ame,123,xtype,typestat,xusertype,le ngth,xprec,xscale,colid,xoffset,bitpos,reserved,colstat,cdefault,doma in,nu mber,colORDERBY,autoval,offset,collati oni d,la nguage FROMXisNew.dbo. syscolumns WHERid=456(2.4 )用DTS单独将t_voucher_b表导入新的DataBase经过以上操作,A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论