sql2000數據庫置疑形成的緣由以及如何解決置疑

形成數據庫置疑通常有如下幾點: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數據庫恢復,從第三步開始作就好了。

相關文章
相關標籤/搜索