形成數據庫置疑通常有如下幾點:sql
1)電腦非法關機或者意外停電;數據庫
2)磁盤有壞道或者損壞;服務器
3)數據庫感染病毒,日誌文件損壞;ide
4)非正常狀況下移動數據庫文件ui
5)系統,硬盤,常常強制性關機(如斷電)相似狀況都會spa
建議:電網不穩定的地區配備UPS電源,電腦禁止非法關機,作數據庫維護計劃按期自動備份,電腦按期作好病毒查殺。操作系統
解決步驟:日誌
解決因爲sql2000日誌文件引發的「置疑」。事務
日誌有錯誤--------從新附加提示日誌有錯誤。it
日誌文件丟失-----丟失了.ldf文件,只有.mdf文件的數據庫重建。
1、備份「置疑」數據庫的數據文件,由於日誌文件.ldf出錯,能夠只備份.mdf文件。
2、打開企業管理器(SQL Server Enterprise Manager),刪除「置疑」數據庫,若是提示刪除錯誤,能夠重啓數據庫服務器,而後再試。
3、在企業管理器中,新建同名數據庫(假如數據庫爲test),注意創建的數據庫名稱,還有數據文件名要保持和原數據庫一致。
4、中止數據庫服務器。
5、將剛纔新建數據庫生成的數據庫的日誌文件test_log.ldf刪除,用要恢復的數據庫.mdf文件覆蓋剛纔生成的數據庫數據文件test_data.mdf。
6、啓動數據庫服務器。此時會看到數據庫test的狀態爲「置疑」。這時候不能對此數據庫進行任何操做。
7、設置數據庫容許直接操做系統表。此操做能夠在企業管理器(SQL Server Enterprise Manager)裏面選擇數據庫服務器,按右鍵,選擇「屬性」,在「服務器設置」頁面中將「容許對系統目錄直接修改」一項選中。也可使用以下語句來實現。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
8、設置test爲緊急修復模式 。
update sysdatabases set status=-32768 where dbid=DB_ID('test')
此時能夠在企業管理器(SQL Server Enterprise Manager)裏面看到該數據庫處於「只讀\置疑\脫機\緊急模式」能夠看到數據庫裏面的表,可是僅僅有系統表。
9、下面執行真正的恢復操做,用dbcc rebuild_log命令來重建數據庫日誌文件(重建路徑根據你實際的數據庫路徑來)。
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
執行過程當中,若是遇到下列提示信息:
服務器: 消息 5030,級別 16,狀態 1,行 1
未能排它地鎖定數據庫以執行該操做。
DBCC 執行完畢。若是 DBCC 輸出了錯誤信息,請與系統管理員聯繫。
說明您的其餘程序正在使用該數據庫,若是剛纔您在八步驟中使用企業管理器打開了test庫的系統表,那麼退出企業管理器就能夠了。
正確執行完成的提示應該相似於:
警告: 數據庫 'test' 的日誌已重建。已失去事務的一致性。應運行 DBCC CHECKDB 以驗證物理一致性。將必須重置數據庫選項,而且可能須要刪除多餘的日誌文件。
DBCC 執行完畢。若是 DBCC 輸出了錯誤信息,請與系統管理員聯繫。
此時打開在企業管理器裏面會看到數據庫的狀態爲「只供DBO使用」。此時能夠訪問數據庫裏面的用戶表了。
10、驗證數據庫一致性。(次步驟可省略)
dbcc checkdb('test')
通常執行結果以下:
CHECKDB 發現了 0 個分配錯誤和 0 個一致性錯誤(在數據庫 'test'中)。
DBCC 執行完畢。若是 DBCC 輸出了錯誤信息,請與系統管理員聯繫。
11、設置數據庫爲正常狀態
sp_dboption 'test','dbo use only','false'
若是沒有出錯,那麼恭喜,如今就能夠正常的使用恢復後的數據庫啦。
12、最後一步,咱們要將步驟七中設置的「容許對系統目錄直接修改」一項恢復。由於平時直接操做系統表是一件比較危險的事情。固然,咱們能夠在企業管理器裏面恢復,也可使用以下語句完成
sp_configure 'allow updates',0
go
reconfigure with override
go
對於只有.mdf文件的sql2000數據庫恢復,從第三步開始作就好了。