Migration

從 SQL Server 2000 遷移到 SQL Server 2008R2 時出現 DBCC CHECKDB 錯誤

  • December 8, 2011

將數據庫從 SQL Server 2000 遷移到 SQL Server 2008 R2 後,我遇到了完整性問題。

我在舊數據庫上執行了 DBCC CHECKDB,它沒有返回任何問題。然後我將備份文件通過 FTP 傳輸到新伺服器並將其恢復到新數據庫。我立即在新數據庫上執行 DBCC CHECKDB 並得到以下錯誤。我在遷移中做錯了什麼嗎?

FTP 程序會損壞文件嗎?(尺寸相同)或者,有沒有辦法解決這些錯誤?(我嘗試了各種 CHECKDB 修復選項,但它們都不起作用)。

消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=1052582838) 的屬性 (referenced_object_id=27147142,key_index_id=2) 沒有匹配的行 (object_id=27147142 ,index_id=2) 在 sys.indexes 中。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=828582040) 的屬性 (referenced_object_id=748581755,key_index_id=2) 沒有匹配行 (object_id=748581755 ,index_id=2) 在 sys.indexes 中。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=844582097) 的屬性 (referenced_object_id=748581755,key_index_id=2) 沒有匹配的行 (object_id=748581755 ,index_id=2) 在 sys.indexes 中。消息 8992,級別 16,狀態 1,行 1 檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=506133244) 的屬性 (referenced_object_id=914154352,key_index_id=2) 在 sys.indexes 中沒有匹配行 (object_id=914154352,index_id=2)。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=522133301) 的屬性 (referenced_object_id=914154352,key_index_id=2) 沒有匹配的行 (object_id=914154352 ,index_id=2) 在 sys.indexes 中。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=1010154694) 的屬性 (referenced_object_id=914154352,key_index_id=2) 沒有匹配的行 (object_id=914154352 ,index_id=2) 在 sys.indexes 中。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:屬性(referenced_object_id=914154352,sys.foreign_keys 中的行 (object_id=1042154808) 的 key_index_id=2) 在 sys.indexes 中沒有匹配的行 (object_id=914154352,index_id=2)。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=1723921263) 的屬性 (referenced_object_id=914154352,key_index_id=2) 沒有匹配的行 (object_id=914154352 ,index_id=2) 在 sys.indexes 中。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=686989874) 的屬性 (referenced_object_id=964914509,key_index_id=2) 沒有匹配的行 (object_id=964914509 ,index_id=2) 在 sys.indexes 中。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:系統中行 (object_id=1084582952) 的屬性 (referenced_object_id=1778821399,key_index_id=2)。foreign_keys 在 sys.indexes 中沒有匹配的行 (object_id=1778821399,index_id=2)。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=1936061983) 的屬性 (referenced_object_id=1904061869,key_index_id=2) 沒有匹配行 (object_id=1904061869 ,index_id=2) 在 sys.indexes 中。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=73103351) 的屬性 (referenced_object_id=2092586543,key_index_id=2) 沒有匹配行 (object_id=2092586543 ,index_id=2) 在 sys.indexes 中。消息 8992,級別 16,狀態 1,第 1 行檢查目錄消息 3853,狀態 1:sys.foreign_keys 中行 (object_id=1739921320) 的屬性 (referenced_object_id=2092586543,key_index_id=2) 沒有匹配的行 (object_id=2092586543 , index_id=2) 在 sys.indexes 中。CHECKDB 發現 0 個分配錯誤和 13 個與任何單個對象無關的一致性錯誤。消息 2508,級別 16,狀態 3,第 1 行對象“tblUnit_bak2”的行內數據 RSVD 頁計數,索引 ID 0,分區 ID 32571823816704,分配單元 ID 32571823816704(行內數據類型)不正確。執行 DBCC UPDATEUSAGE。CHECKDB 在表“tblUnit_bak2”(對象 ID 497006589)中發現 0 個分配錯誤和 1 個一致性錯誤。CHECKDB 在數據庫 ‘XXXXXX’ 中發現 0 個分配錯誤和 14 個一致性錯誤。分配單元 ID 32571823816704(行內數據類型)不正確。執行 DBCC UPDATEUSAGE。CHECKDB 在表“tblUnit_bak2”(對象 ID 497006589)中發現 0 個分配錯誤和 1 個一致性錯誤。CHECKDB 在數據庫 ‘XXXXXX’ 中發現 0 個分配錯誤和 14 個一致性錯誤。分配單元 ID 32571823816704(行內數據類型)不正確。執行 DBCC UPDATEUSAGE。CHECKDB 在表“tblUnit_bak2”(對象 ID 497006589)中發現 0 個分配錯誤和 1 個一致性錯誤。CHECKDB 在數據庫 ‘XXXXXX’ 中發現 0 個分配錯誤和 14 個一致性錯誤。

這是一個已知問題:孤立條目

DBCC CHECKCATALOG在 SQL Server 2000 上執行(DBCC CHECKDB直到更高版本才包含在內)並在那裡修復。在 SQL Server 2000 上手動修復系統表更容易:在 SQL Server 2005+ 上更難

看起來外鍵在創建時可能已使用 NOCHECK 選項添加到源數據庫中。因此,源數據庫中可能存在孤立行。為了排除這種情況,請在沒有 NOCHECK 選項的舊 sql 伺服器上刪除並重新創建外鍵- 如果它引發錯誤,那就是你的問題。

當數據庫在新伺服器上作為還原過程的一部分升級時,重新創建這些 FK 的嘗試會因違規而失敗

引用自:https://dba.stackexchange.com/questions/8931