3.11 Liquibase変更ログ・ファイルの重要な23.4の更新

スキーマ間使用の場合、SQLclリリース23.4より前に生成された変更ログ・ファイルには、再生成または手動更新が必要な場合があります。これらの変更は、23.4より前の変更ログを使用してエクスポートとインポートの間でスキーマ名を変更する場合にのみ必要です。

変更ログを再生成しない場合、または手動調整を行わない場合は、次のようにします。

  • スキーマ名を含む変更ログは、指定されたパラメータに関係なく、指定されたスキーマにのみ適用されます。
  • スキーマ名を含まない変更ログは、指定されたパラメータに関係なく、SQLclで現在接続しているスキーマにのみ適用されます。

SQLclリリース23.4では、変更セットに格納されているスキーマ名の%USER_NAME%置換が導入されました。

適切な%USER_NAME%置換を使用する変更ログの手動更新については、次の2つのタイプの変更があります。

  • <SCHEMA></SCHEMA> XML要素による変更ログ
  • CDATAフィールド内でSQLを使用する変更ログ

<SCHEMA></SCHEMA> XML要素を含む変更ログの場合は、内部のコンテンツを%USER_NAME%に置き換えます。

次のコード・ブロックでは、このコードに表示される2つの<SCHEMA> XML要素が太字フォントで強調表示されています。これらは%USER_NAME%に置き換えられます。

<?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:n0="http://www.oracle.com/xml/ns/dbchangelog-ext"
 xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
 <changeSet id="5b3935a6b05750a24ac6ebc1c646bc6fe4cb4b40" author="(HR)-Generated" failOnError="false"   runOnChange="true" runAlways="false"  >
    <n0:createSxmlObject objectName="MERCHANDISE" objectType="TABLE" ownerName="HR"  replaceIfExists="true" >
        0:source><![CDATA[
<TABLE xmlns="http://xmlns.oracle.com/ku" version="1.0">
<SCHEMA>HR</SCHEMA>
<NAME>MERCHANDISE</NAME>
<RELATIONAL_TABLE>
 <COL_LIST>
  <COL_LIST_ITEM>
   <NAME>ID</NAME>
   <DATATYPE>NUMBER</DATATYPE>
   <IDENTITY_COLUMN>
    <SCHEMA>HR</SCHEMA>
    <GENERATION>ALWAYS</GENERATION>
    <START_WITH>1</START_WITH>
    <INCREMENT>1</INCREMENT>
    <MINVALUE>1</MINVALUE>
    <MAXVALUE>9999999999999999999999999999</MAXVALUE>
    <CACHE>20</CACHE>
   </IDENTITY_COLUMN>
…

手動調整を行うと、このセクションは次のように変わります。

<?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:n0="http://www.oracle.com/xml/ns/dbchangelog-ext"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
  http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
  <changeSet id="5b3935a6b05750a24ac6ebc1c646bc6fe4cb4b40" author="(HR)-Generated" failOnError="false"   runOnChange="true" runAlways="false"  >
    <n0:createSxmlObject objectName="MERCHANDISE" objectType="TABLE" ownerName="HR"  replaceIfExists="true" >
     <n0:source><![CDATA[
<TABLE xmlns="http://xmlns.oracle.com/ku" version="1.0">
<SCHEMA>%USER_NAME%</SCHEMA>
<NAME>MERCHANDISE</NAME>
<RELATIONAL_TABLE>
   <COL_LIST>
     <COL_LIST_ITEM>
       <NAME>ID</NAME>
       <DATATYPE>NUMBER</DATATYPE>
       <IDENTITY_COLUMN>
       <CHEMA>%USER_NAME%</SCHEMA>
       <GENERATION>ALWAYS</GENERATION>
       <START_WITH>1</START_WITH>
       <INCREMENT>1</INCREMENT>
       <MINVALUE>1</MINVALUE>
       <MAXVALUE>9999999999999999999999999999</MAXVALUE>
       <CACHE>20</CACHE>
       </IDENTITY_COLUMN>
…

CDATAフィールド内でSQLを使用する変更ログの場合は、すべてのデータベース・オブジェクト参照の前に%USER_NAME%.をアタッチします。スキーマ名がこれらの場所にある場合は、%USER_NAME%に置き換えます。%USER_NAME%の後にピリオドがあることに注意してください。

次に2つの例を示します。それぞれ、手動調整の前および後の変更ログ・ファイルを表示し、コード・ブロック内の調整部分が太字フォントで強調表示されています。

例1

<?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:n0="http://www.oracle.com/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet id="f1b1bf677cf990caa0147f863ea18486cdf23815" author="(LBUSER)-Generated" failOnError="false" runOnChange="false" runAlways="false" >
<n0:createOracleRefConstraint objectName="EMP_JOB_FK" objectType="REF_CONSTRAINT" ownerName="LBUSER" replaceIfExists="false" >
<n0:source><![CDATA[ALTER TABLE "LBUSER"."EMPLOYEES" ADD CONSTRAINT "EMP_JOB_FK" FOREIGN KEY ("JOB_ID") REFERENCES "LBUSER"."JOBS" ("JOB_ID") ENABLE;]]></n0:source>
</n0:createOracleRefConstraint>
</changeSet>
</databaseChangeLog>

手動調整を行うと、このセクションは次のように変わります。

<?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:n0="http://www.oracle.com/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet id="f1b1bf677cf990caa0147f863ea18486cdf23815" author="(LBUSER)-Generated" failOnError="false" runOnChange="false" runAlways="false" >
<n0:createOracleRefConstraint objectName="EMP_JOB_FK" objectType="REF_CONSTRAINT" ownerName="LBUSER" replaceIfExists="false" >
<n0:source><![CDATA[ALTER TABLE "%USER_NAME%"."EMPLOYEES" ADD CONSTRAINT "EMP_JOB_FK" FOREIGN KEY ("JOB_ID") REFERENCES "%USER_NAME%"."JOBS" ("JOB_ID") ENABLE;]]></n0:source>
</n0:createOracleRefConstraint>
</changeSet>
</databaseChangeLog>

例2

<?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:n0="http://www.oracle.com/xml/ns/dbchangelog-ext"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
  http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
  <changeSet id="2b1ce58fc2f1781ce70d5bb99bf23b6ae8741ff3" author="(TEST9)-Generated" failOnError="false"   runOnChange="false" runAlways="false"  >
     <n0:createOracleProcedure objectName="P_SQLCLERROR_PROCEDURE" objectType="PROCEDURE" ownerName="TEST9"  replaceIfExists="false" >
       <n0:source><![CDATA[CREATE OR REPLACE EDITIONABLE PROCEDURE "TEST9"."P_SQLCLERROR_PROCEDURE" is
begin
null;
end p_sqlclerror_procedure;
/]]></n0:source>
                </n0:createOracleProcedure>
        </changeSet>
</databaseChangeLog>

手動調整を行うと、このセクションは次のように表示されます。

<?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:n0="http://www.oracle.com/xml/ns/dbchangelog-ext"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
  http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
  <changeSet id="2b1ce58fc2f1781ce70d5bb99bf23b6ae8741ff3" author="(TEST9)-Generated" failOnError="false"   runOnChange="false" runAlways="false"  >
    <n0:createOracleProcedure objectName="P_SQLCLERROR_PROCEDURE" objectType="PROCEDURE" ownerName="TEST9"  replaceIfExists="false" >
      <n0:source><![CDATA[CREATE OR REPLACE EDITIONABLE PROCEDURE "%USER_NAME%"."P_SQLCLERROR_PROCEDURE" is
begin
null;
end p_sqlclerror_procedure;
/]]></n0:source>
          </n0:createOracleProcedure>
         </changeSet>
</databaseChangeLog>