我有一个备份数据库文件(即test.mdf),但是,我没有LDF文件。有人告诉我,SQL Server 2008 R2可以在不使用LDF的情况下加载MDF。SQL Server - 我可以加载没有LDF文件的MDF而不会丢失数据吗?
这是真的吗?
谢谢
我有一个备份数据库文件(即test.mdf),但是,我没有LDF文件。有人告诉我,SQL Server 2008 R2可以在不使用LDF的情况下加载MDF。SQL Server - 我可以加载没有LDF文件的MDF而不会丢失数据吗?
这是真的吗?
谢谢
假设数据库中干净利落地分离,你应该能够使用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;
另一个选项sp_attach_single_file_db
是CREATE DATABASE命令与FOR ATTACH_REBUILD_LOG选项。
这对我有效。我用紧急模式看数据库:
http://forums.asp.net/t/1903548.aspx
你有两个选择:
- 您可以创建具有相同的名称和物理文件布局一个空数据库,关闭服务器,交换你想要的文件 代替空的DB文件,然后启动服务器。数据库应该出现可疑模式。然后您可以将ALTER DATABASE SET EMERGENCY设置为紧急模式,然后运行DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS。这将尽可能多地从日志中提取尽可能多的数据,以使数据库保持一致,但可能有 删除一些数据以使数据库保持一致。这是最有可能获得最大数据的选项 。
- 您可以尝试使用CREATE DATABASE FOR ATTACH_REBUILD_LOG来查看是否会将其恢复。如果数据库完全关闭,你可能会成功。如果存在无法回滚的事务 ,则数据库也可能不一致或损坏。无论如何,您应该运行DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS以使数据库保持一致。在 这个事件中,SQL Server将不会尝试从 日志中挖掘信息。它会忽略日志的内容。如果在处理中有 事务处理,则不可能回滚,因此将需要 ALLOW_DATA_LOSS。
欲了解更多请尽量参考:
我保证数据库干净地分离。所以你的意思是我不会丢失任何数据?谢谢 – q0987 2010-10-19 20:12:00
不,您可能会丢失数据,具体取决于LDF中的内容 - 事务日志。 – 2010-10-19 20:17:14
@ q0987:为了确保没有数据丢失,SQL Server服务将不得不停止。 – 2010-10-19 20:23:51