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>