MSSQLSERVER_8992
適用於:SQL Server
詳細資料
項目 | 值 |
---|---|
產品名稱 | SQL Server |
事件識別碼 | 8992 |
事件來源 | MSSQLSERVER |
元件 | SQLEngine |
符號名稱 | DBCC3_CHECK_CATALOG |
訊息文字 | 檢查目錄訊息層級層級狀態:訊息。 |
注意
8992 錯誤訊息會參考另一個特定訊息(範圍從 3851 到 3858),以了解實際不一致的情況。
說明
DBCC CHECKCATALOG 或 DBCC CHECKDB 在指定對象的系統元數據表中發現不一致。 也就是說,記錄的物件標識碼與錯誤訊息中指定的對象之間不一致。
當一或多個系統數據表以在系統元數據中建立不一致的方式進行手動更新時,就會發生此錯誤。 例如,使用者可能已經從 sysobjects 數據表手錶手動刪除物件,而不需要移除其他數據表中的相關聯數據列,例如 sysindexes 和 syscolumns。
針對已從 SQL Server 2000 升級至 SQL Server 2005 或更新版本的資料庫執行 DBCC CHECKDB 時,可能會發生此錯誤。 在 SQL Server 2000 中,DBCC CHECKDB 不包含 DBCC CHECKCATALOG 功能,因此除非 SQL Server 2000 中特別針對資料庫執行 DBCC CHECKCATALOG,否則不會在升級之前攔截錯誤。
您可能會看到下列任何錯誤與錯誤 8992:
Msg ID | 訊息文字 |
---|---|
3851 | 在系統資料表 sys.%ls%ls 上發現無效的資料列 (%ls)。 |
3852 | sys.%ls%ls 中的資料列 (%ls) 在 sys.%ls%ls 之中並沒有相符的資料列 (%ls)。 |
3853 | sys.%ls%ls 中資料列 (%ls) 的屬性 (%ls) 在 sys.%ls%ls 中並沒有相符的資料列 (%ls)。 |
3854 | sys.%ls%ls 中資料列 (%ls) 的屬性 (%ls) 在 sys.%ls%ls 中相符的資料列 (%ls) 無效。 |
3855 | 屬性 (%ls) 存在,但是在 sys.%ls%ls 中沒有資料列 (%ls)。 |
3856 | 屬性 (%ls) 存在,但應該不是 sys.%ls%ls 中資料列 (%ls) 的屬性。 |
3857 | 必須有屬性 (%ls),但是 sys.%ls%ls 中的資料列 (%ls) 遺漏此屬性。 |
3858 | sys.%ls%ls 中資料列 (%ls) 的屬性 (%ls) 有無效的值。 |
使用者動作
卸除並重新建立指定的物件
可能的話,請卸除並重新建立指定的物件。 例如,如果對像是預存程式或使用者定義型別,重新建立物件可能會解決問題。
從備份還原
如果問題與硬體無關,且可用的已知清除備份,請從備份還原資料庫。 只有在備份不包含元數據錯誤時,才適用此動作。
將數據匯出至新的資料庫
如果備份也包含元數據不一致的情況,您必須建立新的資料庫,並將現有資料庫的內容匯出至新的資料庫。
DBCC CHECKDB 無法修復此錯誤
此錯誤無法修復。 如果您無法從備份還原資料庫,請連絡 Microsoft客戶服務和支援 (CSS)。
不要手動更新系統數據表
請勿對系統數據表進行手動更新。 SQL Server 不支援對系統資料庫進行任何手動變更。 如果您在 SQL Server 資料庫中更新系統資料表,則會記錄下列事件:
手動更新系統數據表時
訊息 17659:警告:系統數據表<>標識符標識碼已直接在資料庫<>標識碼中更新,且快取一致性可能尚未維護。 應該重新啟動 SQL Server。
使用手動更新的系統數據表啟動資料庫
訊息 3859:警告:系統目錄已直接在資料庫標識碼 <標識碼>中更新,最近date_time
當您在手動更新系統資料表之後執行 DBCC_CHECKDB 命令時
訊息 3859:警告:系統目錄已直接在資料庫標識碼 <標識碼>中更新,最近date_time。