9 Oracle Cloud Infrastructureイベント・ハンドラの使用
Oracle Cloud Infrastructureイベント・ハンドラを使用して、ファイル・ライター・ハンドラによって生成されたファイルをOracle Cloud Infrastructureオブジェクト・ストアにロードします。
このトピックでは、OCIイベント・ハンドラの使用方法について説明します。
9.1 概要
Oracle Cloud Infrastructure Object Storageサービスは、信頼性およびコスト効率が高いデータ耐久性を実現するインターネット規模の高パフォーマンス・ストレージ・プラットフォームです。Object Storageサービスは、分析データやリッチ・コンテンツ(イメージやビデオなど)を含め、あらゆるコンテンツ・タイプの非構造化データを無制限に格納できます。https://cloud.oracle.com/en_US/cloud-infrastructureを参照してください。
ファイル・ライター・ハンドラでサポートされるフォーマット・ハンドラはすべて使用できます。
9.2 機能の詳細
Oracle Cloud Infrastructureイベント・ハンドラには、Oracle Cloud Infrastructure Object Storageにファイルを転送するためのOracle Cloud Infrastructure Javaソフトウェア開発キット(SDK)が必要です。Oracle GoldenGate for Big Dataには、Oracle Cloud Infrastructure Java SDKが付属していません。 https://docs.cloud.oracle.com/iaas/Content/API/Concepts/sdkconfig.htmを参照してください。
Oracle Cloud Infrastructure Java SDKは、次の場所でダウンロードする必要があります。
https://docs.us-phoenix-1.oraclecloud.com/Content/API/SDKDocs/javasdk.htm
JARファイルを永続ディレクトリに解凍します。ハンドラには、Oracle Cloud Infrastructure SDK JARがあるJARライブラリ・ディレクトリとサード・パーティのJARライブラリの2つのディレクトリが必要です。両方のディレクトリは、gg.classpath
にある必要があります。
環境変数gg.classpath
を指定し、Oracle Cloud Infrastructure Java SDKのJARファイルを含めます。
9.3 Oracle Cloud Infrastructureイベント・ハンドラの構成
Oracle Cloud Infrastructureイベント・ハンドラの操作は、プロパティ・ファイルを使用して構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。
Oracle Cloud Infrastructureイベント・ハンドラは、ファイル・ライター・ハンドラとの組合せでのみ機能します。
Oracle Cloud Infrastructureイベント・ハンドラの選択を有効にするには、まずgg.eventhandler.name.type=oci
およびその他のOracle Cloud Infrastructureプロパティを次のように指定してハンドラ・タイプを構成する必要があります。
表9-1 Oracle Cloud Infrastructureイベント・ハンドラの構成プロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
|
なし |
Oracle Cloud Infrastructureイベント・ハンドラを選択します。 |
gg.eventhandler.name.contentType |
オプション | リソースのメディア・タイプを示すために使用される有効なコンテンツ・タイプ値。 | application/octet-stream |
オブジェクトのコンテンツ・タイプ。 |
gg.eventhandler.name.contentEncoding |
オプション | 有効な値は、適用されるエンコーディングを示します。 | utf-8 | オブジェクトのコンテンツ・エンコーディング。 |
gg.eventhandler.name.contentLanguage |
オプション | 利用者のための有効な言語。 | en | オブジェクトのコンテンツ言語。 |
|
必須 |
イベント・ハンドラの |
なし |
構成ファイルの名前および場所。 |
|
必須 |
プロファイル名を表す有効な文字列。 |
なし |
Oracle Cloud Infrastructureの |
|
必須 |
Oracle Cloud Infrastructureのネームスペース。 |
なし |
ネームスペースは、すべてのバケットおよびオブジェクトの最上位レベルのコンテナとして機能し、ユーザーのテナント内のバケット命名を制御できます。オブジェクト・ストレージのネームスペースは、アカウントの作成時に割り当てられるシステム生成文字列です。ネームスペース文字列は、Oracle Cloud Infrastructureコンソールの使用中に「Object Storage Settings」に示されます。 |
|
必須 |
Oracle Cloud Infrastructureのリージョン。 |
なし |
Oracle Cloud Infrastructureのサーバーおよびデータはリージョンでホストされ、ローカライズされた地理的領域です。 有効なリージョン識別子は、「Oracle Cloud Infrastructure Documentation - Regions and Availability Domains」に一覧表示されています。 |
|
必須 |
有効なコンパートメントID。 |
なし |
コンパートメントは、Oracle Cloud Infrastructureのリソースを編成するための論理コンテナです。 |
|
必須 |
ファイルを書き込むOracle Cloud Infrastructureバケットのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 |
なし |
定数とともにインタレースされるキーワードを使用して、実行時に一意のOracle Cloud Infrastructureパス名を動的に生成します。 |
|
オプション |
実行時にOracle Cloud Infrastructureファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 |
なし |
解決可能なキーワードと定数を使用して、実行時にOracle Cloud Infrastructureデータ・ファイル名を動的に生成します。設定しない場合、アップストリームのファイル名が使用されます。 |
|
必須 |
ファイルを書き込むOracle Cloud Infrastructureバケットのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 |
なし |
解決可能なキーワードと定数を使用して、実行時にOracle Cloud Infrastructureバケット名を動的に生成します。Oracle Cloud Infrastructureバケットが存在しない場合、イベント・ハンドラはOracle Cloud Infrastructureバケットを作成しようとします。 |
|
オプション |
|
なし |
ファイナライズ・アクションでOracle Cloud Infrastructureデータ・ファイルを残す場合は、 |
|
オプション |
子イベント・ハンドラを相互参照する一意の文字列識別子。 |
イベント・ハンドラは構成されません。 |
ファイル・ロール・イベントで呼び出されるイベント・ハンドラを設定します。イベント・ハンドラは、S3へのファイルのロード、ParquetまたはORCフォーマットへの変換、HDFSへのファイルのロード、Oracle Cloud Infrastructure Storage Classicへのファイルのロード、Oracle Cloud Infrastructureへのファイルのロードなどのファイル・ロール・イベント・アクションを実行できます。 |
gg.eventhandler.name.proxyServer |
オプション | プロキシ・サーバーのホスト名。 | なし | OCI接続でプロキシ・サーバーを介したルーティングが必要な場合は、プロキシ・サーバーのホスト名に設定します。 |
gg.eventhandler.name.proxyPort |
オプション | プロキシ・サーバーのポート番号。 | なし | OCI接続でプロキシ・サーバーを介したルーティングが必要な場合は、プロキシ・サーバーのポート番号に設定します。 |
gg.eventhandler.name.proxyProtocol |
オプション |
HTTP | HTTPS |
HTTP |
セキュリティ・レベルの追加のためにプロキシ・サーバーへのプロキシ・プロトコル接続を設定します。プロキシ・サーバーの大部分はHTTPをサポートしています。プロキシ・サーバーがHTTPSをサポートし、HTTPSが必要な場合にのみこれを設定します。 |
gg.eventhandler.name.proxyUsername |
オプション | プロキシ・サーバーのユーザー名。 | なし | 資格証明が必要な場合、プロキシ・サーバーに接続するためのユーザー名を設定します。ほとんどのプロキシ・サーバーでは、資格証明は必要ありません。 |
gg.eventhandler.name.proxyPassword |
オプション | プロキシ・サーバーのパスワード。 | なし | 資格証明が必要な場合、プロキシ・サーバーに接続するためのパスワードを設定します。ほとんどのプロキシ・サーバーでは、資格証明は必要ありません。 |
サンプル構成
gg.eventhandler.oci.type=oci gg.eventhandler.oci.configFilePath=~/.oci/config gg.eventhandler.oci.profile=DEFAULT gg.eventhandler.oci.namespace=dwcsdemo gg.eventhandler.oci.region=us-ashburn-1 gg.eventhandler.oci.compartmentID=ocid1.compartment.oc1..aaaaaaaajdg6iblwgqlyqpegf6kwdais2gyx3guspboa7fsi72tfihz2wrba gg.eventhandler.oci.pathMappingTemplate=${schemaName} gg.eventhandler.oci.bucketMappingTemplate=${schemaName} gg.eventhandler.oci.fileNameMappingTemplate=${tableName}_${currentTimestamp}.txt gg.eventhandler.oci.finalizeAction=NONE goldengate.userexit.writers=javawriter
9.4 Oracle Cloud Infrastructureの資格証明の構成
Java SDKが機能するには、ユーザー資格証明などの基本構成情報およびOracle Cloud InfrastructureのテナントOracle Cloud ID (OCID)が必要です。https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htmを参照してください。
理想的な構成ファイルには、user
、fingerprint
、key_file
、tenancy
およびregion
の各キーとそれぞれの値が含まれます。デフォルトの構成ファイルの名前と場所は、~/.oci/config
です。
次のように、config
ファイルを作成します。
-
Oracle GoldenGate for Big Dataホーム・ディレクトリに
.oci
というディレクトリを作成します。 -
テキスト・ファイルを作成し、
config
と名前を付けます。 -
次のプロパティの値を取得します。
-
user
-
-
Oracle Cloud Infrastructureコンソール(https://console.us-ashburn-1.oraclecloud.com)にログインします。
-
「Username」をクリックします。
-
「User Settings」をクリックします。
ユーザーのOCIDが表示され、これがキー・ユーザーの値です。
-
-
tenancy
-
テナントIDがコンソール・ページの下部に表示されます。
-
region
-
コンソールのヘッダー・セッション・ドロップダウン・メニューでリージョンが表示されます。
-
fingerprint
-
フィンガープリントを生成するには、次のキーのフィンガープリントの取得方法の手順に従います。
https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm
-
key_file
-
Oracle Cloud Infrastructureとの接続を確立するには、公開キーと秘密キーを共有する必要があります。キーを生成するには、次のAPI署名キーの生成方法に従います。
https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm
-
構成ファイルの例
user=ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzqedqw3rynjq fingerprint=20:3b:97:13::4e:c5:3a:34 key_file=~/.oci/oci_api_key.pem tenancy=ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr44h25vqstifs
9.5 テンプレート文字列の使用
テンプレート文字列には、実行時に動的に解決されるリテラルとキーワードの組合せを含めることができます。このイベント・ハンドラは、テンプレート文字列を大量に使用して、Oracle Cloud Infrastructureディレクトリ名、データ・ファイル名およびOracle Cloud Infrastructureバケット名を生成します。これらの文字列によって、データ・ファイルおよびデータ・ファイルの名前を書き込む場所を柔軟に選択できます。ファイルおよびディレクトリの名前を選択する場合は、異常終了の原因となる可能性があるファイル命名の競合を回避するように注意する必要があります。
サポートされているテンプレート文字列
キーワード | 説明 |
---|---|
${fullyQualifiedTableName} |
ピリオド( |
${catalogName} |
個々のソース・カタログ名。たとえば、 |
${schemaName} |
個々のソース・スキーマ名。たとえば、 |
${tableName} |
個々のソース表名。たとえば、 |
${groupName} |
Replicatプロセスの名前(調整された適用を使用する場合は、スレッド番号を含む)。 |
${emptyString} |
空の文字列になります。たとえば、 |
${operationCount} |
データ・ファイル内の操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ( |
${insertCount} |
データ・ファイル内の挿入操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ( |
${updateCount} |
データ・ファイル内の更新操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ( |
${deleteCount} |
データ・ファイル内の削除操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ( |
${truncateCount} |
データ・ファイル内の切捨て操作の合計数。名前変更か、イベント・ハンドラで使用する必要があります。それ以外の場合、何もまだ書き込まれていないため、ゼロ( |
${currentTimestamp} |
現在のタイムスタンプ。日時のデフォルトの出力形式は
この形式は、Javaの |
${toUpperCase[]} |
角カッコ内のコンテンツを大文字に変換します。たとえば、 |
${toLowerCase[]} |
角カッコ内のコンテンツを小文字に変換します。たとえば、 |
テンプレート文字列の構成では、キーワードおよび静的文字列の組合せを使用して、実行時にパスとデータ・ファイル名を構成できます。
要件
テンプレートを使用して生成されたディレクトリ名およびファイル名は、書込み先のシステム上で有効である必要があります。ファイル名の競合を避けるために、ファイル名は一意である必要があります。${currentTimestamp}
キーワードを使用して、現在のタイムスタンプを追加すると、競合を回避できます。調整された適用を使用している場合は、データ・ファイル名に${groupName}
を追加することをお薦めします。
9.6 トラブルシューティング
接続の問題
オンプレミスで実行していて、OCIイベント・ハンドラがOCIオブジェクト・ストレージに接続できない場合は、プロキシ・サーバーによってパブリック・インターネットへの接続が保護されている可能性が高くなります。プロキシ・サーバーは、企業のプライベート・ネットワークとパブリック・インターネットとの間のゲートウェイとして機能します。プロキシ・サーバーのURLを取得するには、ネットワーク管理者に問い合せてください。
OCIへのOracle GoldenGate for Big Dataの接続は、次の構成プロパティを設定することで、プロキシ・サーバーを介してルーティングできます。
gg.eventhandler.name.proxyServer={insert your proxy server name} gg.eventhandler.name.proxyPort={insert your proxy server port number}
ClassNotFoundExceptionエラー
最も一般的な初期エラーは、必要なすべてのクライアント・ライブラリが含まれていない正しくないクラスパスで、これによりClassNotFoundException
エラーが発生します。Oracle Cloud Infrastructure Java SDKの必要なJARファイルをすべて含めるためにgg.classpath
変数を指定します。機能の詳細を参照してください。