ImageVerifierCode 换一换
格式:DOC , 页数:4 ,大小:30KB ,
资源ID:11539287      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-11539287.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(sql server系统表损坏处理方法.doc)为本站会员(HR专家)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

sql server系统表损坏处理方法.doc

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

2、本不起作用;u 无法执行如下操作:select * from sysobjects 或select * from sysindexes 或select * from syscolumns ;u 无法用SQL server DTS或其他SQL 脚本导库工具进行导库,导库的中途失败,报告:连接中断;u 在企业管理器或查询分析器中,部分用户数据表无法访问。三、处理方法 处理这种数据库,分为两个大的步骤:第一步:处理可以访问的数据表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

4、、ICSale等,那么可以用用“第二步”中的方法一试。四、例例:一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

5、 16243a6d19100 的索引条目(索引 ID 0,数据库 AIS20030529181217)。连接中断 但是执行select * from sysindexes 和select * from syscolumns 正常。 这说明只有sysobjects表损坏,而 sysindexes 和 syscolumns 没有问题。处理步骤:第一步: 处理可以访问的数据表(1.1) 找出哪些表不可访问; 新建立一个sql svr数据库,数据库实体名为AisNew。进入查询分析器,执行如下SQL:-*use AIS20030529181217DECLARE TbName VARCHAR(80)DE

6、CLARE FindErrTable SCROLL CURSOR FOR select name from AisNew.dbo. sysobjects where xtype=u order by nameOPEN FindErrTableFETCH FindErrTable INTO TbName WHILE FETCH_STATUS-1 BEGIN print TbName exec( select top 1 * from + TbName) FETCH FindErrTable INTO TbName ENDPRINT Scan ComplateCLOSE FindErrTableD

7、EALLOCATE 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 na

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

9、bo.sysobjects WHERE name= 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 :SELECT id FROM AisNew.dbo.sysobjects WHERE name= t_voucher=456(2.2) 删除AIS20030529181217中系统表中错误记录:DELETE AIS20030529181217.dbo.sysobjects WHERE id=123DELETE AIS20030529181217.dbo.sysindexe

11、s WHERE id=123DELETE AIS20030529181217.dbo.syscolumns WHERE id=123(2.3) 重建系统表记录-重建AIS20030529181217.dbo.sysobjects表中T_voucher表对应的记录:INSERT INTO AIS20030529181217.dbo.sysobjects (name,id,xtype,uid,info,status,base_schema_ver,replinfo,parent_obj,crdate,ftcatid) SELECT t_voucher_b,123,xtype,uid,info,st

12、atus,base_schema_ver,replinfo,parent_obj,crdate,ftcatid FROM AisNew.dbo. sysobjects WHERE id=456-重建AIS20030529181217.dbo.sysindexes表中t_voucher表对应的记录:INSERT INTO AIS20030529181217.dbo.sysindexes (id,status,first,indid,root,minlen,keycnt,groupid,dpages,reserved,used,rowcnt,rowmodctr,reserved3,reserved

13、4,xmaxlen,maxirow,OrigFillFactor,StatVersion,reserved2,FirstIAM,impid,lockflags,pgmodctr,keys,name,statblob) SELECT 123,status,first,indid,root,minlen,keycnt,groupid,dpages,reserved,used,rowcnt,rowmodctr,reserved3,reserved4,xmaxlen,maxirow,OrigFillFactor,StatVersion,reserved2,FirstIAM,impid,lockflag

14、s,pgmodctr,keys,name,statblobFROM AisNew.dbo.sysindexes WHERE id=456-重建AIS20030529181217.dbo.syscolumns表中t_voucher表对应的记录:INSERT INTO AIS20030529181217.dbo.syscolumns(name,id,xtype,typestat,xusertype,length,xprec,xscale,colid,xoffset,bitpos,reserved,colstat,cdefault,domain,number,colorderby,autoval,o

15、ffset,collationid,language) SELECT name,123,xtype,typestat,xusertype,length,xprec,xscale,colid,xoffset,bitpos,reserved,colstat,cdefault,domain,number,colORDERBY,autoval,offset,collationid,language FROM AisNew.dbo.syscolumns WHERE id=456(2.4)用DTS单独将t_voucher_b表导入新的DataBase经过以上操作,AIS20030529181217中t_voucher_b 表与原t_voucher表共用同一ID。试试看可否执行SELECT * FROM t_voucher_b 查询 如果可以,那么t_voucher_b就一定继承原t_voucher表中的全部数据。再用INSERT INTO AisNew.dbo.T_voucher FROM AIS20030529181217.dbo.t_voucher_b或DTS 将t_voucher_b中的数据导入AisNew。 如果执行SELECT * FROM t_voucher_b 查询仍然报错,这张表彻底没戏了。(2.5) 其他“不可访问的数据表”处理方式同上,重复(2.1)(2.4) 步。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报