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 个步骤的解决方案:
切换到其他数据库(例如master)
释放CleanDB
;
的用法
将备份应用到 CleanDB
恢复使用并从 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>
我想使用 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 个步骤的解决方案:
切换到其他数据库(例如master)
释放
CleanDB
; 的用法
将备份应用到
CleanDB
恢复使用并从 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>