從 SQL Server 2000 遷移到 SQL Server 2008R2 時出現 DBCC CHECKDB 錯誤
將數據庫從 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 的嘗試會因違規而失敗