SQL Server 2008 没有日志文件,使用MDF文件附加数据库

SQL Server 2008附加数据库时可以不需要LDF日志文件,直接使用以下代码就可以仅通过MDF数据库文件进行附加数据库:

 

CREATE DATABASE DB_NAME

ON (FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\DBName.MDF') 
FOR ATTACH_REBUILD_LOG ; 
GO


http://www.cnblogs.com/chaosimple/archive/2012/08/13/2636160.html


只有mdf文件的恢复技术 


  由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。 


  如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息 


  设备激活错误。物理文件名 ’C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF’ 可能有误。 


  已创建名为 ’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF’ 的新日志文件。 


  但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息


服务器: 消息 1813,级别 16,状态 2,行 1 


  未能打开新数据库 ’test’。CREATE DATABASE 将终止。 


  设备激活错误。物理文件名 ’d:\test_log.LDF’ 可能有误。 


  应该怎么办呢?下面我们举例说明恢复办法。 


  A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server EntERPrise Manager里面建立。 


  B.停掉数据库服务器。 


  C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。 


  D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。 


  E.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。 




  use master 
  go 
  sp_configure ’allow updates’,1 
  go 
  reconfigure with override 
  go 




  F.设置test为紧急修复模式 


  update sysdatabases set status=-32768 where dbid=DB_ID(’test’) 


  此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表 


  G.下面执行真正的恢复操作,重建数据库日志文件 


  dbcc rebuild_log(’test’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf’) 


  执行过程中,如果遇到下列提示信息: 


  服务器: 消息 5030,级别 16,状态 1,行 1 


  未能排它地锁定数据库以执行该操作。 


  DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 


  说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。 


  正确执行完成的提示应该类似于: 
告: 数据库 ’test’ 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。 


  DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 


  此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。 


  H.验证数据库一致性(可省略) 


  dbcc checkdb(’test’) 


  一般执行结果如下: 


  CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 ’test’ 中)。 


  DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 


  I.设置数据库为正常状态 


  sp_dboption ’test’,’dbo use only’,’false’ 


  假如没有出错,现在你就可以正常的使用恢复后的数据库啦。 


  J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成 




  sp_configure ’allow updates’,0 
  go 
  reconfigure with override 
  go 


http://bbs.csdn.net/topics/350123421


找到一个相对靠谱的操作
http://www.cnblogs.com/ATree/archive/2010/05/16/Sqlserver2005-mdf-ldf.html

SQL Server 2005无日志文件附加数据库

公司网站运营两年多了,日志文件超级大,在重装系统的时候,为了省事,就没有备份日志文件,而且是没有分离就把日志文件给删掉了(下次一定要记得先分离再删日志文件)。结果造成数据库怎么都附加不上。出现错误。

解决办法:

1、新建一个同名数据库。

2、停止数据库服务,覆盖新建的数据库主文件(小技巧:最好放在同一个磁盘里面,把新建的数据库主文件删掉或移开,再把要恢复的数据库主文件剪切过去,这样就可以节省时间。)

3、启动数据库服务,数据库变为置疑或可疑状态。然后在查询分析器中运行:

alter database 无日志文件的数据库名称 set emergency

设置为紧急状态。

4、再运行:

alter database 无日志文件的数据库名称 set single_user

或者:

Sp_dboption '无日志文件的数据库名称', 'single user', 'true'

设置为单用户模式。

5、检查并重建日志文件,运行:

dbcc checkdb('无日志文件的数据库名称',REPAIR_ALLOW_DATA_LOSS)

这个时间比较长。耐心等待!如果有错误提示,再运行:

dbcc checkdb('无日志文件的数据库名称',REPAIR_REBUILD)

进行修复。如果没有错误,可以跳过。

6、恢复成多用户模式

alter database 无日志文件的数据库名称 set multi_user

或者:

Sp_dboption '无日志文件的数据库名称', 'single user', 'false'

刷新数据库,你就可以看到已经修复好的数据库了。

我是如此修复,至于网上还有很多修复方法,我试过,没有成功。通过多方组合得到这个方法。可能也不是数据库的每一个版本都适用,如果你用过后,不行,希望能留言,让我们能共同讨论,共同进步!


http://blog.csdn.net/winstear/article/details/6300363

你可能感兴趣的:(SQL Server 2008 没有日志文件,使用MDF文件附加数据库)