oracle 是否可以在Liquibase中更改变更集之间的数据库连接?

r9f1avp5  于 2023-11-17  发布在  Oracle
关注(0)|答案(3)|浏览(140)

我已经研究过Liquibase changesetscustomChangecontexts,但在阅读了这几天的材料后,我仍然没有找到一个答案,可以帮助我完成我想做的事情。
基本上,我有数据库更改脚本,我想通过Liquibase运行。

  • script1.sql
  • DROP MATERIALIZED VIEW LOG on TABLE1
  • script2.sql
  • DROP MATERIALIZED VIEW TABLE1

script1.sql应该在某个DB1上运行,而script2.sql应该在某个DB2上运行。DB1DB2的数据库URL是:

  1. DB1'jdbc:oracle:thin:@db_host:1521:DB1'
  2. DB2'jdbc:oracle:thin:@db_host:1521:DB2'
    我有ff.在build.gradle中定义:
liquibase {
  activities {
    main {
      changeLogFile "$projectDir/src/main/db/main-changelogs.xml"
      url 'jdbc:oracle:thin:@db_host:1521:DB1'
      username 'root'
      password 'root'
    }
  }
}

字符串
我的更新日志定义如下:

<?xml version="1.0" encoding="UTF-8"?> 

<databaseChangeLog  
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xmlns:pro="http://www.liquibase.org/xml/ns/pro"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.0.xsd
      http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-3.8.xsd">  

    <changeSet id="1" author="bob">  
        <sqlFile dbms="oracle"
          path="my/path/script1.sql" />
    </changeSet>  
    <changeSet id="2" author="bob">  
        <sqlFile dbms="oracle"
          path="my/path/script2.sql" />
    </changeSet>  

</databaseChangeLog>

因此,我的问题是,如何在我的更新日志中在DB1DB2之间切换连接?

svujldwt

svujldwt1#

据我所知,你可能需要2个不同的liquibase.properties文件来指定数据库url。另外,如果你只使用1个changelog文件,你可以使用labels,这将只允许标记的变更集对指定的数据库运行。

wwwo4jvm

wwwo4jvm2#

我也在Liquibase论坛上回答了这个问题。
您不能在Liquibase的执行中更改连接。
我建议分成两个变更日志并运行两个Liquibase部署,一个用于DB1,一个用于DB2。

4ioopgfo

4ioopgfo3#

我知道这是一个古老的线程,但对于有人寻找一种方式,这是我所做的
1.将连接字符串(jdbc url)保存在要主控的属性(或您首选的任何数据库)中

Enter the Target database 'url' information
liquibase.command.url=jdbc:sqlserver://localhost;**database=master**;applicationname=LiquibasePoC;encrypt=false;trustServerCertificate=false

字符串
1.使用tag为每个更改翻转数据库。像这样:

<?xml version="1.0" encoding="UTF-8"?>
    <databaseChangeLog>
       <changeSet author="user" id="BaseObjects">
            **<sql>use liquibasePOC1;</sql> <!-- flip to DB 1 -->**
            <sqlFile dbms="mssql" encoding="UTF-8" endDelimiter="\nGO" path="./changesets/liquibasepocdb/tables/dbo.Table1.sql" 
                    relativeToChangelogFile="false" splitStatements="true" stripComments="true" />
            <sqlFile dbms="mssql" encoding="UTF-8" endDelimiter="\nGO" path="./changesets/liquibasepocdb/tables/dbo.Table2.sql" 
                    relativeToChangelogFile="false" splitStatements="true" stripComments="true" />
            **<sql>use liquibasePOC2;</sql> <!-- flip to DB 2 -->**
            <sqlFile dbms="mssql" encoding="UTF-8" endDelimiter="\nGO" path="./changesets/liquibasepocdb/procedures/dbo.SP1.sql" 
                    relativeToChangelogFile="false" splitStatements="true" stripComments="true" />
            **<sql>use master;</sql> <!-- back to connection string db so that DATACHANGELOG gets updated properly -->**
        </changeSet>
    </databaseChangeLog>

相关问题