14 Autonomous Data Warehouseイベント・ハンドラの使用

Oracle Autonomous Data Warehouse (ADW)は、市場をリードするOracle Databaseのパフォーマンスを備え、データ・ウェアハウスのワークロード用にチューニングおよび最適化された完全に管理されたデータベースです。

14.1 詳細な機能

ADWイベント・ハンドラは、OCI Object Storageイベント・ハンドラの出力に接続されたダウンストリーム・イベント・ハンドラとして使用されます。OCIイベント・ハンドラは、ファイル・ライター・ハンドラによって生成されたファイルをOracle OCI Object Storageにロードします。すべてのSQL操作は、スループットを改善するためにバッチで実行されます。

14.2 OCI ObjectStoreファイルにアクセスするためのADWデータベース資格証明

OCI ObjectStoreファイルにアクセスするには、次の手順を実行します。

  1. Oracle Cloud Infrastructure (OCI) Object Storeファイルにアクセスするための資格証明を作成するために、PL/SQLプロシージャを実行する必要があります。
  2. OCI認証トークンは、OCIコンソールの「ユーザー設定」で生成する必要があります。Oracle Autonomous Data Warehouse on Shared Exadata Infrastructureの使用CREATE_CREDENITALを参照してください。たとえば:
    BEGIN  DBMS_CLOUD.create_credential
          (    credential_name =>
            ‘OGGBD-CREDENTIAL',    username => 'oci-user',    password =>
            ‘oci-auth-token');
            END;
            /
  3. 資格証明名は、gg.eventhandler.adw.objectStoreCredentialプロパティを使用して構成できます。たとえば、gg.eventhandler.adw.objectStoreCredential=OGGBD-CREDENTIALです。

14.3 ADWデータベース・ユーザーの権限

ADWデータベースには、DWROLEという名前の事前定義済データベース・ロールが付属しています。ADWのadminユーザーが使用されていない場合は、データベース・ユーザーにロールDWROLEを付与する必要があります。

このロールにより、データ・ウェアハウス操作に必要な権限が付与されます。たとえば、次のコマンドはユーザーdbuser-1DWROLEを付与します。

GRANT DWROLE TO dbuser-1;

ノート:

ADWのレプリケーションにはOracleが作成したデータベース・ユーザーggadminを使用しないでください。このユーザーにはINHERIT権限がないためです。

14.4 サポートされていない操作/制限事項

  • DDLの変更はサポートされません。
  • Oracleオブジェクト・データ型のレプリケーションはサポートされていません。
  • GoldenGate証跡がOracle統合取得によって生成される場合、ソースLOB列に対するUPDATE操作については、LOBの変更部分のみが証跡ファイルに書き込まれます。Oracle GoldenGate for Big Data Autonomous Data Warehouse (ADW)適用では、証跡ファイル内の一部のLOB列のレプリケーションがサポートされません。

14.5 トラブルシューティングと診断

  • ADWへの接続の問題
    • JDBC接続URL、ユーザー名およびパスワードを検証してください。
    • http/httpsプロキシが有効かどうか確認します。ADWのプロキシ構成を参照してください(Oracle Autonomous Data Warehouse on Shared Exadata Infrastructureの使用Oracle Call Interface (OCI)、ODBCおよびJDBC OCI接続の準備)。
  • DDLがターゲット表に適用されていません: ADWハンドラはDDLを無視します。
  • ターゲット表の存在: 適用プロセスを開始する前に、ADWターゲット表が存在している必要があります。ターゲット表は、適切な主キー、索引およびパーティションを使用して設計する必要があります。証跡ファイルの列メタデータに基づいた近似処理が常に正確であるとはかぎりません。したがって、ターゲット表が欠落している場合、Replicatが異常終了(ABEND)します。
  • 適用プロセスに関する診断スループット情報は、ハンドラのログ・ファイルに記録されます

    たとえば:

    File Writer finalized 29525834 records
            (rate: 31714) (start time: 2020-02-10 01:25:32.000579) (end time: 2020-02-10
            01:41:03.000606).

    このサンプル・ログ・メッセージの内容は次のとおりです。

    • このメッセージは、ファイル・ライター・ハンドラおよびダウンストリーム・イベント・ハンドラ(OCIイベント・ハンドラおよびADWイベント・ハンドラ)のエンド-エンド・スループットの詳細を示しています。
    • スループット率では、ファイルをロールオーバーする前に発生した待機時間も考慮されます。
    • スループット率では、OCIイベント・ハンドラおよびADWイベント・ハンドラの操作の処理にかかった時間も考慮されます。
    • 前述の例は、29525834個の操作が開始時間[2020-02-10 01:25:32.000579]と終了時間[2020-02-10 01:41:03.000606]の間に31714個の操作/秒の速度でファイナライズされたことを示しています。
    例:
     
    INFO 2019-10-01 00:36:49.000490 [pool-8-thread-1] – Begin DWH Apply stage and load statistics
    ********START*********************************
         
    INFO 2019-10-01 00:36:49.000490 [pool-8-thread-1] - Time spent for staging process [2074 ms] 
    INFO 2019-10-01 00:36:49.000490 [pool-8-thread-1] - Time spent for merge process [992550 ms] 
    INFO 2019-10-01 00:36:49.000490 [pool-8-thread-1] - [31195516] operations processed, rate[31,364]operations/sec. 
            
    INFO 2019-10-01 00:36:49.000490 [pool-8-thread-1] – End DWH Apply stage and load statistics 
    ********END*********************************** 
    INFO 2019-10-01 00:37:18.000230 [pool-6-thread-1] – Begin OCI Event handler upload statistics 
    ********START********************************* 
    INFO 2019-10-01 00:37:18.000230 [pool-6-thread-1] - Time spent loading files into ObjectStore [71789 ms]
    INFO 2019-10-01 00:37:18.000230 [pool-6-thread-1] - [31195516] operations processed, rate[434,545] operations/sec. 
    INFO 2019-10-01 00:37:18.000230 [pool-6-thread-1] – End OCI Event handler upload statistics 
    ********END***********************************

    この例の詳細は次のとおりです。

    ADWイベント・ハンドラのスループット:

    • 前述のログ・メッセージでは、ADWイベント・ハンドラの統計はDWH Apply stage and load statisticsとして報告されています。ADWはデータ・ウェアハウス(DWH)として分類されるため、この名前になります。
    • ここでは、ソース証跡ファイルの31195516個の操作が、31364個の操作/秒の速度でADWデータベースに適用されました。
    • ADWでは、ステージおよびマージが使用されます。ステージングに要した時間は2074ミリ秒で、SQLのマージの実行に要した時間は992550ミリ秒です。
    OCIイベント・ハンドラのスループット:
    • 前述のログ・メッセージでは、OCIイベント・ハンドラの統計はOCI Event handler upload statisticsとして報告されています。
    • ここでは、ソース証跡ファイルの31195516個の操作が、434545個の操作/秒の速度でOCIオブジェクト・ストアにアップロードされました。
  • ADW資格証明にOCIオブジェクト・ストア・ファイルの読取り権限の付与が欠落しているために発生するエラー:
    • 認可失敗を示すSQL例外がハンドラのログ・ファイルに記録されます。たとえば:
      java.sql.SQLException: ORA-20401: 
      Authorization failed for URI - 
      https://objectstorage.us-ashburn-1.oraclecloud.com/n/some_namespace/b/some_bucket/o/ADMIN.NLS_AllTypes/ADMIN.NLS_AllTypes_2019-12-16_11-44-01.237.avro
  • ファイル形式/列データのエラー:

    ADWイベント・ハンドラが列データ・エラーのために外部ステージング表からデータを読み取ることができない場合、Oracle GoldenGate for Big Dataハンドラのログ・ファイルは問題をデバッグするための診断情報を提供します。

    ログ・ファイルでは次の詳細を入手できます。

    • JOB ID
    • SID
    • SERIAL #
    • ROWS_LOADED
    • START_TIME
    • UPDATE_TIME
    • STATUS
    • TABLE_NAME
    • OWNER_NAME
    • FILE_URI_LIST
    • LOGFILE_TABLE
    • BADFILE_TABLE

    LOGFILE_TABLEおよびBADFILE_TABLEの内容は、特定のレコードと、エラーが発生したレコード内の列およびエラーの原因を示します。また、この情報はADWイベント・ハンドラによって自動的に問い合せられ、OGGBD FWハンドラのログ・ファイルに記録されます。エラーの根本原因に基づいて、顧客はアクションを実行できます。多くの場合、顧客は、ソース列のデータ型に基づいてターゲット表の定義を変更し、Replicatを再起動する必要があります。それ以外の場合は、Replicat prmファイルのマッピングを変更することもできます。この場合、Replicatを再配置して最初から開始することをお薦めします。

  • その他のSQLエラー:

    SQLの実行中にエラーが発生した場合は、バインド・パラメータ値に加えてSQL文全体がOGGBDハンドラのログ・ファイルに記録されます。

  • コンポーネントの共存:

    Replicatプロセスが実行されているマシンの場所/リージョン、OCI Object Storageバケット・リージョンおよびADWリージョンは、適用プロセスの全体的なスループットに影響を与えます。データ・フローは、GoldenGate  OCI Object Store  ADWです。最高のスループットを得るには、コンポーネントをできるだけ近くに配置する必要があります。

  • ターゲット表での行数の不一致のデバッグ

    スループットを向上させるために、ADWイベント・ハンドラはターゲット表で変更された行数を検証しません。Javaシステム・プロパティdisable.row.count.validationを使用して、行数の一致を有効にできます。行数の検証を有効にするには、次のようにこのプロパティをjvm.bootoptionsに指定します(jvm.bootoptions=-Xmx512m -Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm -Ddisable.row.count.validation=false)

  • 証跡ファイルのLOBレコードの一部が原因のReplicatの異常終了(ABEND):

    Oracle GoldenGate for Big Data ADW適用では、一部のLOBのレプリケーションはサポートされません。Extractパラメータ・ファイルでTRANLOGOPTIONS FETCHPARTIALLOBオプションを使用して、Oracle統合取得によって証跡ファイルを再生成する必要があります。

  • 非圧縮のUPDATE証跡によるスループットの向上:

    ソース証跡ファイルに更新される行の完全イメージ(各表のすべての列値)が含まれている場合は、JVMのブート・オプション-Dcompressed.update=falseを構成プロパティjvm.bootoptionsに含めることができます。

    特定のワークロードおよびADWインスタンス・シェイプでは、この構成によりスループットが向上する場合があります。使用している環境でスループットの向上をテストする必要がある場合があります。

14.6 クラスパス

ADW適用は、アップストリームのファイル・ライター・ハンドラとOCIイベント・ハンドラに依存します。OCIイベント・ハンドラを実行するために必要なjarをgg.classpathに含めます。

ADWイベント・ハンドラは、Oracle JDBCドライバとその依存性を使用します。Autonomous Data Warehouse JDBCドライバおよびその他の必要な依存性は、Oracle GoldenGate for Big Dataにパッケージ化されています。

たとえば: gg.classpath=./oci-java-sdk/lib/*:./oci-java-sdk/third-party/lib/*

14.7 構成

14.7.1 自動構成

Autonomous Data Warehouse (ADW)のレプリケーションには、ファイル・ライター・ハンドラ、OCIイベント・ハンドラ、ADWイベント・ハンドラなどの複数のコンポーネントの構成が含まれます。

自動構成機能は、ユーザー構成が最小限になるようにこれらのコンポーネントを自動構成するのに役立ちます。自動構成によって変更されたプロパティもハンドラのログ・ファイルに記録されます。

ADWターゲットに自動構成を複製できるようにするには、パラメータを設定する必要があります

gg.target=adw

gg.target
Required
Legal Value: adw
Default:  None
Explanation: Enables replication to ADW target

ADWターゲットに複製する場合、OCIイベント・ハンドラ名およびADWイベント・ハンドラ名はカスタマイズできません。

14.7.2 ファイル・ライター・ハンドラの構成

ファイル・ライター・ハンドラ名は、値adwに事前設定されています。ファイル・ライター・ハンドラのプロパティを編集する例を次に示します。gg.handler.adw.pathMappingTemplate=./dirout

14.7.3 OCIイベント・ハンドラの構成

OCIイベント・ハンドラ名は、値ociに事前設定されています。

OCIイベント・ハンドラのプロパティを編集する例を次に示します。gg.eventhandler.oci.profile=DEFAULT

14.7.4 ADWイベント・ハンドラの構成

ADWイベント・ハンドラ名は、値adwに事前設定されています。

ADWイベント・ハンドラの構成は次のとおりです。

gg.eventhandler.adw.connectionURL
Required
Legal Value:  ADW
JDBC connection URL.
Default: none
Explanation: Sets the ADW JDBC connection URL.
Example: jdbc:oracle:thin:@adw20190410ns_medium?TNS_ADMIN=/home/sanav/projects/adw/wallet
gg.eventhandler.adw.UserName
Required
Legal Value:  JDBC User name.
Default:  none
Explanation:  Sets the ADW database user name
gg.eventhandler.adw.Password
Required
Legal Value:  JDBC Password.
Default:  none
Explanation:  Sets the ADW database password.
gg.eventhandler.adw.maxStatements
Optional
Legal Values: Integer value between 1 to 250.
Default:  The default value is 250.
Explanation:  Use this parameter to control the number of prepared SQL statements that can be used. 
gg.eventhandler.adw.maxConnnections
Optional
Legal Values: Integer value.
Default: 10
Explanation:  Use this parameter to control the number of concurrent JDBC database connections to the target ADW database. 
gg.eventhandler.adw.dropStagingTablesOnShutdown
Optional
Legal Value:  true | false
Default:  false
Explanation:  If set to true, the temporary staging tables created by the ADW event handler will be dropped on replicat graceful stop.
gg.eventhandler.adw.objectStoreCredential
Required
Legal Value:  A database credential name.
Default: none
Explanation: ADW Database credential to access OCI object-store files.

14.7.5 エンドツーエンドの構成

FWハンドラ、OCIおよびADWイベント・ハンドラの自動構成を使用するエンド-エンド構成の例を次に示します。このサンプル・プロパティ・ファイルは、OGGBD_InstallDir/AdapterExamples/big-data/adw-via-oci/adw.propsにもあります

# Configuration to load GoldenGate trail operation records
# into Autonomous Data Warehouse (ADW) by chaining
# File writer handler -> OCI Event handler -> ADW Event handler.
# Note: Recommended to only edit the configuration marked as TODO
gg.target=adw
##The OCI Event handler
# TODO: Edit the OCI config file path.
gg.eventhandler.oci.configFilePath=<path/to/oci/config>
# TODO: Edit the OCI profile name.
gg.eventhandler.oci.profile=DEFAULT
# TODO: Edit the OCI namespace.
gg.eventhandler.oci.namespace=<OCI namespace>
# TODO: Edit the OCI region.
gg.eventhandler.oci.region=<oci-region>
# TODO: Edit the OCI compartment identifier.
gg.eventhandler.oci.compartmentID=<OCI compartment id>
gg.eventhandler.oci.pathMappingTemplate=${fullyQualifiedTableName}
# TODO: Edit the OCI bucket name.
gg.eventhandler.oci.bucketMappingTemplate=<ogg-bucket>
##The ADW Event Handler
# TODO: Edit the ADW JDBC connectionURL
gg.eventhandler.adw.connectionURL=jdbc:oracle:thin:@adw20190410ns_medium?TNS_ADMIN=/path/to/ /adw/wallet
# TODO: Edit the ADW JDBC user
gg.eventhandler.adw.UserName=<db user>
# TODO: Edit the ADW JDBC password
gg.eventhandler.adw.Password=<db password>
# TODO: Edit the ADW Credential that can access the OCI Object Store.
gg.eventhandler.adw.objectStoreCredential=<ADW Object Store credential>
# TODO:Set the classpath to include OCI Java SDK.
gg.classpath=./oci-java-sdk/lib/*:./oci-java-sdk/third-party/lib/*
#TODO: Edit to provide sufficient memory (at least 8GB).
jvm.bootoptions=-Xmx8g -Xms8g