从MDF文件恢复数据库,丢失的LDF和数据库没有干净地关闭

时间:2012-04-02 07:41:59

标签: sql-server sql-server-2008 restore mdf

在我不知情的情况下,我的dev数据库服务器由一些管理员格式化。值得庆幸的是,我将.mdf文件保存在其他驱动器中,但.ldf位于其默认位置。由于我没有数据库备份,因此我现在使用.mdf文件。我用谷歌搜索并找到了从.mdf文件恢复数据库的各种技巧。由于数据库没有干净地关闭,所以没有任何技巧。我的机器上安装了SQL Server 2008 SP2。我记得丢失的数据库服务器是SQL Server 2005实例。请告诉我如何恢复数据库。

我尝试过的技巧:

  1. 我尝试通过从数据库中删除日志文件项来附加列表来附加SSMS中的.mdf。
  2. CREATE DATABASE Monitoring ON (FILENAME = N'D:\Dump\Data\Monitoring.MDF') FOR ATTACH_REBUILD_LOG
  3. sp_attach_single_file_db N'Monitoring', N'D:\Dump\Data\Monitoring_Data.MDF'
  4. 上面我得到了

      

    DBCC语句不正确。检查文档以获取正确的DBCC语法和选项。

    然后我尝试了DBCC REBUILD_LOG('Monitoring',N'C:\Program Files ..MSSQL\Data\Monitoring_log.ldf'),结果是:

      

    DBCC语句不正确。检查文档以获取正确的DBCC语法和选项。“错误。

2 个答案:

答案 0 :(得分:2)

以下是一些可能有用的注释(适用于SQL 2000)。我从未尝试过这些。

  1. 在EM中创建一个与原始名称相同的数据库。
  2. 停止SQL服务(实例)。
  3. 将旧的.MDF复制到新的.MDF上。
  4. 启动服务(实例)。
  5. DB在EM中显示为可疑。
  6. 启动查询管理器。
  7. 连接到正在运行的实例。
  8. 通过执行以下操作将数据库置于紧急绕过状态:

    sp_configure 'allow', 1 
    go 
    reconfigure with overide. 
    
    update master..sysdatabases 
    set status=32768 
    where dbid=5    --check this ID is for your db 
    
  9. 停止SQL服务(实例)。

  10. 删除LDF。
  11. 启动SQL服务(实例)。
  12. 在QM中执行以下操作:

    select dbid, status, name 
    from master..sysdatabases 
    dbcc rebuild_log ('dbname', 'full path and LDF name') 
    
  13. 通过QM中的执行功能从紧急绕过状态恢复数据库:

     update master..sysdatabases 
     set status=16 
     where dbid=5 --Check this ID for your db 
    
  14. 通过在QM中执行以下操作进行清理:

     sp_configure 'allow', 0 
     go 
     reconfigure with override 
    

答案 1 :(得分:1)

试试这个:

ALTER DATABASE EmpDataBase REBUILD LOG ON(NAME = $ DatabaseName $,FILENAME = N'$ Path \ DatabaseName.ldf $')

GO

DBCC CHECKDB

ALTER DATABASE $ DatabaseName $ SET MULTI_USER

GO