sqlserver系统表损坏处理方法.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
梦回唐朝 2003/6/30 SQL Serve系统表损坏的处理方法 一、SQL SVR数据库中三张重要的系统表 sysobjects:在数据库内创建的每个对象(约束、默认值、日志、规则、存 储过程等)在表中占一行。 sysindexes:数据库中的每个索引和表在表中各占一行。 syscolumns:每个表和视图中的每列在表中占一行,存储过程中的每个参数 在表中也占一行。 这三张表用ID(表ID)字段关联。这三张系统表一旦损坏,与之对应数据库对象将无法访问,其作用相当于DOS中的“文件分配表” 。 二、系统表损坏的症状 用 DBCC CHECKDB 携带任何参数都无法修复数据库,也就是说:DBCC CHECKDB对这个帐套根本不起作用; 无法执行如下操作: select * from sysobjects 或select * from sysindexes 或select * from syscolumns ; 无法用SQL server DTS或其他SQL 脚本导库工具进行导库,导库的中途失败,报告:连接中断; 在企业管理器或查询分析器中,部分用户数据表无法访问。 三、处理方法 处理这种数据库,分为两个大的步骤: 第一步:处理可以访问的数据表 1)找出哪些表不可访问,即:系统表中哪些记录损坏; 2)用SQL server DTS把能够访问的用户数据表导入一个新的DataBase 。 在导库时,不能选折(1)中不能访问的数据表。 第二步:处理不可访问的数据表: 找出系统表中错误记录的ID; 根据“错误记录的ID”,删除sysobjects、sysindexes、syscolumns 表错误的记录; 根据“错误记录的ID” ,重建系统表记录; 重建完毕,如果该表可以访问,那么用DTS单独将此表导入新的DataBase。 说明:重建系统表方式不一定会成功,比如由于DISK I/O错误,如果仅仅是保 存系统表的磁盘扇区出错,那么重建系统表方式可以挽回数据。 如果保存用户数据表的磁盘扇区出错,那么即使重建系统表也不能解决问题。 如果重要的用户数据表无法导库,如:t_Voucher、IcStockbill、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 ‘16243a6d19100’ 的索引条目(索引 ID 0,数据库 ‘AIS20030529181217’)。 连接中断 但是执行select * from sysindexes 和select * from syscolumns 正常。 这说明只有sysobjects表损坏,而 sysindexes 和 syscolumns 没有问题。 处理步骤: 第一步: 处理可以访问的数据表 (1.1) 找出哪些表不可访问; 新建立一个sql svr数据库,数据库实体名为AisNew。进入查询分析器,执行如下SQL: --**************************************************** use AIS20030529181217 DECLARE @TbName VARCHAR(80) DECLARE FindErrTable SCROLL CURSOR FOR select name from AisNew.dbo. sysobjects where xtype=‘u’ order by name 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…’ CLOS

文档评论(0)

max + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档