2 SQLclでのLiquibaseの使用

この章では、SQLclのLiquibase機能について説明します。内容は次のとおりです。

2.1 Liquibaseについて

Liquibaseは、データベース・スキーマの変更を追跡、管理、および適用するための、データベースに依存しないオープンソースのライブラリです。Liquibaseの主要な概念の理解については、主要な概念を参照してください。

SQLclでは、コマンドを実行して、単一オブジェクトまたは完全なスキーマ(変更セットと変更ログ)の変更ログを生成できるようになりました。これらのオブジェクトは、SQLclを使用するか、従来のLiquibaseインタフェースを使用して手動で処理できます。

SQLclのLiquibase機能を使用すると、次のことができます。

  • 単一オブジェクトの変更ログを生成して実行する
  • オブジェクトの依存性を持つスキーマ変更セットを生成して実行する
  • 作成中に、オブジェクトの依存性に基づいて変更セットを自動的にソートする
  • 変更セットまたは変更ログの実行に関するすべてのSQL文を、生成時に記録する
  • 変更セットおよび変更ログの完全なロールバック・サポートを自動的に提供する

2.2 Liquibaseを使用するための要件

Liquibaseを使用するための2つの重要な側面は、Oracleデータベースにおけるオブジェクトの取得とデプロイです。

オブジェクトの取得

オブジェクトまたはスキーマを取得するには、SQLcl 19.2以降がインストールされている必要があります。

このリリースでは、SQLclで接続しているスキーマからのみオブジェクトを取得できます。また、ファイルを保存するディレクトリに対する書込み権限も必要です。

スキーマ全体を取得する場合、接続先のユーザーに表を作成する権限が必要です。DATABASECHANGELOG_EXPORT表は、オブジェクトの詳細を収集して正しくソートするために内部的に作成されます。作成されたオブジェクトは、取得プロセスから自動的に除外され、取得の完了時に破棄されます。

オブジェクトのデプロイ

Liquibaseは、DATABASECHANGELOG表を使用して、実行された変更セットを追跡します。DATABASECHANGELOGLOCK表は、Liquibaseのインスタンスが確実に一度に1つのみ実行されているようにします。DATABASECHANGELOG_EXPORT表は、オブジェクトの状態とデプロイメント中に実行されたSQL文を追跡します。

  • SQLcl

    SQLclを介してデータベースに変更をデプロイするには、19.2リリース以降および表を作成する権限が必要です。デプロイする変更を介して任意のオブジェクト型を作成するには、必要な権限を持っている必要があります。

  • Liquibase

    Liquibaseを直接使用して変更セットをデプロイする場合、次のものが必要です。

    • Liquibase環境にインストールされている拡張機能。oracle-liquibase.jarファイルをliquibase/lib/extに追加します。
    • 表を作成する権限。

2.3 サポートされているタイプ

DDLタイプは作成または置換構文を使用しますが、変更を適用する前にオブジェクトのスナップショットが取得されるため、最後の既知の状態への自動ロールバックがサポートされます。SXMLタイプは、自動ロールバック・サポートによる自動変更生成をサポートします。

DDLタイプには、独自の変更タイプがあります。

  • CONSTRAINT
  • DIMENSION
  • FUNCTION
  • OBJECT_GRANT
  • PACKAGE_BODY
  • PACKAGE_SPEC
  • PROCEDURE
  • PUBLIC_SYNONYM
  • REF_CONSTRAINT
  • SYNONYM
  • TYPE BODY
  • TYPE SPEC

SXMLタイプは、SXML変更タイプを共有します。

  • AQ_QUEUE
  • AQ_QUEUE_TABLE
  • AQ_TRANSFORM MATERIALIZED_VIEW
  • ASSOCIATION
  • AUDIT
  • AUDIT_OBJ
  • CLUSTER
  • CONTEXT
  • DB_LINK
  • DEFAULT_ROLE
  • FGA_POLICY
  • JOB
  • LIBRARY
  • MATERIALIZED_VIEW_LOG
  • OPERATOR
  • PROFILE
  • PROXY
  • REFRESH_GROUP
  • RESOURCE_COST
  • RLS_CONTEXT
  • RLS_GROUP
  • RMGR_CONSUMER_GROUP
  • RMGR_INTITIAL_CONSUMER_GROUP
  • RMGR_PLAN
  • RMGR_PLAN_DIRECTIVE
  • ROLE
  • ROLLBACK_SEGMENT
  • SEQUENCE
  • TABLE
  • TABLESPACE
  • TRIGGER XS_ACL
  • TRUSTED_DB_LINK
  • USER
  • VIEW
  • XMLSCHEMA
  • XS_ACL_PARAM INDEX
  • XS_DATA_SECURITY
  • XS_ROLE
  • XS_ROLESET
  • XS_ROLE_GRANT
  • XS_SECURITY_CLASS
  • XS_USER

2.4 SQLclでサポートされているLiquibaseコマンド

SQLclのLiquibaseコマンドは、liquibaseまたはlbを使用して起動できます。使用可能なすべてのコマンドのリストを表示するには、引数なしでliquibaseまたはlbを実行します。

  • liquibase(lb) genobject <object_type> <object_name>

    SQLclの現在の接続を使用して単一のオブジェクトを取得します。現在の作業ディレクトリに、<object name>_<object type>.xmlという名前のxmlファイルが作成されます。

    使用可能なパラメータ:

    名前 説明 必須
    オブジェクト型 オブジェクトの型(これはOracleタイプです) はい
    オブジェクト名 オブジェクトの名前 はい

    例:

    SQL> lb genobject table employees 
    lb genobject table employees 
    Action successfully completed please review created file EMPLOYEES_TABLE.xml
  • liquibase(lb) genschema

    ユーザーがSQLclで接続しているスキーマ全体を取得します。スキーマ内の各オブジェクトの現在の作業ディレクトリにxmlファイルを作成し、controller.xmlファイルを作成します。コントローラ・ファイルは、スキーマを正しくデプロイできるように、すべてのファイルを適切な順序で含んだ変更ログです。

    使用可能なパラメータ:

    名前 説明 必須
    Public synonym パブリック・シノニムを取得します。デフォルトはfalseです。 いいえ
    Grants 権限を取得します。デフォルトはfalseです。 いいえ

    例:

    SQL> lb genschema
    lb genschema
    [Type - TYPE_SPEC]:                          153 ms
    [Type - TYPE_BODY]:                          29 ms
    [Type - SEQUENCE]:                           48 ms
    [Type - CLUSTER]:                            27 ms
    [Type - TABLE]:                              36 ms
    [Type - MATERIALIZED_VIEW_LOG]:              19 ms
    [Type - MATERIALIZED_VIEW]:                  6 ms
    [Type - VIEW]:                               148 ms
    [Type - REF_CONSTRAINT]:                     272 ms
    [Type - DIMENSION]:                          23 ms
    [Type - FUNCTION]:                           27 ms
    [Type - PROCEDURE]:                          64 ms
    [Type - PACKAGE_SPEC]:                       171 ms
    [Type - DB_LINK]:                            14 ms
    [Type - SYNONYM]:                            22 ms
    [Type - INDEX]:                              202 ms
    [Type - TRIGGER]:                            51 ms
    [Type - PACKAGE_BODY]:                       252 ms
    [Method loadCaptureTable]:                   1864 ms
    [Method parseCaptureTableRecords]:           7342 ms
    [Method sortCaptureTable]:                   30 ms
    [Method createExportChangeLogs]:             3 ms
    
    Export Flags Used:
    Export Grants               false
    Export Synonyms             false
  • liquibase(lb) gencontrolfile

    現在の作業ディレクトリにファイルを含めるためのプレースホルダを指定して、空の変更ログmaster.xmlを作成します。このコマンドは、カスタム変更セットを含む変更ログを作成するときに使用できます。

    例:
    SQL> lb gencontrolfile
    lb gencontrolfile
    Action successfully completed please review created file controller.xml
  • liquibase(lb) update <CHANGE LOG> {include schema}

    現在の接続を使用して、指定した変更ログを適用します。include schemaTRUEを渡すことにより、スキーマをDDLに含めることを選択できます。デフォルト値はFALSEです。

    例:
    SQL> lb update foo_table.xml
    lb update foo_table.xml
    
    Table "FOO" created.
  • liquibase(lb) updatesql <CHANGE LOG> {include schema}

    特定の変更ログに適用されるSQL文を生成し、画面にレンダリングします。include schemaTRUEを渡すことにより、スキーマをDDLに含めることを選択できます。デフォルト値はFALSEです。

    例:
    SQL> lb updatesql syme_table.xml
    lb updatesql syme_table.xml
    
    CREATE TABLE "Syme"
       (    "ID" NUMBER
       ) SEGMENT CREATION DEFERRED
      PCTFREE 10 PCTUSED 40 INITRANS 1 NOCOMPRESS LOGGING
      TABLESPACE "SYSAUX"
  • liquibase(lb) rollback <CHANGE LOG> <COUNT>

    入力変更ログを使用して適用された最後の変更から開始して、変更をロールバックします。カウントは変更ログ内の変更数よりも大きくなる場合があります。999は最大サイズであり、すべての変更をロールバックします。

    例:
    SQL> lb rollback syme_table.xml 999
    lb rollback syme_table.xml 999
    Table "Syme" dropped.
  • liquibase(lb) diff <DEST URL> <DEST USER> <DEST PASS> {report}

    現在の接続と指定されたデータベースの差異を表示します。reportがtrueの場合、出力はテキスト・レポートの形式になります。reportがfalse (デフォルト)の場合、出力は変更ログの形式になります。

    宛先URLの形式は、HOST:PORT:SIDまたはHOST:PORT/SERVICEです。

    例:
    SQL> lb diff localhost:1521/pdb1 hr2 hr2
    lb diff localhost:1521/pdb1 hr2 hr2
    Action successfully completed please review created file diffResult.xml
    
    diffResult.xml
    <?xml version="1.1" encoding="UTF-8" standalone="no"?>
    <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext 
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd 
    http://www.liquibase.org/xml/ns/dbchangelog 
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
        <changeSet author="SKUTZ (generated)" id="1560183964715-1">
            <createTable tableName="DATABASECHANGELOG_EXPORT">
                <column name="RANK" type="NUMBER">
                    <constraints nullable="false"/>
                </column>
                <column name="TYPE" type="VARCHAR2(100 BYTE)">
                    <constraints primaryKey="true" 
                    primaryKeyName="DATABASECHANGELOG_EXPORT_PK"/>
                </column>
                <column name="SEQ" type="NUMBER">
                    <constraints primaryKey="true" 
                     primaryKeyName="DATABASECHANGELOG_EXPORT_PK"/>
                </column>
                <column name="META" type="CLOB">
                    <constraints nullable="false"/>
                </column>
                <column name="OBJECT_NAME" type="VARCHAR2(200 BYTE)"/>
                <column name="FILE_NAME" type="VARCHAR2(200 BYTE)"/>
                <column name="DEP_NAME" type="VARCHAR2(200 BYTE)"/>
                <column name="DEP_COUNT" type="NUMBER"/>
            </createTable>
        </changeSet>
        <changeSet author="SKUTZ (generated)" id="1560183964715-2">
            <addColumn tableName="EMPLOYEES">
                <column name="FOOBAR" type="NUMBER"/>
            </addColumn>
        </changeSet>
        <changeSet author="SKUTZ (generated)" id="1560183964715-3">
            <createIndex indexName="ORDERED_ROWS" tableName="DATABASECHANGELOG_EXPORT">
                <column name="RANK"/>
                <column name="SEQ"/>
            </createIndex>
        </changeSet>
        <changeSet author="SKUTZ (generated)" id="1560183964715-4">
            <createIndex indexName="TYPE_INDEX" tableName="DATABASECHANGELOG_EXPORT">
                <column name="TYPE"/>
            </createIndex>
        </changeSet>
    </databaseChangeLog>
    
    SQL> lb diff localhost:1521/pdb1 hr2 hr2 true
    lb diff localhost:1521/pdb1 hr2 hr2
    Action successfully completed please review created file diffResult.txt
    
    diffResult.txt
    Reference Database: HR @ jdbc:oracle:thin:@(DESCRIPTION =    (ADDRESS_LIST =      
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))    )    (CONNECT_DATA =      
    (SERVICE_NAME = pdb1)    )  ) (Default Schema: HR)
    Comparison Database: HR2 @ jdbc:oracle:thin:@localhost:1521/pdb1 (Default Schema: HR2)
    Compared Schemas: HR -> HR2
    Product Name: EQUAL
    Product Version: EQUAL
    Missing Catalog(s): NONE
    Unexpected Catalog(s): NONE
    Changed Catalog(s): NONE
    Missing Column(s): 
         HR.DATABASECHANGELOG_EXPORT.DEP_COUNT
         HR.DATABASECHANGELOG_EXPORT.DEP_NAME
         HR.DATABASECHANGELOG_EXPORT.FILE_NAME
         HR.EMPLOYEES.FOOBAR
         HR.DATABASECHANGELOG_EXPORT.META
         HR.DATABASECHANGELOG_EXPORT.OBJECT_NAME
         HR.DATABASECHANGELOG_EXPORT.RANK
         HR.DATABASECHANGELOG_EXPORT.SEQ
         HR.DATABASECHANGELOG_EXPORT.TYPE
    Unexpected Column(s): NONE
    Changed Column(s): NONE
    Missing Foreign Key(s): NONE
    Unexpected Foreign Key(s): NONE
    Changed Foreign Key(s): NONE
    Missing Index(s): 
         DATABASECHANGELOG_EXPORT_PK UNIQUE  ON HR.DATABASECHANGELOG_EXPORT(SEQ, TYPE)
         ORDERED_ROWS ON HR.DATABASECHANGELOG_EXPORT(RANK, SEQ)
         TYPE_INDEX ON HR.DATABASECHANGELOG_EXPORT(TYPE)
    Unexpected Index(s): NONE
    Changed Index(s): NONE
    Missing Primary Key(s): 
         DATABASECHANGELOG_EXPORT_PK on HR.DATABASECHANGELOG_EXPORT(SEQ, TYPE)
    Unexpected Primary Key(s): NONE
    Changed Primary Key(s): NONE
    Missing Sequence(s): NONE
    Unexpected Sequence(s): NONE
    Changed Sequence(s): NONE
    Missing Stored Procedure(s): NONE
    Unexpected Stored Procedure(s): NONE
    Changed Stored Procedure(s): NONE
    Missing Table(s): 
         DATABASECHANGELOG_EXPORT
    Unexpected Table(s): NONE
    Changed Table(s): NONE
    Missing Unique Constraint(s): NONE
    Unexpected Unique Constraint(s): NONE
    Changed Unique Constraint(s): NONE
    Missing View(s): NONE
    Unexpected View(s): NONE
    Changed View(s): NONE
    
  • liquibase(lb) status <CHANGE LOG>

    現在の接続を使用して変更ログのステータスを確認します。これは、変更ログが適用されたかどうか、および変更ログの結果を示します。

    例:
    SQL> lb status syme_table.xmllb status syme_table.xml1 change
    sets have not been applied to HR@jdbc:oracle:thin:@(DESCRIPTION =  (ADDRESS_LIST = (ADDRESS =
    (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT =  1521)) ) (CONNECT_DATA = (SERVICE_NAME = pdb1) )
    ) syme_table.xml::f3d9d927-3c5a-415c-a6fa-1dbc35a9da17::Generated
  • liquibase(lb) validate <CHANGE LOG>

    変更ログが構文的に正しいかどうかを検証します。

    例:
    SQL> lb validate syme_table.xml
    lb validate syme_table.xml
    
    No issues were found in file syme_table.xml, validation passed.
  • liquibase(lb) changelogsync <CHANGE LOG>

    データベースで実行された変更ログ内のすべての変更をファイルにマークするSQL文を書き込みます。

    例:
    SQL> lb changelogsync syme_table.xml
    lb changelogsync syme_table.xml
    Action successfully completed please review created file changelogsync_syme_table.xml
  • liquibase(lb) listlocks <CHANGE LOG>

    データベース変更ログを現在ロックしているユーザーがリストされます。

    例:
    SQL> lb listlocks syme_tbales.xml
    lb listlocks syme_tbales.xml
    
    ID     USER
    !1     Skutz-laptop (10.39.200.228)
  • liquibase(lb) releaselocks <CHANGE LOG>

    データベース変更ログのすべてのロックを解除します。

    例:
    SQL> lb releaselocks syme_table.xml
    lb releaselocks syme_table.xml
    
    Operation completed successfully all locks on syme_table.xml released
  • liquibase(lb) clearchecksums <CHANGE LOG>

    現在のチェックサムをデータベースから削除します。次回の実行では、チェックサムが再計算されます。

    例:
    SQL> lb clearchecksums syme_table.xml
    lb clearchecksums syme_table.xml
    
    Operation completed successfully all checksums cleared for syme_table.xml
  • liquibase(lb) help <COMMAND>

    使用可能なLiquibaseコマンドをリストします。特定のコマンドに関するヘルプを表示するには、オプションなしでコマンドを入力します。

    例:
    SQL> lb help
    
    lb help
    Provides a command line interface to Liquibase change management features from within SQLcl!
    Available commands are
    
    liquibase(lb) genobject <object_type> <object_name>
    liquibase(lb) genschema
    liquibase(lb) gencontrolfile
    liquibase(lb) update <CHANGE LOG> {include schema}
    liquibase(lb) updatesql <CHANGE LOG> {include schema}
    liquibase(lb) rollback <CHANGE LOG> <COUNT>
    liquibase(lb) diff <DEST URL> <DEST USER> <DEST PASS> {report}
    liquibase(lb) status <CHANGE LOG>
    liquibase(lb) validate <CHANGE LOG>
    liquibase(lb) changelogsync <CHANGE LOG>
    liquibase(lb) listlocks <CHANGE LOG>
    liquibase(lb) releaseLocks <CHANGE LOG>
    liquibase(lb) clearchecksums <CHANGE LOG>
    liquibase(lb) help <COMMAND>

2.5 変更セット

次の表に変更セットを示し、そのそれぞれについて説明します。変更セットの詳細は、<changeSet>タグを参照してください。

変更セット 説明
CreateOracleConstraint SQLから制約を作成します。
CreateOracleFunction SQLから関数を作成します。
CreateOracleGrant SQLから権限を作成します。
CreateOraclePackageBody SQLからパッケージ本体を作成します。
CreateOraclePackageSpec SQLからパッケージ仕様部を作成します。
CreateOracleProcedure SQLからプロシージャを作成します。
CreateOraclePublicSynonym SQLからパブリック・シノニムを作成します。
CreateOracleRefConstraint SQLから参照制約を作成します。
CreateOracleSynonym SQLからシノニムを作成します。
CreateOracleTrigger SQLからトリガーを作成します。
CreateOracleTypeBody SQLから型本体を作成します。
CreateOracleTypeSpec SQLから型指定を作成します。
CreateSxmlObject SQLから関数を作成します。
DropOracleConstraint 制約を削除します。
DropOracleFunction 関数を削除します。
DropOracleGrant 権限を削除します。
DropOraclePackageBody パッケージ本体を削除します。
DropOraclePackageSpec パッケージ仕様部を削除します。
DropOracleProcedure プロシージャを削除します。
DropOracleRefConstraint 参照制約を削除します。
DropOracleTrigger トリガーを削除します。
DropOracleTypeBody 型本体を削除します。
DropOracleTypeSpec 型指定を削除します。
DropOracleSynonym シノニムを削除します。
DropSxmlObject SXMLオブジェクトを削除します。オブジェクトがcreateSxmlObjectを介して作成された場合、オブジェクトは最後の状態にロールバックされます。作成されていなかった場合は削除されます。これは主にSXMLオブジェクトの処理のために内部的に使用されます。
RunOracleScript Oracleスクリプトを実行します。

2.6 Liquibaseを使用した例

オブジェクトの取得とデプロイ

emp表をhrからhr2にデプロイする手順は次のとおりです。:

  1. hrに接続します。
    SQL> connect hr/hr
    connect hr/hr
    Connected.
  2. オブジェクトを取得します。
    SQL> lb genobject table emp
    lb genobject table emp
    Action successfully completed please review created file emp_table.xml
  3. 他のユーザーに接続します。
    SQL> connect hr2/hr2
    connect hr2/hr2
    Connected.
  4. オブジェクトがまだ存在していないことを確認します。
    SQL> drop table emp
    drop table emp
    
    Table EMP dropped.
  5. 現在のスキーマにオブジェクトを作成します。

    注意:

    スキーマ名が変更されたため、include schemafalseに設定する必要があります。そうしないと、HRスキーマにオブジェクトを作成しようとします。
    SQL> lb update emp_table.xml false
    lb update emp_table.xml false
    
    Table "EMP" created.
  6. オブジェクトが作成されたことを検証します。
    SQL> desc emp 
    desc emp 
    Name Null? Type 
    ---- ----- ------ 
    ID NUMBER

スキーマの取得とデプロイ

HRスキーマを取得してHR2スキーマで再生成する手順は、次のとおりです。

sql.exe hr/hr@pdb1

SQL> lb genschema
lb genschema
[Type - TYPE_SPEC]: 142 ms
[Type - TYPE_BODY]: 27 ms
[Type - SEQUENCE]: 61 ms
[Type - CLUSTER]: 25 ms
[Type - TABLE]: 447 ms
[Type - MATERIALIZED_VIEW_LOG]: 18 ms
[Type - MATERIALIZED_VIEW]: 6 ms
[Type - VIEW]: 143 ms
[Type - REF_CONSTRAINT]: 261 ms
[Type - DIMENSION]: 17 ms
[Type - FUNCTION]: 63 ms
[Type - PROCEDURE]: 66 ms
[Type - PACKAGE_SPEC]: 29 ms
[Type - DB_LINK]: 19 ms
[Type - SYNONYM]: 19 ms
[Type - INDEX]: 199 ms
[Type - TRIGGER]: 39 ms
[Type - PACKAGE_BODY]: 39 ms
[Method loadCaptureTable]: 1620 ms
[Method parseCaptureTableRecords]: 6433 ms
[Method sortCaptureTable]: 25 ms
[Method createExportChangeLogs]: 3 ms

Export Flags Used:
Export Grants false
Export Synonyms false

SQL> connect system/sparrow
connect system/sparrow
Connected.

setup the hr2 user --

drop user hr2 cascade;
create user hr2 identified by hr2;
grant connect,resource, create view to hr2;
alter user hr2 quota unlimited on users;
alter user hr2 quota unlimited on sysaux;

SQL> connect hr2/hr2
connect hr2/hr2
Connected.

SQL> lb update controller.xml
lb update controller.xml

Sequence "DEPARTMENTS_SEQ" created.

Sequence "LOCATIONS_SEQ" created.

Sequence "EMPLOYEES_SEQ" created.

Table "COUNTRIES" created.

Table "REGIONS" created.

Table "LOCATIONS" created.

Table "DEPARTMENTS" created.

Table "JOBS" created.

Table "EMPLOYEES" created.

Table "JOB_HISTORY" created.

Table "Syme" created.

Table "FOO" created.

View "EMP_DETAILS_VIEW" created.

Table "COUNTRIES" altered.

Table "LOCATIONS" altered.

Table "DEPARTMENTS" altered.

Table "EMPLOYEES" altered.

Table "EMPLOYEES" altered.

Table "EMPLOYEES" altered.

Table "DEPARTMENTS" altered.

Table "JOB_HISTORY" altered.

Table "JOB_HISTORY" altered.

Table "JOB_HISTORY" altered.

Function FUNCTION1 compiled

Procedure SECURE_DML compiled

Procedure ADD_JOB_HISTORY compiled

Procedure PROCEDURE1 compiled

Index "LOC_COUNTRY_IX" created.

Index "JHIST_JOB_IX" created.

Index "LOC_STATE_PROVINCE_IX" create.

Index "EMP_DEPARTMENT_IX" created.

Index "JHIST_EMPLOYEE_IX" created.

Index "LOC_CITY_IX" created.

Index "JHIST_DEPARTMENT_IX" created.

Index "EMP_JOB_IX" created.

Index "EMP_MANAGER_IX" created.

Index "EMP_NAME_IX" created.

Index "DEPT_LOCATION_IX" created.

Trigger SECURE_EMPLOYEES compiled

Trigger "SECURE_EMPLOYEES" altered.

Trigger UPDATE_JOB_HISTORY compiled

マスター制御ファイルの生成

SQL> lb gencontrolfile
lb gencontrolfile
Action successfully completed please review created file controller.xml

SQL> !type controller.xml
!type controller.xml
<?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"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<include file="{filename.xml}"/>
</databaseChangeLog>

スキーマの取得とデプロイおよびその後のアップグレードと再デプロイ

  1. HRスキーマをHR2スキーマに移行し、HRスキーマを変更してHR2を更新します。
    Drop/create HR2 user as system
    
    SQL> connect system/sparrow 
    connect system/sparrow 
    Connected. 
    SQL> drop user hr2 cascade;  
     
    User HR2 dropped. 
     
    SQL> create user hr2 identified by hr2; 
     
    User HR2 created. 
     
    SQL> grant connect,resource, create view to hr2; 
     
    Grant succeeded. 
     
    SQL> alter user hr2 quota unlimited on users; 
     
    User HR2 altered. 
     
    SQL> 
    alter user hr2 quota unlimited on sysaux; 
     
    User HR2 altered. 
    
    SQL> !mkdir v1 
    !mkdir v1 
     
    SQL> cd v1 
    cd v1 
    SQL> connect hr/hr 
    connect hr/hr 
    Connected. 
    
    SQL> lb genschema 
    lb genschema 
    [Type - TYPE_SPEC]: 163 ms 
    [Type - TYPE_BODY]: 30 ms 
    [Type - SEQUENCE]: 57 ms 
    [Type - CLUSTER]: 27 ms 
    [Type - TABLE]: 311 ms 
    [Type - MATERIALIZED_VIEW_LOG]: 19 ms 
    [Type - MATERIALIZED_VIEW]: 8 ms 
    [Type - VIEW]: 155 ms 
    [Type - REF_CONSTRAINT]: 293 ms 
    [Type - DIMENSION]: 29 ms 
    [Type - FUNCTION]: 77 ms 
    [Type - PROCEDURE]: 65 ms 
    [Type - PACKAGE_SPEC]: 31 ms 
    [Type - DB_LINK]: 13 ms 
    [Type - SYNONYM]: 18 ms 
    [Type - INDEX]: 188 ms 
    [Type - TRIGGER]: 41 ms 
    [Type - PACKAGE_BODY]: 37 ms 
    [Method loadCaptureTable]: 1562 ms 
    [Method parseCaptureTableRecords]: 8437 ms 
    [Method sortCaptureTable]: 37 ms 
    [Method createExportChangeLogs]: 4 ms 
     
    Export Flags Used: 
    Export Grants false 
    Export Synonyms false 
  2. HRスキーマを変更します。
    SQL> ALTER TABLE COUNTRIES ADD (COLUMN1 VARCHAR2(20) ); 
    
    Table COUNTRIES altered. 
     
    SQL> ALTER TABLE "Syme" ADD (COLUMN1 VARCHAR2(20) ); 
     
    Table "Syme" altered. 
     
    SQL> ALTER TABLE "Syme" ADD (COLUMN2 VARCHAR2(20) ); 
     
    Table "Syme" altered. 
     
    SQL> ALTER TABLE "Syme" ADD (COLUMN3 VARCHAR2(20) ); 
     
    Table "Syme" altered. 
     
    SQL> CREATE VIEW VIEW1 AS SELECT * FROM "Syme"; 
     
    View VIEW1 created. 
     
    SQL> CREATE OR REPLACE PROCEDURE PROCEDURE2 (PARAM1 IN VARCHAR2,PARAM2 IN VARCHAR2,PARAM3 IN VARCHAR2, PARAM4 IN VARCHAR
    2) AS BEGIN NULL; END PROCEDURE2; 
     
    Procedure PROCEDURE2 compiled 
  3. v2ディレクトリに変更を加えます。
    SQL> cd .. 
    cd .. 
    SQL> !mkdir v2 
    !mkdir v2 
     
    SQL> cd v2 
    cd v2 
    S
  4. HRスキーマのv2をエクスポートします。
    SQL> lb genschema 
    lb genschema 
    [Type - TYPE_SPEC]: 44 ms 
    [Type - TYPE_BODY]: 30 ms 
    [Type - SEQUENCE]: 51 ms 
    [Type - CLUSTER]: 26 ms 
    [Type - TABLE]: 447 ms 
    [Type - MATERIALIZED_VIEW_LOG]: 13 ms 
    [Type - MATERIALIZED_VIEW]: 6 ms 
    [Type - VIEW]: 110 ms 
    [Type - REF_CONSTRAINT]: 258 ms 
    [Type - DIMENSION]: 16 ms 
    [Type - FUNCTION]: 56 ms 
    [Type - PROCEDURE]: 62 ms 
    [Type - PACKAGE_SPEC]: 29 ms 
    [Type - DB_LINK]: 12 ms 
    [Type - SYNONYM]: 13 ms 
    [Type - INDEX]: 205 ms 
    [Type - TRIGGER]: 39 ms 
    [Type - PACKAGE_BODY]: 34 ms 
    [Method loadCaptureTable]: 1451 ms 
    [Method parseCaptureTableRecords]: 7015 ms 
    [Method sortCaptureTable]: 23 ms 
    [Method createExportChangeLogs]: 4 ms 
     
    Export Flags Used: 
    Export Grants false 
    Export Synonyms false 
  5. v1をインポートするには、v1ディレクトリに戻ってHR2として接続します。
    SQL> cd ../v1 
    cd ../v1 
    SQL> connect hr2/hr2 
    connect hr2/hr2 
    Connected. 
  6. 次に、HR2スキーマに取得をインポートします。
    SQL> lb update controller.xml 
    lb update controller.xml  
    Sequence "DEPARTMENTS_SEQ" created. 
    Sequence "LOCATIONS_SEQ" created. 
    Sequence "EMPLOYEES_SEQ" created. 
    Table "COUNTRIES" created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "REGIONS" created. 
    Table "LOCATIONS" created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "DEPARTMENTS" created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "JOBS" created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "EMPLOYEES" created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "JOB_HISTORY" created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "Syme" created. 
    Table "FOO" created. 
    View "EMP_DETAILS_VIEW" created. 
    Table "COUNTRIES" altered. 
    Table "LOCATIONS" altered. 
    Table "DEPARTMENTS" altered. 
    Table "EMPLOYEES" altered. 
    Table "EMPLOYEES" altered. 
    Table "EMPLOYEES" altered. 
    Table "DEPARTMENTS" altered. 
    Table "JOB_HISTORY" altered. 
    Table "JOB_HISTORY" altered. 
    Table "JOB_HISTORY" altered. 
    Function FUNCTION1 compiled 
    Procedure SECURE_DML compiled 
    Procedure ADD_JOB_HISTORY compiled 
    Procedure PROCEDURE1 compiled 
    Index "LOC_COUNTRY_IX" created. 
    Index "JHIST_JOB_IX" created. 
    Index "LOC_STATE_PROVINCE_IX" created. 
    Index "EMP_DEPARTMENT_IX" created. 
    Index "JHIST_EMPLOYEE_IX" created. 
    Index "LOC_CITY_IX" created. 
    Index "JHIST_DEPARTMENT_IX" created. 
    Index "EMP_JOB_IX" created. 
    Index "EMP_MANAGER_IX" created. 
    Index "EMP_NAME_IX" created. 
    Index "DEPT_LOCATION_IX" created. 
    Trigger SECURE_EMPLOYEES compiled 
    Trigger "SECURE_EMPLOYEES" altered. 
    Trigger UPDATE_JOB_HISTORY compiled 
  7. 表を確認して検証します。
    SQL> desc "Syme" 
    desc "Syme" 
    Name Null? Type 
    ---- ----- ------ 
    ID NUMBER 
    SQL> desc countries 
    desc countries 
    Name Null? Type 
    ------------ -------- ------------ 
    COUNTRY_ID NOT NULL CHAR(2) 
    COUNTRY_NAME VARCHAR2(40) 
    REGION_ID NUMBER 
  8. v2に切り替えて、取得をインポートします。
    SQL> cd ../v2 
    cd ../v2 
    SQL> lb update controller.xml 
    lb update controller.xml 
    Table "HR2"."COUNTRIES" altered. 
    Table "HR2"."COUNTRIES" altered. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "HR2"."LOCATIONS" altered. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "HR2"."DEPARTMENTS" altered. 
    Table "HR2"."DEPARTMENTS" altered. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "HR2"."EMPLOYEES" altered. 
    Table "HR2"."EMPLOYEES" altered. 
    Table "HR2"."EMPLOYEES" altered. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "HR2"."JOB_HISTORY" altered. 
    Table "HR2"."JOB_HISTORY" altered. 
    Table "HR2"."JOB_HISTORY" altered. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Comment created. 
    Table "HR2"."Syme" altered. 
    Table "HR2"."Syme" altered. 
    Table "HR2"."Syme" altered. 
    View "VIEW1" created. 
    Table "COUNTRIES" altered. 
    Table "LOCATIONS" altered. 
    Table "DEPARTMENTS" altered. 
    Table "EMPLOYEES" altered. 
    Table "EMPLOYEES" altered. 
    Table "EMPLOYEES" altered. 
    Table "DEPARTMENTS" altered. 
    Table "JOB_HISTORY" altered. 
    Table "JOB_HISTORY" altered. 
    Table "JOB_HISTORY" altered. 
    Function FUNCTION1 compiled 
    Procedure SECURE_DML compiled 
    Procedure ADD_JOB_HISTORY compiled 
    Procedure PROCEDURE1 compiled 
    Procedure PROCEDURE2 compiled 
    Trigger SECURE_EMPLOYEES compiled 
    Trigger UPDATE_JOB_HISTORY compiled
  9. v2にいることを確認します。
    SQL> desc "Syme" 
    desc "Syme" 
    Name Null? Type 
    ------- ----- ------------ 
    ID NUMBER 
    COLUMN1 VARCHAR2(20) 
    COLUMN2 VARCHAR2(20) 
    COLUMN3 VARCHAR2(20) 
    SQL> desc countries 
    desc countries 
    Name Null? Type 
    ------------ -------- ------------ 
    COUNTRY_ID NOT NULL CHAR(2) 
    COUNTRY_NAME VARCHAR2(40) 
    REGION_ID NUMBER 
    COLUMN1 VARCHAR2(20)