【问题标题】:Checking If Database In Restoring State检查数据库是否处于恢复状态
【发布时间】:2009-08-20 13:36:42
【问题描述】:

我正在运行一个删除数据库然后恢复它的 T-SQL 脚本。该脚本针对 SQL Server 2008 数据库运行。有时备份文件有问题,数据库卡在恢复状态。

IF EXISTS (SELECT 1 FROM master.dbo.sysdatabases WHERE name = 'dbname')
BEGIN
    ALTER DATABASE [dbname]
    SET SINGLE_USER WITH 
    ROLLBACK IMMEDIATE
END

IF EXISTS (SELECT 1 FROM master.dbo.sysdatabases WHERE name = 'dbname')
BEGIN
    DROP DATABASE [dbname]
END

RESTORE DATABASE [dbname]
FROM  DISK = N'C:\dbname.bak'
WITH  FILE = 1,
NOUNLOAD,
STATS = 10

下次运行脚本时,脚本会生成错误消息

ALTER DATABASE is not permitted while a database is in the Restoring state.

在尝试运行 ALTER DATABASE 命令之前检查数据库是否处于恢复状态的最佳方法是什么?

编辑:我正在运行的 RESTORE DATABASE 命令不使用 NO RECOVERY 选项。

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    听起来好像您正在使用NORECOVERY 选项执行数据库还原。您希望这样做的原因是,如果您计划在初始还原后应用后续事务日志备份。

    如果您只想恢复单个数据库备份,请删除 NORECOVERY 子句。如果您要恢复事务日志备份,则必须在不使用NORECOVERY 子句的情况下完成最终恢复,或者如果最后一次应用了NORECOVERY,您可以通过RESTORE DATABASE DbName WITH RECOVERY 来完成。

    回答你的问题:

    方法一

    SELECT DATABASEPROPERTYEX ('DatabaseName', 'Status')
    

    请参阅 SQL Server 联机丛书:DATABASEPROPERTYEX (Transact-SQL)

    方法二

    查看 sys.databases 系统视图以确定数据库的当前状态。例如:

    SELECT
        state,
        state_desc
        FROM sys.databases
    WHERE [name] = 'DatabaseName'
    

    状态 1 = 正在恢复

    有关此系统视图的文档,请参阅 Sys.Databases

    【讨论】:

    • state_description 现在是 SQL 2008 r2 中的 state_desc
    • @Iain:在 SQL-Server 2005 中也是 state_desc
    【解决方案2】:

    选择DATABASEPROPERTYEX('MyDb','状态')

    【讨论】:

      【解决方案3】:

      其他人有一个similar problempyodbc 一起做一个RESTORE。我的variation of the problem(与你的症状相似)原来是一个不正确的 bak 文件。这可以通过以下 T-SQL 发现,查找不正确的 .mdf.ldf 文件名或数据库名:

      RESTORE FILELISTONLY FROM DISK = N'C:\dbname.bak'
      

      【讨论】:

        【解决方案4】:

        方法二:

        SELECT
            state,
            state_desc
             FROM sys.databases
        WHERE [name] = 'Databasename'
        

        这是给我准确的结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-11
          • 2019-12-10
          • 1970-01-01
          相关资源
          最近更新 更多