SQL 錯誤 823 I/O error (bad page ID) detected during read【修復方法】

 今天一個數據庫損壞了,不管對 該表 查詢、修改、添加 都會出錯, 錯誤信息如下:

    I/O error (bad page ID) detected during read at offset 0x0000000171a000 in file “路徑\文件”
    連接中斷


導致錯誤的可能性有:
     1:服務器在正常運行的情況下突然斷電,導致數據庫文件損壞。
     2:對某設備進行讀或寫請求時遇到 I/O 錯誤。該錯誤通常表明磁盤問題。
 但對於以上問題都是無法避免的,慶幸的時,網上找到了解決方法(如下)

當出現這個問題的時候,可能有2種情況:
    1 :附加數據庫時,提示 錯誤:823 
     2:能成功附加數據庫,但查詢、修改 某個指定表時,出現  I/O error (bad page ID) detected during 錯誤。
 
解決方法:
     第一個 附加數據庫問題,可以參考:http://blog.csdn.net/shazhuyubaichi/article/details/6696031

     第二個問題:


sp_dboption '數據庫名','single user','true'   
Go   
 
DBCC CHECKDB('數據庫名', REPAIR_ALLOW_DATA_LOSS)   
Go   
 
sp_dboption '數據庫名', 'single user','false'   
Go


我比較慶幸,通過以上語句就可以修復了。
以下是網上的一段摘要,我沒有測試,先記錄下來,以後或許有用。


方案1:調用DBCC   CHECKDB(‘db_name’,repair_rebuild)修復 

方案2:若方案1失敗,採用下面的方法試一試: 
首先,在企業管理器中新建一數據庫(如數據庫名爲test),建好數據庫後,停止SQL Server Service Manager,
並將客戶數據庫的MDF文件更名爲test_data.mdf(即新建數據庫的主文件名),
然後用更名後的文件覆蓋新建數據庫同名文件,
接着,啓動企業管理器。對Master數據庫將系統表設置爲可更改狀態   

Use   Master   
Go   

sp_configure 'allow updates ', 1   
reconfigure with override   
Go   

將數據庫設爲緊急狀態:   
update sysdatabases set status = 32768 where name = 'database'  
 
停止並重新啓動SQL Server Service Manager,並重建Log文件:  
DBCC TRACEON   (3604)   
DBCC REBUILD_LOG( 'test', 'test_log_ldf ')   

將數據庫設置爲單用戶模式,然後進行檢測:   
sp_dboption  'test', 'single user ', 'true'   
DBCC   CHECKDB( 'test')   
Go   

此數據庫執行CHECKDB的過程中發現一些表的索引被破壞,於是針對具體的表進行重建索引的操作:   
DBCC   DBREINDEX(表名)   

方案3:若無法修復,則只能重備份中進行恢復.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章