如何在没有LDF文件的情况下附加数据库?

时间:2009-05-29 13:54:48

标签: sql-server

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

8 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

您可以尝试MohammedU发布的here内容。基本上,他使用DBCC REBUILD_LOG命令。它将根据您的服务器版本而有效。

以下是步骤(没有详细信息):

  1. 将现有.mdf文件重命名为.mdf_old
  2. 使用与旧文件相同的.mdf和.ldf文件创建一个新数据库。
  3. 停止sql server
  4. 将新数据库的.mdf和.ldf文件重命名为.mdf_old和.ldf_old
  5. 将.mdf_old重命名为.mdf
  6. 启动sql server
  7. 您应该看到数据库处于可疑模式
  8. 将数据库上下文更改为Master并允许更新系统表
  9. 将数据库设置为紧急(旁路恢复)模式。
  10. 停止并重新启动SQL Server。
  11. 重建日志。
  12. 以单用户模式设置数据库并运行DBCC CHECKDB以验证物理一致性。
  13. 关闭系统表的更新。

答案 2 :(得分:3)

在SQL Server Management Studio中尝试此步骤

  1. 打开SSMS并右键单击数据库。
  2. 选择附加选项
  3. 然后点击添加以附加MDF文件。
  4. 从列表中选择文件,然后单击确定
  5. 现在屏幕显示MDF文件和LDF文件(未找到)
  6. 选择LDF文件,然后单击“删除”选项。
  7. 删除LDF文件后,单击“确定”。
  8. MDF文件已在数据库列表中成功附加。

答案 3 :(得分:3)

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

enter image description here

答案 4 :(得分:3)

以下是programaticaly创建.ldf文件的代码片段

以下是3种方法。

方法-1

在我的情况下,我的数据库在DATA文件夹中。

您可以通过右键单击然后转到属性来获取数据库的完整路径    然后你可以复制数据库的完整路径

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

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

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

 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文件。

但是,您将在

中收到以下消息
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.

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

方式-2

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

 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,您可以使用此

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

此外,您可以阅读在线书籍以获取更多信息。

答案 5 :(得分:1)

你可以“只是这样做”它会发出一个警告,它无法找到.ldf,但它仍会附加数据库。

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

我试过并且有效......希望这有帮助。