如何在没有日志文件的情况下附加MDF?

时间:2013-01-09 23:20:20

标签: sql sql-server sql-server-2008

我正在尝试将Yafnet.mdf附加到没有日志文件的SQL Server Management Studio中。

我收到以下错误。任何想法如何做到这一点?

  

执行Transact-SQL语句或批处理时发生异常。   (Microsoft.SqlServer.ConnectionInfo)

     

无法打开物理文件“C:\ sql_logs \ YAFnet_log.ldf”。操作系统   错误2:“2(系统找不到指定的文件。)”。   (Microsoft SQL Server,错误:5120)

2 个答案:

答案 0 :(得分:27)

对于您的初始情况,您似乎尝试了类似这样的事情(或者当您浏览对话框时GUI为您准备的任何内容):

CREATE DATABASE YAFnet ON (FILENAME = N'C:\sql_data\YAFnet.mdf')
FOR ATTACH;

但是,此方法需要mdf文件和ldf文件。否则,您会收到类似于以下内容的错误消息:

  

Msg 5120,Level 16,State 101,Line 1   无法打开物理文件“C:\ sql_logs \ YAFnet_log.ldf”。操作系统错误2:“2(系统找不到指定的文件。)”。

现在,即使您只有mdf文件,仍有办法继续。假设您有一个与SQL Server正确分离的mdf文件,您应该能够使用以下语法附加mdf文件而不使用日志文件:

CREATE DATABASE YAFnet ON (FILENAME = N'C:\sql_data\YAFnet.mdf')
FOR ATTACH_REBUILD_LOG;

但是,在您的情况下,似乎文件未与SQL Server正确分离:

  

Ms Ms 1813,Level 16,State 2,Line 1
  物理文件名“C:\ sql_logs \ YAFnet_log.ldf”可能不正确。无法重建日志,因为数据库关闭时没有打开的事务/用户,数据库没有检查点,或者数据库是只读的。如果由于硬件或环境故障手动删除或丢失事务日志文件,则可能发生此错误。

有几种可能的解释,包括错误消息中提到的那些解释。也许它是从一些无效的SAN阴影中检索到的,或者是在只读时分离的,或者在SQL Server或底层系统崩溃之后恢复,或者在复制/下载过程中损坏,或者谁知道还有什么。

您需要返回Yaf的支持或其服务提供商的支持,以查看是否有 正确的备份 ,或者如果没有,则备用副本mdf个文件。还要记住,我们当中没有人真正知道Yaf是什么,或者有任何方法来验证你在谈论哪个Yaf。

否则,您似乎运气不好,因为这个特定的mdf文件无效,因此不会让您走得太远。

这正是为什么分离/附加和/或O / S级文件复制方法对于SQL Server而言不是非常有用的备份(或迁移)方法的原因。您需要一个适当的备份/恢复计划,这意味着适当的完整/差异/日志备份适合您的数据丢失容忍度。分离数据库几乎总是一个低级的想法 - 当分离期间或之后mdf文件出现问题时,您现在拥有数据库的 ZERO 副本

答案 1 :(得分:-1)

您可以尝试一些事情。第一:

CREATE DATABASE Yafnet ON (NAME = 'Yafnet', FILENAME='*filepath*\Yafnet.mdf') FOR ATTACH;

如果这不起作用,那么试试这个:

右键单击SSMS并以管理员身份运行。然后尝试再次附加。这应该可以解决问题。