3.5 オープンソースのLiquibaseでのSQLcl Liquibase機能の使用
Oracle Databaseを使用したSQLcl Liquibaseは、vanilla Liquibaseクライアントと比較してLiquibaseエクスペリエンスに拡張された機能を提供します。これには、LiquibaseコマンドおよびSQLcl専用Liquibaseコマンドを使用して動的に表を変更することが含まれます。たとえば、次の特殊なスナップショットを生成します。
- 包括的なスキーマ(
generate-schema
) - Oracle REST Data Service (ORDS)オブジェクト(
generate-ords-module
およびgenerate-ords-schema
) - Oracle APEXオブジェクト(
generate-apex
)
デフォルトでは、Liquibaseクライアントにこの拡張機能が含まれておらず、SQLcl Liquibaseによって生成された特殊な変更ログを読み取ることができません。
SQLclから特定のjarファイルをコピーし、Liquibaseプロパティ・ファイルを更新することで、これらの特殊な変更ログを読み取る機能をLiquibaseクライアントに追加できます。これを行う手順は、次の例を使用して説明します。
-
Oracle Databaseに接続し、SQLclコマンドライン・インタフェースを起動します。サンプル・データベースには、表示できるサンプル表がいくつかあります。
SQL> select table_name from user_tables; TABLE_NAME _____________ REGIONS LOCATIONS DEPARTMENTS JOBS EMPLOYEES JOB_HISTORY COUNTRIES 7 rows selected.
-
表
Fruits
を作成します。これは追跡するサンプル表として機能します。SQL> create table fruits (id number(1,0), type varchar2(50), price number, constraint fruits_pk primary key (id)); Table FRUITS created.
表がサンプル表のリストに追加されます。
SQL> select table_name from user_tables; TABLE_NAME _____________ REGIONS LOCATIONS DEPARTMENTS JOBS EMPLOYEES JOB_HISTORY FRUITS COUNTRIES 8 rows selected.
-
Fruits
表の変更ログを生成します。SQL> lb generate-object -object-type table -object-name fruits; --Starting Liquibase at 13:43:52 (version 4.15.0 #0 built at 2022-08-19 14:45+000) Changelog created and written to file fruits_table.xml Operation completed successfully.
-
Fruits
表を削除して、作成した変更ログで生成するテストを実行できるようにします。SQL> drop table fruits; SQL> select table_name from user_tables; TABLE_NAME _____________ REGIONS LOCATIONS DEPARTMENTS JOBS EMPLOYEES JOB_HISTORY COUNTRIES 7 rows selected.
-
LiquibaseのWebサイトからダウンロードできる、vanilla Liquibaseオープンソースのコマンドライン・クライアントに切り替えます。
-
vanilla LiquibaseクライアントのSQLclで接続しているOracle Databaseの資格証明を指定する必要があります。空白のテキスト・ファイルから
liquibase.properties
ファイルを作成します。この例では、WindowsシステムのC:\Users\
[username]フォルダにliquibase.properties
ファイルが作成されます。次の図に、この例で使用されているプロパティ・ファイルを示します。Liquibaseのデータベース資格証明の指定の詳細は、接続プロファイルでのプロパティの指定を参照してください。 -
SQLcl binフォルダから以前に作成した
fruits_table.xml
変更ログ・ファイルをコピーして、liquibase.properties
ファイルのフォルダの場所(この場合はC:\Users\[username])に貼り付けます。変更ログ・ファイルを別の場所に保持するには、liquibase.properties
ファイルのchangelog-fileフィールドにファイルの場所へのパスを指定します。 -
updateコマンドを実行します。
>liquibase --changelog-file=fruits_table.xml update
SQLcl専用変更ログがvanilla Liquibaseクライアントでサポートされていない形式であるため、更新は失敗します。
次のステップでは、変更ログを実行できるように、vanilla LiquibaseクライアントでSQLcl Liquibaseの変更ログを読み取る機能を追加します。
-
SQLclフォルダの
lib
およびlib/ext
フォルダから5つのjarファイルをコピーし、それらをvanilla Liquibaseクライアントのlib
フォルダ(liquibase/lib
)に追加します。dbtools-liquibase.jar
(sqlcl/lib/ext
)dbtools-apex.jar
(sqlcl/lib/ext
)guava-with-lf.jar
(sqlcl/lib
)xmlparserv2_sans_jaxp_services.jar
(sqlcl/lib
)dbtools-common.jar
(sqlcl/lib
)
-
次の行を追加して
liquibase.properties
ファイルを更新します。change-exec-listener-class: liquibase.changelog.visitor.OracleActionChangeListener
これで、vanilla LiquibaseクライアントのSQLcl Liquibase変更ログを読み取ることができます。
-
vanilla LiquibaseクライアントでSQL Liquibase変更ログを実行します。
>liquibase update --changelog-file fruits_table.xml
SQLおよびデータベースに接続されている別のコマンドライン・ウィンドウで、表が正常に作成されたかどうかを確認できます。
SQL> select table_name from user_tables; TABLE_NAME _____________ REGIONS LOCATIONS DEPARTMENTS JOBS EMPLOYEES JOB_HISTORY COUNTRIES DATABASECHANGELOGLOCK DATABASECHANGELOG FRUITS COUNTRIES 10 rows selected.
この機能をvanilla Liquibaseクライアントに追加すると、Oracle Rest Data Services (ORDS)、Oracle APEX、完全なデータベース・スキーマなどの他の変更ログ・タイプの変更ログを、Oracle SQLclスクリプトで読み取ることもできます。