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スクリプトで読み取ることもできます。
