我正在尝试Yafnet.mdf
在没有日志文件的 SQL Server Management Studio 中附加。
我收到以下错误。任何想法如何做到这一点?
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
无法打开物理文件“C:\sql_logs\YAFnet_log.ldf”。操作系统错误 2:“2(系统找不到指定的文件。)”。(Microsoft SQL Server,错误:5120)
我正在尝试Yafnet.mdf
在没有日志文件的 SQL Server Management Studio 中附加。
我收到以下错误。任何想法如何做到这一点?
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
无法打开物理文件“C:\sql_logs\YAFnet_log.ldf”。操作系统错误 2:“2(系统找不到指定的文件。)”。(Microsoft SQL Server,错误:5120)
对于您的初始情况,您似乎尝试过这样的事情(或者当您通过对话框时 GUI 为您准备的任何东西):
CREATE DATABASE YAFnet ON (FILENAME = N'C:\sql_data\YAFnet.mdf')
FOR ATTACH;
但是,此方法需要一个mdf
文件和一个ldf
文件。否则,您会收到类似于以下内容的错误消息:
消息 5120,级别 16,状态 101,第 1 行
无法打开物理文件“C:\sql_logs\YAFnet_log.ldf”。操作系统错误 2:“2(系统找不到指定的文件。)”。
现在,即使您只有mdf
文件,也有一种方法可以继续。假设您有一个mdf
从 SQL Server 正确分离的文件,您应该能够mdf
使用以下语法在没有日志文件的情况下附加该文件:
CREATE DATABASE YAFnet ON (FILENAME = N'C:\sql_data\YAFnet.mdf')
FOR ATTACH_REBUILD_LOG;
但是,在您的情况下,该文件似乎没有与 SQL Server 正确分离:
Msg 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
文件在分离期间或之后发生某些事情时,您现在拥有数据库的零副本。
您可以尝试几件事。第一的:
CREATE DATABASE Yafnet ON (NAME = 'Yafnet', FILENAME='*filepath*\Yafnet.mdf') FOR ATTACH;
如果这不起作用,那么试试这个:
右键单击 SSMS 并以管理员身份运行。然后再次尝试附加。这应该可以解决问题。