代码之家  ›  专栏  ›  技术社区  ›  Dewfy

从MSSQL备份进行LIQUIBASE还原失败

  •  0
  • Dewfy  · 技术社区  · 9 年前

    使用Liquibase,我想应用多个更改集,但第一个是还原数据库脚本,如下所示:

    <changeSet id="0" author="me" context="test or dev">
        <sql >
           RESTORE DATABASE CleanDB
           FROM DISK = '\\SomePublic\DevDB.bak'
           WITH REPLACE;
         </sql>
    </changeSet>
    <!-- here many changes go -->
    

    笔记 CleanDB 是新的空现有数据库。我的连接url指定 DevDB 作为目标,看起来: url=jdbc:sqlserver://SomePublic;databaseName=CleanDB

    在执行过程中,我遇到了错误:

    液化酶 :RESTORE无法处理数据库“CleanDB”,因为此会话正在使用它。建议在执行此操作时使用master数据库。

    所以我的问题是:如何应用Liquibase脚本来清除应该从备份中恢复的数据库?

    1 回复  |  直到 9 年前
        1
  •  0
  •   Dewfy    9 年前

    由于@SteveDonie的评论,我找到了基于4个步骤的解决方案:

    1. 切换到其他数据库(例如master)

    2. 发布的用法 CleanDB ;

    3. 将备份应用于 清洁DB

    4. 恢复使用并从主服务器切换回 清洁DB .

    因此,下一个代码对我有效:

    <sql splitStatements="true">
        use master; <!-- switch to master -->
        <!-- avoid error that CleanDB already in use -->
        alter database ${databaseName}
        set single_user with rollback immediate;
        <!-- apply backup -->
        RESTORE DATABASE CleanDB
        FROM DISK = '\\SomePublic\DevDB.bak'
        WITH REPLACE;
        <!-- Restore access to database -->
        alter database ${databaseName}
        set multi_user;
        <!-- switch back for further Liquibase operations -->
        use ${databaseName};
    
     </sql>