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クライアントに追加できます。これを行う手順は、次の例を使用して説明します。

  1. Oracle Databaseに接続し、SQLclコマンドライン・インタフェースを起動します。サンプル・データベースには、表示できるサンプル表がいくつかあります。

    SQL> select table_name from user_tables;
    
    TABLE_NAME
    _____________
    REGIONS
    LOCATIONS
    DEPARTMENTS
    JOBS
    EMPLOYEES
    JOB_HISTORY
    COUNTRIES
    
    7 rows selected.
    
  2. 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.
    
  3. 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.
  4. 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.
    
  5. LiquibaseのWebサイトからダウンロードできる、vanilla Liquibaseオープンソースのコマンドライン・クライアントに切り替えます。

  6. vanilla LiquibaseクライアントのSQLclで接続しているOracle Databaseの資格証明を指定する必要があります。空白のテキスト・ファイルからliquibase.propertiesファイルを作成します。この例では、WindowsシステムのC:\Users\ [username]フォルダにliquibase.propertiesファイルが作成されます。次の図に、この例で使用されているプロパティ・ファイルを示します。Liquibaseのデータベース資格証明の指定の詳細は、接続プロファイルでのプロパティの指定を参照してください。

    プロパティ・ファイル
  7. SQLcl binフォルダから以前に作成したfruits_table.xml変更ログ・ファイルをコピーして、liquibase.propertiesファイルのフォルダの場所(この場合はC:\Users\[username])に貼り付けます。変更ログ・ファイルを別の場所に保持するには、liquibase.propertiesファイルのchangelog-fileフィールドにファイルの場所へのパスを指定します。

  8. updateコマンドを実行します。

    >liquibase --changelog-file=fruits_table.xml update
    これはコード・スニペットです。

    SQLcl専用変更ログがvanilla Liquibaseクライアントでサポートされていない形式であるため、更新は失敗します。

    次のステップでは、変更ログを実行できるように、vanilla LiquibaseクライアントでSQLcl Liquibaseの変更ログを読み取る機能を追加します。

  9. 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)
  10. 次の行を追加してliquibase.propertiesファイルを更新します。

    change-exec-listener-class: liquibase.changelog.visitor.OracleActionChangeListener
    プロパティ・ファイル

    これで、vanilla LiquibaseクライアントのSQLcl Liquibase変更ログを読み取ることができます。

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

    これはコード・スニペットです。