2010-10-19 50 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/

相关问题