使用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脚本清除应该从某些备份恢复的数据库?
答案 0 :(得分:0)
感谢@SteveDonie评论,我找到了基于4个步骤的解决方案:
切换到其他数据库(例如master)
发布CleanDB
;
将备份应用于CleanDB
恢复使用情况并从主服务器切换回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>