none
text、ntext、或是 image 節點的分頁,插槽 19 不存在(SQL2K已更新至SP4) RRS feed

  • 問題

  • 各位先進:

     

    不好意思又來打擾各位,想請教一下,我執行 :

    update STATISTICS sysindexes

    出現以下錯誤:

    伺服器: 訊息 7105,層級 22,狀態 6,行 1

    text、ntext、或是 image 節點的分頁 (1:62855),插槽 19 不存在。

    連線中斷

     

    我查閱了MSDN的說明,確認我的SQL版本(SQL2000)已更新至SP4

    但仍然有此錯誤

     

    故我執行了

    alter database tgk set single_user with ROLLBACK IMMEDIATE

    go

    dbcc checkdb('tgk',REPAIR_ALLOW_DATA_LOSS)

    go

    alter database tgk set multi_user

    go

     

    但是仍然不行 >< ,錯誤訊息仍是7105

     

    若我直接 select * from sysindexes

    則會得到以下錯誤訊息:

    伺服器: 訊息 8964,層級 16,狀態 1,行 1
    資料表錯誤 : 物件識別碼 2。未參考在分頁 (1:62852),位置 5,文字識別碼 2073146097664  的 text、ntext 或 image 節點。
    伺服器: 訊息 8928,層級 16,狀態 1,行 1
    物件識別碼 2,索引識別碼 255: 分頁 (1:62855) 無法處理。請查看其他的錯誤以取得相關細節。
    伺服器: 訊息 8944,層級 16,狀態 1,行 1
    資料表錯誤 : 物件識別碼 2,索引識別碼 255,分頁 (1:62855),資料列 19。測試 (!(hdr->r_tagA & (VERSION_MASK | RECTAG_RESV_A | RECTAG_RESV_B))) 失敗。值為 221 和 193。
    伺服器: 訊息 8944,層級 16,狀態 1,行 1
    資料表錯誤 : 物件識別碼 2,索引識別碼 255,分頁 (1:62855),資料列 19。測試 (offsetNull >= BASEOFFSET) 失敗。值為 0 和 4。
    伺服器: 訊息 8964,層級 16,狀態 1,行 1
    資料表錯誤 : 物件識別碼 2。未參考在分頁 (1:76479),位置 1,文字識別碼 2073146753024  的 text、ntext 或 image 節點。

    CHECKDB 在資料表 'sysindexes' (物件識別碼2) 上發現了 0 個配置錯誤和 5 個一致性錯誤。

     

     

    不知各位先進有否其他解決方式呢?

    另外想請教,這種錯誤,通常是為什麼會發生?大部分的原因為何?

     

    謝謝!

     

     

    小腸

    96.7.4

    2007年7月4日 下午 04:03

解答

  • 一般來說 text、ntext、或是 image 所儲存的資料長度都很長,因此在讀取這些欄位時,會使用指標以便取得資料實際存放的位置與內容。因此,當指標所記錄的位置不正確時,便會發生您所描述的問題。至於為何會發生指標所記錄的位置不正確,可能的原因是資料庫損毀、於查詢時使用 NOLOCK 提示、執行 READ UNCOMMITTED 等級的交易

    您可以依照上述的原因來加以個個擊破,例如:於查詢時,不要使用 NOLOCK 的提示。使用 DBCC CheckDB 來檢查指定資料庫中所有物件的邏輯完整性和實體完整性、DBCC Page 找出相關的資料表、使用 DBCC 檢查組成資料表或索引檢視的所有頁面和結構的完整性。...
    2007年7月27日 上午 03:23
    版主

所有回覆

  • 一般來說 text、ntext、或是 image 所儲存的資料長度都很長,因此在讀取這些欄位時,會使用指標以便取得資料實際存放的位置與內容。因此,當指標所記錄的位置不正確時,便會發生您所描述的問題。至於為何會發生指標所記錄的位置不正確,可能的原因是資料庫損毀、於查詢時使用 NOLOCK 提示、執行 READ UNCOMMITTED 等級的交易

    您可以依照上述的原因來加以個個擊破,例如:於查詢時,不要使用 NOLOCK 的提示。使用 DBCC CheckDB 來檢查指定資料庫中所有物件的邏輯完整性和實體完整性、DBCC Page 找出相關的資料表、使用 DBCC 檢查組成資料表或索引檢視的所有頁面和結構的完整性。...
    2007年7月27日 上午 03:23
    版主
  • Dear Sir,

     

    您提到的訊息中已提示

    CHECKDB 在資料表 'sysindexes' (物件識別碼2) 上發現了 0 個配置錯誤和 5 個一致性錯誤。

     

    因此您需要修復這些一致性的錯誤.

    建議您先將資料庫執行完整備份, 再試著使用下列命令來做修復.

    DBCC CHECKDB(<DBNAME>, REPAIR_ALLOW_DATA_LOSS)

    PS. 請將DBNAME改為您的資料庫名稱.

     

    若無法被修復, 建議您將此資料庫透過如DTS的方式轉到新的資料庫中, 重建相關的Indexes

     

     

    Best regards,

    Colin Lin

    微軟技術支援中心

    2007年8月2日 上午 09:25