【问题标题】:SQL Server 2005 Restore HangingSQL Server 2005 恢复挂起
【发布时间】:2009-05-16 22:09:27
【问题描述】:

我有一个数据库在 SQL 企业管理器中显示为“(正在恢复...)”

如果我执行 SP_WHO,则没有恢复过程。

服务器上的磁盘和 CPU 活动非常低

我认为它根本没有恢复。

我怎样才能摆脱这个?

我尝试重命名底层 MDF 文件,但即使我执行“NET STOP MSSQLSERVER”,它也会告诉我文件已打开。

我尝试使用 PROCEXP 来查找打开文件的进程,但即使是最新的 PROCEXP 在 Windows Server 2003 R2 x64 上似乎也无法做到这一点。下部窗格视图为空白。

在 SQL Server 日志中显示“数据库已标记为正在恢复,并且处于不允许运行恢复的状态”

【问题讨论】:

    标签: sql sql-server sql-server-2005 restore


    【解决方案1】:

    Sql Server 有两种备份类型:

    • 完整备份,包含整个数据库
    • 事务日志备份,仅包含自上次完整备份以来的更改

    还原时,Sql Server 会询问您是否要在完整备份后还原其他日志。如果您选择此选项,称为 WITH NORECOVERY,则数据库将处于恢复状态。它将等待更多的事务日志被恢复。

    你可以强制它退出恢复模式:

    RESTORE DATABASE <DATABASE_NAME> WITH RECOVERY
    

    如果此命令出错,请分离数据库,删除 MDF 文件,然后从头开始恢复。如果一直失败,您的备份文件可能已损坏。

    这是恢复选项的屏幕截图,选择了默认选项。第二个选项将使数据库处于恢复状态。

    Image of the restore options http://img193.imageshack.us/img193/8366/captureu.png

    P.S.1。您正在运行 64 位版本的进程资源管理器吗?确认您在任务管理器中看到了 procexp64.exe。

    附注 2。这更像是serverfault 的问题。

    【讨论】:

      【解决方案2】:

      在执行 RESTORE DATABASE/RESTORE LOG 命令时,默认使用 WITH RECOVERY 选项。如果您陷入“恢复”过程,您可以通过执行以下命令将数据库恢复到在线状态:

      RESTORE DATABASE YourDB WITH RECOVERY
      GO
      

      您可以在此 SO 帖子 https://stackoverflow.com/a/21192066/2808398 上查找更多选项和一些第三方工具

      【讨论】:

        【解决方案3】:

        如果您想摆脱文件上的锁定,我建议您使用 Unlocker http://www.emptyloop.com/unlocker/

        它将为您提供解锁文件或终止锁定文件的进程的选项。在 mdf 和 ldf 文件上运行它。

        另一种选择是尝试从 Enterprise Manager 或 Sql Management Studio 中分离文件,然后重新附加数据库。你可以在运行 unlocker 之前试试这个,看看 sql server 是否只会释放 mdf 和 ldf 文件。

        注意:如果您终止该进程,您可能会丢失数据或数据可能会损坏,因此只有在您尝试摆脱它并且您拥有经过测试的良好备份时才使用此选项。

        【讨论】:

        • 如果您分离数据库,您将无法再次重新附加它。无法附加处于恢复状态的 DB。因此,如果你分离它,你最好有一个可以恢复的备份
        猜你喜欢
        • 2013-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        相关资源
        最近更新 更多