从MSSQL备份恢复LIQUIBASE失败

时间:2016-04-27 17:29:42

标签: sql-server liquibase

使用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是新的空现有数据库。我的连接网址指定DevDB作为目标,并显示:url=jdbc:sqlserver://SomePublic;databaseName=CleanDB

执行期间我遇到了错误:

  

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

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

1 个答案:

答案 0 :(得分:0)

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

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

  2. 发布CleanDB;

  3. 的使用情况
  4. 将备份应用于CleanDB

  5. 恢复使用情况并从主服务器切换回CleanDB

  6. 所以下一个代码对我有用:

    <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>