今天一個數據庫損壞了,不管對 該表 查詢、修改、添加 都會出錯, 錯誤信息如下:
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:若無法修復,則只能重備份中進行恢復.