msql 2000 使用DBCC CHECK DB 得出錯誤,槽引用錯誤
阿新 • • 發佈:2018-08-08
dex 技術 對象 都是 comment 比較 報錯 strong 有意
果然都有對應的表!
分別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
轉自: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應該會報錯的。
msql 2000 使用DBCC CHECK DB 得出錯誤,槽引用錯誤