zoukankan      html  css  js  c++  java
  • msql 2000 使用DBCC CHECK DB 得出错误,槽引用错误

    转自:http://www.cnblogs.com/firstrose/p/4256257.html

    某个SQL2000的数据库,在通过备份/还原的方法升级到2005时发生错误:



    查找解决方法未果

    正好最近在看 @一线码农 的《sql server之旅》,就想自己试试解决这个问题

    首先运行dbcc checkdb命令,结果如下:



    仔细查看出错信息,里面反复提到一个“对象 ID 2”。另外,信息里还提到“该文本的所有者是由 RID = (1:152:9) id = 213575799 and indid = 37 标识的数据记录”。联想到最近看的《sql server之旅》,觉得第二段信息可能是在说某个数据表。于是select之:



    果然都有对应的表!

    分别select这两个表,发现问题出在sysindexes上:



    这和上面的出错信息也是一致的。

    立刻尝试用dbcc checkdb和dbcc checktable修复,但是却得到以下回应:

    DBCC 语句的修复级别导致回避了此修复

    至此尝试进入了死胡同……

    再次查看,发现出错信息里有2条比较有意思。一条说某节点未被引用,一条说没发现另外一个节点。两个节点的槽号和文本ID都是一样,只有页不同。手贱看了看页号,发现342=0x156,4194646=0x400156,只差一个字节!

    灵机一动,这个错误肯定是页号因为某种原因错了!

    突然想起,在DBCC命令那篇里面提到DBCC IND命令,干脆死马当活马医:



    但是看不出什么鬼,很明显我没人家那水平……

    干脆Page一下:



    找到slot9的偏移,看看有没有0x400156:



    好像撞大运了……

    参考《第六站》,脱机,打开mdf,找到Slot9对应偏移8192*152+0x860=0x130860,把那个40改成00



    联机,dbcc checkdb,没有查出错误!

    再次尝试在SQL2005中恢复,成功!

    附加收获:SQL2000貌似没有checksum,否则我改mdf应该会报错的。

  • 相关阅读:
    requests实现接口自动化(三)
    api 25 PopupWindow会占据整个屏幕
    INSTALL_FAILED_USER_RESTRICTED
    事件分发_水平滑动和垂直冲突解决
    MPAndroidChart market右边显示不全问题
    SimpleDateFormat 取当前周的周一和周日的日期,当前月第一个和最后一天的日期
    Callable,Runnable比较及用法
    Android系统启动流程
    debug-stripped.ap_' specified for property 'resourceFile' does not exist
    Theme.AppCompat.Light的解决方法
  • 原文地址:https://www.cnblogs.com/gered/p/9444508.html
Copyright © 2011-2022 走看看