LIQUIBASE 从 MSSQL 备份恢复失败

LIQUIBASE restore from MSSQL backup failed

我想使用 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

在执行过程中出现错误:

liquibase: RESTORE cannot process database 'CleanDB' because it is in use by this session. It is recommended that the master database be used when performing this operation.

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

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

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

  2. 释放CleanDB;

  3. 的用法
  4. 将备份应用到 CleanDB

  5. 恢复使用并从 master 切换回 CleanDB

所以下一个代码适合我:

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