一、SQL-Server附加資料庫時失敗。
1、異常情況:伺服器在正常啟動並執行情況下突然斷電,導致資料庫檔案損壞,具體表現是:資料庫名後面有“(置疑)”字樣。
2、異常分析:關於823錯誤的 SQL-SERVER 中的協助:
================================
錯誤 823
嚴重層級 24
訊息本文
在檔案 "%4!" 的位移量 %3! 處的 %2! 過程中,檢測到 I/O 錯誤 %1!。
解釋
Microsoft SQL Server 在對某裝置進行讀或寫請求時遇到 I/O 錯誤。該錯誤通常表明磁碟問題。但是,錯誤記錄檔中在錯誤 823 之前記錄的其它核心訊息應指出涉及了哪個裝置。
3、解決辦法:
在SQL-Server企業管理器中,建立同名資料庫(這裡假設為Test)後,停止資料庫,把損壞的資料庫檔案Data.mdf和Test_log.LDF覆蓋剛才建立資料庫目錄下的Data.mdf和Test_log.LDF,同時刪除Test_log.LDF檔案;啟動資料庫服務,探索資料庫名Test後面有“置疑”字樣。不要緊,開啟SQL內建查詢分析器,分別執行如下SQL語句:
第一、
exec sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE /* 開啟修改系統資料表的開關 */
第二、
update sysdatabases set status=32768 where name='資料庫名' /* 設定資料庫狀態 */
第三、
DBCC REBUILD_LOG ('資料庫名','D:\database\Test_Log.LDF') /* 重建LDF檔案 */
第四、
update sysdatabases set status=0 where name='資料庫名' /* 重設資料庫狀態 */
第五、
restore database 資料庫名 WITH RECOVERY /* 恢複資料庫 */
第六、
exec sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE /* 關閉開啟修改系統資料表的開關 */
按照此方法操作,應該能修複資料庫正常訪問了。如果問題依然存在,最笨的一個方法就是建立另一個資料庫,把原資料庫(Test)各個表的資料匯出到建立資料庫表中。
============================================================
補充說明:用上面的六步把資料庫置疑的問題解決了,但是資料庫表裡還有損壞的表(inf_gdscode),把壞表匯出的時候也不成功。最後在查詢分析器裡運行:
USE nmgbt_hcxuexipos (資料庫名)
GO
DBCC CHECKTABLE ('inf_gdscode',REPAIR_ALLOW_DATA_LOSS)
GO