代码之家  ›  专栏  ›  技术社区  ›  Eric Ness

检查数据库是否处于还原状态

  •  12
  • Eric Ness  · 技术社区  · 17 年前

    我正在运行一个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.
    

    4 回复  |  直到 17 年前
        1
  •  30
  •   PatrickSteele    8 年前

    听起来好像您正在使用执行数据库还原 NORECOVERY 选项如果您计划在初始还原后应用后续事务日志备份,则需要执行此操作。

    如果只希望恢复单个数据库备份,请删除 诺雷科维 诺雷科维 诺雷科维 你可以 RESTORE DATABASE DbName WITH RECOVERY 完成。

    方法1

    SELECT DATABASEPROPERTYEX ('DatabaseName', 'Status')
    

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

    方法2

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

    1的状态=恢复

    Sys.Databases

        2
  •  3
  •   gbn    17 年前

    选择 DATABASEPROPERTYEX (“MyDb”、“状态”)

        3
  •  1
  •   Community Mohan Dere    9 年前

    similar problem 做一个 RESTORE 具有 pyodbc . 我的 variation of the problem (与您的症状类似)原来是错误的bak文件。这可以通过以下T-SQL发现,查找不正确的 .mdf .ldf 文件名或数据库名:

    RESTORE FILELISTONLY FROM DISK = N'C:\dbname.bak'
    
        4
  •  1
  •   Petter Friberg Onceler    9 年前

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

    给我一个确切的结果是很困难的。