关于sql server:如何在没有LDF文件的情况下附加数据库?

How to attach a database without an LDF file?

如何在 SQL Server 中附加没有 LDF 文件的数据库?


您可以使用 sp_attach_single_file_db 来附加缺少其日志文件的数据库。


尝试通过将 MDF 文件添加到"附加数据库"对话框来附加它。您会注意到该对话框将报告丢失的 LDF 文件。请按照图片所示的步骤操作:

enter

在我的情况下,路径如下。

C:\\\\Program Files\\\\Microsoft SQL Server\\\\MSSQL11.DRIBBLEE\\\\MSSQL\\\\DATA

现在这是第一种方法,使用存储过程(sp_attach_single_file_db)并传递参数(数据库名称和物理路径)

1
2
3
4
5
6
7
8
 USE [master]
 GO

EXECUTE sp_attach_single_file_db
@dbname='AdventureWorksDW_2012',
@physname=N'C:\\ProgramFiles\\MicrosoftSQLServer\\MSSQL11.DRIBBLEE\\MSSQL\\DATA\\AdventureWorksDW2012_Data.mdf'

GO

执行你的代码 执行代码后转到它所在的数据库文件夹,你会看到那里创建的 .ldf 文件。

但是,您会在您的

中收到以下消息

1
2
The physical file name"C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\DATA\\AdventureWorksDW2012_log.ldf" may be incorrect.
New log file 'C:\\Program Files\\Microsoft SQL Server\\MSSQL11.DRIBBLEE\\MSSQL\\DATA\\AdventureWorksDW_2012_log.ldf' was created.

现在您可以附加数据库,在附加数据库后,在对象资源管理器中右键单击您的服务器名称并刷新。

方法二

如果您的数据库缺少一个或多个日志文件,您可以使用以下

1
2
3
4
5
6
 CREATE DATABASE db_namehere ON
 (
    FILENAME=N'C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\DATA\\db_namehere.mdf')

FOR ATTACH_REBUILD_LOG
GO

方法3

如果你的数据库只有一个日志文件missig,你可以使用这个

1
2
3
4
 CREATE DATABASE db_name ON
( FILENAME = N'C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\DATA\\TestDb.mdf')
FOR ATTACH
GO

您可以进一步阅读 BOOKs Online 以获取更多信息。


通过 SQL Server Management Studio 尝试此步骤

  • 打开 SSMS 并右键单击数据库。
  • 选择附加选项
  • 然后单击添加以附加 MDF 文件。
  • 从列表中选择文件,然后单击确定
  • 现在屏幕显示 MDF 文件和 LDF 文件(未找到)
  • 选择 LDF 文件并单击删除选项。
  • 删除 LDF 文件后,单击
  • MDF 文件已成功附加到数据库列表中。

  • 您可以尝试 MohammedU 在此处发布的内容。基本上,他使用的是 DBCC REBUILD_LOG 命令。它将根据您的服务器版本起作用。

    以下是步骤(不详):

  • 将现有 .mdf 文件重命名为 .mdf_old
  • 使用与旧数据库相同的 .mdf 和 .ldf 文件创建一个新数据库。
  • 停止 sql 服务器
  • 将新 db 的 .mdf 和 .ldf 文件重命名为 .mdf_old 和 .ldf_old
  • 将 .mdf_old 重命名为 .mdf
  • 启动sql服务器
  • 您应该在可疑模式下看到 db
  • 将数据库上下文更改为 Master 并允许更新系统表
  • 将数据库设置为紧急(绕过恢复)模式。
  • 停止并重新启动 SQL 服务器。
  • 重建日志。
  • 将数据库设置为单用户模式并运行 DBCC CHECKDB 以验证物理一致性。
  • 关闭对系统表的更新。

  • 1
    EXEC sp_attach_single_file_db @dbname = 'DBNAME',@physname = N'C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\DATA\\DBNAME_Data.mdf';

    我试过了,它成功了......希望这会有所帮助。


    如果遇到问题,请确认 mdf 文件不是只读的。


    你可以"随便做"它会抛出一个警告,说它找不到 .ldf,但它仍然会附加 db。