2010-10-19 61 views

回答

4

假設數據庫中乾淨利落地分離,你應該能夠使用sp_attach_single_file_db或較新的CREATE DATABASE...FOR ATTACH語法。

EXEC sp_attach_single_file_db 
    @dbname = 'YourDB', 
    @physname = N'C:\YourFile.mdf'; 

OR

CREATE DATABASE YourDB 
     ON (FILENAME = 'c:\YourFile.mdf') 
     FOR ATTACH_REBUILD_LOG; 
+0

我保證數據庫乾淨地分離。所以你的意思是我不會丟失任何數據?謝謝 – q0987 2010-10-19 20:12:00

+1

不,您可能會丟失數據,具體取決於LDF中的內容 - 事務日誌。 – 2010-10-19 20:17:14

+0

@ q0987:爲了確保沒有數據丟失,SQL Server服務將不得不停止。 – 2010-10-19 20:23:51

0

另一個選項sp_attach_single_file_dbCREATE DATABASE命令與FOR ATTACH_REBUILD_LOG選項。

0

這對我有效。我用緊急模式看數據庫:

http://forums.asp.net/t/1903548.aspx

你有兩個選擇:

  1. 您可以創建具有相同的名稱和物理文件佈局一個空數據庫,關閉服務器,交換你想要的文件 代替空的DB文件,然後啓動服務器。數據庫應該出現可疑模式。然後您可以將ALTER DATABASE SET EMERGENCY設置爲緊急模式,然後運行DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS。這將盡可能多地從日誌中提取儘可能多的數據,以使數據庫保持一致,但可能有 刪除一些數據以使數據庫保持一致。這是最有可能獲得最大數據的選項 。
  2. 您可以嘗試使用CREATE DATABASE FOR ATTACH_REBUILD_LOG來查看是否會將其恢復。如果數據庫完全關閉,你可能會成功。如果存在無法回滾的事務 ,則數據庫也可能不一致或損壞。無論如何,您應該運行DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS以使數據庫保持一致。在 這個事件中,SQL Server將不會嘗試從 日誌中挖掘信息。它會忽略日誌的內容。如果在處理中有 事務處理,則不可能回滾,因此將需要 ALLOW_DATA_LOSS。

欲瞭解更多請儘量參考:

http://blog.sqlauthority.com/2008/07/21/sql-server-fix-error-9004-an-error-occurred-while-processing-the-log-for-database-if-possible-restore-from-backup-if-a-backup-is-not-available-it-might-be-necessary-to-rebuild-the-log/

相關問題