試圖從數據庫 ‘UFData_001_2003' 中提取的邏輯頁 (1:10720) 屬於對象 '0',而非對象 'syscolumns'


數據庫可以使用,可以備份,但對備份進行恢復時報錯,使用sp_attach_db對兩個物理文件進行連接時,報同樣錯誤:
服務器: 消息 605,級別 21,狀態 1,行 1
試圖從數據庫 ‘UFData_001_2003' 中提取的邏輯頁 (1:10720) 屬於對象 '0',而非對象 'syscolumns'。
連接中斷
注:嚴重級別 21:數據庫 (dbid) 進程中的 SQL Server 嚴重錯誤
這些消息表明遇到了影響當前數據庫中所有進程的問題;但數據庫本身損壞的可能性不大


錯誤分析

針對報的錯誤,數據有恢復的可能性
錯誤可能syscolumns這個系統表存儲頁受到了破壞,恢復的關鍵在於正確修復這個表

恢復步驟1-連接數據庫
一、 建立一個同名的新數據庫,方法同建賬
二、 停止SQL Server服務,刪除新數據庫的兩個文件,把備份中的ufdata.mdf COPY到相應的文件夾下
三、 啟動SQL Server服務,運行SQL腳本,置數據庫為緊急狀態(emergency mode)
四、 重啟SQL Server服務,重建LDF文件
連接成功!
五、 運行SQL腳本,置數據庫為緊急狀態
sp_configure 'allow updates', 1 --指定可以直接更新系統表
go
reconfigure with override --如果配置不需要重啟服務,則配置值直接
go --改運行值
use master
go
update sysdatabases set status = 32768 --該參數為置為緊急狀態
where name = 'ufdata_003_2003'
go
sp_configure 'allow updates', 0
go
reconfigure with override

恢復步驟1-連接數據庫 腳本2

重建LDF文件
dbcc rebuild_log( 'ufdata_001_2003', 'E:\U8SOFT\ZT001\2003\ufdata.ldf')
注:之前必須重啟SQL Server 服務

恢復步驟2-修復系統表

一、確定錯誤表 syscolumns
運行 select * from syscolumns
報錯同前報錯-->確定錯誤根源

二、運行DBCC修復

恢復步驟2-修復系統表-腳本1
sp_dboption 'ufdata_002_2003','SINGLE USER', TRUE
go
DBCC CHECKTABLE ('syscolumns',REPAIR_REBUILD )
go
sp_dboption 'ufdata_002_2003', 'SINGLE USER', FALSE
go

部分錯誤信息:
CHECKTABLE 發現了 0 個分配錯誤和 3 個一致性錯誤(在表 'syscolumns' 中,該表的對象 ID 為 3)。
repair_allow_data_loss 是最低的修復級別(對於由 DBCC CHECKTABLE (UFDATA_002_2003.dbo.syscolumns repair_rebuild) 發現的錯誤而言)。

恢復步驟2-修復系統表-腳本2
更高級別的修復方式 sp_dboption
'ufdata_003_2003','SINGLE USER', TRUE
go
DBCC CHECKTABLE ('syscolumns',REPAIR_ALLOW_DATA_LOSS )
go
sp_dboption 'ufdata_003_2003', 'SINGLE USER', FALSE
go
運行結果顯示,錯誤已經修復 成功!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM