8.2.26 Oracle NoSQL

Oracle NoSQLハンドラでは、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)からターゲットOracle NoSQL Databaseにトランザクション・データを複製できます。

この章では、Oracle NoSQLハンドラの使用方法について説明します。

8.2.26.1 概要

Oracle NoSQL Databaseは、NoSQLタイプの分散型キー値データベースです。これは、NoSQLベースのアプリケーション開発プロセスを大幅に簡略化する、強力かつ柔軟なトランザクション・モデルを提供します。また、新たな容量を動的に追加する際でも、高可用性と透過的ロード・バランシングによって水平方向に拡張します。

Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA) 23aiリリース以降では、Oracle NoSQLハンドラは、Oracle NoSQL Java SDKを使用してOracle NoSQLと通信するようにが変更されています。Oracle NoSQL Java SDKは、Oracle NoSQLのオンプレミス・クラウド・インスタンスとOCIクラウド・インスタンスの両方をサポートしています。オンプレミス・クラウド・インスタンスとOCIクラウド・インスタンスへの接続では両方とも特別な構成パラメータと、場合によってはなんらかの設定を必要とするため、ドキュメントを必ずお読みください。

Oracle NoSQL Java SDKの詳細は、Oracle NoSQL SDK for Javaを参照してください。

8.2.26.2 オンプレミス接続

Oracle NoSQL Java SDKには、Oracle NoSQL Databaseプロキシを介した接続ルートが必要です。Oracle NoSQL Databaseプロキシは、Oracle NoSQLのhttp/httpsインタフェースを有効にする別のプロセスです。Oracle NoSQL Java SDKは、http/httpsインタフェースを使用します。Oracle GoldenGateは、Oracle NoSQL Databaseプロキシ・プロセスを介してオンプレミスのOracle NoSQLインスタンスと効果的に通信します。

設定手順を含むOracle NoSQL Databaseプロキシの詳細は、Oracle NoSQL Databaseオンプレミスへの接続を参照してください。

Oracle NoSQL Databaseプロキシへの接続には、クライアントがサーバーを認証し、サーバーがクライアントを認証する相互認証が必要です。

8.2.26.2.1 サーバー認証

初期接続時に、Oracle NoSQL Databaseプロキシ・プロセスは証明書をOracle NoSQL Java SDK (Oracle NoSQLハンドラ)に渡します。次に、Oracle NoSQL Java SDKは、構成されたトラスト・ストア内の証明書に対して証明書を検証します。プロキシから受信した証明書がトラスト・ストアに対して検証された後、クライアントはサーバーを認証しました。

8.2.26.2.2 クライアント認証

初期接続時に、Oracle NoSQL Java SDK (Oracle NoSQLハンドラ)は資格証明(ユーザー名とパスワード)をOracle NoSQL Databaseプロキシに渡します。これらの資格証明は、クライアントに対するNoSQLオンプレミス・インスタンスに使用されます。

8.2.26.2.3 オンプレミスのOracle NoSQL構成の例

gg.handlerlist=nosql
gg.handler.nosql.type=nosql
gg.handler.nosql.nosqlURL=https://localhost:5555
gg.handler.nosql.ddlHandling=CREATE,ADD,DROP
gg.handler.nosql.interactiveMode=false
#Client Credentials
gg.handler.nosql.username={your username}
gg.handler.nosql.password={your password}
gg.handler.nosql.mode=op
# Set the gg.classpath to pick up the Oracle NoSQL Java SDK
gg.classpath=/path/to/the/SDK/*
# Set the -D options in the bootoptions to resolve the trust store location and password
jvm.bootoptions=-Xmx512m -Xms32m -Djavax.net.ssl.trustStore=/usr/nosql/kv-20.3.17/USER/security/driver.trust -Djavax.net.ssl.trustStorePassword={your trust store password}

8.2.26.3 OCIクラウド接続

Oracle NoSQLのOCI Cloudインスタンスへの接続は、オンプレミス・インスタンスに必要なOracle NoSQL Databaseプロキシを必要としないため、より簡単になります。ここでも、クライアントがサーバーを認証し、サーバーがクライアントを認証する相互認証があります。

8.2.26.3.1 サーバー認証

初期接続時に、Oracle NoSQLクラウド・インスタンスはCA署名付き証明書をクライアントに渡します。次に、クライアントは、このCA署名付き証明書を認証局で認証します。完了すると、クライアントはサーバーを認証しました。

8.2.26.3.2 クライアント認証

初期接続時に、サーバーがクライアントを認証するためにfingerprintkeyfileおよびpass_phraseプロパティが使用されます。

8.2.26.3.3 クラウドOracle NoSQL構成の例

gg.handlerlist=nosql
gg.handler.nosql.type=nosqlNoSQLSdkHandler
#gg.handler.nosql.type=nosql
gg.handler.nosql.ddlHandling=CREATE,ADD,DROP
gg.handler.nosql.interactiveMode=false
gg.handler.nosql.region=us-sanjose-1
gg.handler.nosql.configFilePath=/path/to/the/OCI/conf/file/nosql.conf
gg.handler.nosql.compartmentId=ocid1.compartment.oc1..aaaaaaaae2aedhka4jlb3h6zhpaonaoktmg53adwkhwjflvv6hihz5cvwfeq
gg.handler.nosql.storageGb=10
gg.handler.nosql.readUnits=50
gg.handler.nosql.writeUnits=50
gg.handler.nosql.mode=op
# Set the gg.classpath to pick up the Oracle NoSQL Java SDK
gg.classpath=/path/to/the/SDK/*

8.2.26.3.4 OCI構成ファイルの例

[DEFAULT]
user=ocid1.user.oc1..aaaaaaaaammf6u5h4wsmiuk52us5vnqhnnyzexkn56cqijlyo4vaao2jzi3a
fingerprint=77:53:2c:e5:31:81:48:c3:3d:af:60:cf:e0:42:5c:7f
tenancy=ocid1.tenancy.oc1..aaaaaaaattuxbj75pnn3nksvzyidshdbrfmmeflv4kkemajroz2thvca4kba
region=us-sanjose-1
key_file=/home/username/OracleNoSQL/lastname.firstname-04-13-18-51.pem
openssl rsa -aes256 -in in.pem -out out.pem
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

pass_phrase
これは、オプションのプロパティです。pemファイル内の秘密キーがパスフェーズで保護されている場合、パスフレーズを構成するために使用されます。次のopensslコマンドを使用して、保護されていない秘密キーのpemファイルを取得し、パスフレーズを追加できます。
次のコマンドは、ユーザーにパスフレーズを要求します:
openssl rsa -aes256 -in in.pem -out out.pem
詳細は、「Oracle Cloud Infrastructureの資格証明の構成」を参照してください。

8.2.26.4 Oracle NoSQL型

Oracle NoSQLにはいくつかの列データ型が用意されており、そのデータ型のほとんどがOracle NoSQLハンドラでサポートされています。証跡ファイルの列値から、Oracle NoSQLハンドラでOracle NoSQL列タイプを表す対応するJavaタイプへのデータ型変換が必要です。

Oracle NoSQLハンドラは、デフォルトでは配列、マップおよびレコード・データ型をサポートしていません。これらをサポートするために、カスタム・データ・コンバータを実装し、ユースケースをサポートする独自のカスタム・ロジックでデフォルトのデータ型変換ロジックをオーバーライドできます。Oracleサポートにお問い合せください。

次のOracle NoSQLデータ型がサポートされています。

  • バイナリ
  • ブール
  • 倍精度
  • 整数
  • 数値
  • 文字列
  • タイムスタンプ

次のOracle NoSQLデータ型はサポートされていません。

  • 配列
  • マップ

8.2.26.5 Oracle NoSQLハンドラの構成

プロパティ 必須/オプション 有効な値 デフォルト 説明

gg.handler.name.type

必須

nosql

なし

Oracle NoSQLハンドラを選択します。

gg.handler.name.interactiveMode

オプション

true|false

true

trueに設定すると、NoSQLハンドラは一度に1つの操作を処理します。falseに設定すると、NoSQLハンドラはトランザクションのコミット時にバッチ操作を処理します。バッチには制限があります。バッチ操作は表ごとに分ける必要があり、表のすべてのバッチ操作には共通の共有キーが必要です。

gg.handler.name.ddlHandling

オプション

カンマ・デリミタで区切られた任意の組合せのCREATE, ADD, DROP

なし

指定するDDL機能についてOracle NoSQLハンドラを構成します。オプションには、CREATEADD,およびDROPがあります。
  • CREATEを有効にすると、ハンドラは、対応する表が存在しない場合にOracle NoSQLに表を作成します。
  • ADDを有効にすると、ハンドラは、ソース表定義に存在するが対応するターゲットOracle NoSQL表定義には存在しない列を追加します。
  • DROPを有効にすると、ハンドラは、Oracle NoSQL表定義に存在するが対応するソース表定義には存在しない列を削除します。

gg.handler.name.retries

オプション

正の整数

3

Oracle NoSQLハンドラが検出した読取りまたは書込み例外の再試行回数。

gg.handler.name.requestTimeout

オプション

正の整数

30000

NoSQLリクエストがレスポンスを待機する最大時間(ミリ秒)。タイムアウトを超えた場合、コールは失敗したと見なされます。

gg.handler.name.noSQLURL

オプション

プロトコルを含む有効なURL。

なし

オンプレミスのみ。NoSQLプロキシ・インスタンスの接続URLを設定するために使用します。

gg.handler.name.username

オプション

文字列

なし

オンプレミスのみ。NoSQLプロキシ・プロセスを介してオンプレミスのNoSQLインスタンスに接続するためのユーザー名を設定するために使用します。

gg.handler.name.password

オプション

文字列

なし

オンプレミスのみ。NoSQLプロキシ・プロセスを介してオンプレミスのNoSQLインスタンスに接続するためのパスワードを設定するために使用します。

gg.handler.name.compartmentId

オプション

OCI上のOracle NoSQLコンパートメントのOCID。

なし

クラウドのみ。OCI上のOracle NoSQLクラウド・インスタンス・コンパートメントのOCID。

gg.handler.name.region

オプション

有効なOracle OCIリージョン名。

なし

クラウドのみ。Oracle NoSQLクラウド・インスタンスのOCIリージョン名。

gg.handler.name.configFilePath

オプション

有効なパスとファイル名。

なし

クラウドのみ。ユーザー、フィンガープリント、テナンシ、リージョンおよびキー・ファイルに関するOracle OCI情報を含む構成ファイルのパスおよびファイル名を設定します。

gg.handler.name.profile

オプション

なし

"DEFAULT"

クラウドのみ。gg.handler.name.configFilePathの名前付きサブセクションを設定します。OCI構成ファイルには複数のエントリを含めることができ、命名によって使用するエントリを指定します。

gg.handler.name.storageGb

オプション

正の整数

10

クラウドのみ。クラウド・インスタンスで作成されたOracle NoSQL表は、最大ストレージ・サイズで構成する必要があります。これにより、Oracle NoSQLハンドラによって作成された表の構成が設定されます。

gg.handler.name.readUnits

オプション

正の整数

50

クラウドのみ。OCIクラウド・インスタンスで作成されたOracle NoSQL表は、最大読取りスループットである読取りユニットで構成する必要があります。各ユニットは1KB/秒です。

gg.handler.name.writeUnits

オプション

正の整数

50

クラウドのみ。OCIクラウド・インスタンスで作成されたOracle NoSQL表は、最大書込みスループットである書込みユニットで構成する必要があります。各ユニットは1KB/秒です。

gg.handler.name.abendOnUnmappedColumns

オプション

true|false

true

ソース表で列が見つかったが、ターゲットNoSQL表にその列が存在しない場合に異常終了することがハンドラの必要な動作である場合は、trueに設定します。対応する列がターゲットNoSQL表に存在しない列がソース表で見つかった場合にその列を無視することがハンドラの必要な動作である場合は、falseに設定します。

gg.handler.name.dataConverterClass

オプション

完全修飾のデータ・コンバータ・クラス名。

デフォルトのデータ・コンバータ。

カスタム・データ・コンバータを実装して、特定のユースケースをサポートするデフォルトのデータ変換ロジックをオーバーライドできます。使用するにはgg.classpathに含める必要があります。
gg.handler.name.timestampPattern オプション ソース証跡ファイルにあるタイムスタンプを解析するための有効なパターン。 yyyy-MM-dd HH:mm:ss この機能を使用して、ソース・フィールド・データをタイムスタンプ・ターゲット・フィールドのタイムスタンプに解析できます。パターンはタイムスタンプ・パターンのJava規則に従う必要があり、ソース・データがパターンに準拠している必要があります。
gg.handler.name.proxyServer オプション なし プロキシ・サーバーのホスト名。 オンプレミスのOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)からOracle NoSQLのOracle Cloud Infrastructure (OCI)クラウド・インスタンスへの接続のための転送プロキシ・サーバーのホスト名の構成に使用します。Oracle NoSQL Java SDKのバージョン5.2.27以降を使用する必要があります。
gg.handler.name.proxyPort オプション 80 正の整数 オンプレミスのGG for DAAからOracle NoSQLのOCIクラウド・インスタンスへの接続のための転送プロキシ・サーバーのポート番号の構成に使用します。Oracle NoSQL Java SDKのバージョン5.2.27以降を使用する必要があります。
gg.handler.name.proxyUsername オプション なし 文字列 オンプレミスのGG for DAAからOracle NoSQLのOCIクラウド・インスタンスへの接続のための転送プロキシのユーザー名の構成に使用します(該当する場合)。ほとんどのプロキシ・サーバーでは、資格証明は必要ありません。Oracle NoSQL Java SDKのバージョン5.2.27以降を使用する必要があります。
gg.handler.name.proxyPassword オプション なし 文字列 オンプレミスのGG for DAAからOracle NoSQLのOCIクラウド・インスタンスへの接続のための転送プロキシのパスワードの構成に使用します(該当する場合)。ほとんどのプロキシ・サーバーでは、資格証明は必要ありません。Oracle NoSQL Java SDKのバージョン5.2.27以降を使用する必要があります。

8.2.26.6 パフォーマンスに関する考慮事項

その後、NoSQLハンドラが対話型モードで処理されると、操作はNoSQLハンドラによって受信されたときに一度に1つずつ処理されます。

次のパラメータが設定されている場合、NoSQLハンドラはバルク・モードで処理されます。

gg.handler.name.interactiveMode=false

NoSQL SDKでは、次の基準を満たす操作に対する操作を一括処理できます。
  1. 操作は同じNoSQL表に対して実行する必要があります。
  2. 操作は、同じNoSQLシャード内にある必要があります(同じシャード・キーまたはシャード・キー値を持つ必要があります)。
  3. バッチには、行ごとに1つの操作のみが存在します。
対話型モードがfalseに設定されている場合、NoSQLハンドラでは表およびシャード・キー別に操作をグループ化し、同じ行に対する操作を重複排除します。

重複排除の例: 行の挿入および更新がある場合、その操作が同じトランザクションまたはReplicatグループ化されたトランザクション内にある場合は、更新操作のみが処理されます。

対話型モードがfalseに設定されている場合、NoSQLハンドラによってパフォーマンスが向上することがあります。ただし、対話型モードでパフォーマンスを向上させるには、前述の基準で操作をグループ化できる必要があります。操作が前述の基準でグループ化できない場合、または操作またはバルク・モードによって非常に小規模なバッチへのグループ化のみが提供される場合、バルク・モードではパフォーマンスが大幅に向上しない可能性があります。

8.2.26.7 操作処理のサポート

Oracle NoSQLハンドラは、同期APIを使用してOracle NoSQLに操作を移動します。Oracle NoSQLデータベースでは、挿入、更新および削除操作が、従来のRDBMSとは異なる方法で処理されます。

次に、挿入、更新および削除操作が操作モードに応じてハンドラでどのように解釈されるかについて説明します。
  • 挿入: データベースに行が存在しない場合、挿入操作は挿入として処理されます。行が存在する場合、挿入操作は更新として処理されます。
  • 更新: データベースに行が存在しない場合、更新操作は挿入として処理されます。行が存在する場合、更新操作は更新として処理されます。
  • 削除: データベースに行が存在しない場合、削除操作は効果がありません。行が存在する場合、削除操作は削除として処理されます。

Oracle NoSQLデータベースのデータの状態は、冪等です。ソース証跡ファイルまたは証跡ファイルのセクションを再生できます。最終的には、証跡データがOracle NoSQLに書き込まれた回数に関係なく、Oracle NoSQLデータベースの状態は同じになります。

Oracle NoSQLデータベースの行の主キー値は変更できません。Oracle NoSQLの行の主キー値を変更する更新操作は、削除と挿入として処理される必要があります。Oracle NoSQLハンドラは、Oracle NoSQLデータベースの主キーを削除と挿入としてのみ変更する更新操作を処理できます。この操作を正常に処理するには、ソース証跡ファイルに、すべての列の変更前と変更後の完全なデータ・イメージが含まれている必要があります。

8.2.26.8 列の処理

Oracle NoSQLハンドラを構成して、ソース証跡ファイルの表定義には存在するが、Oracle NoSQL表定義には存在しない列を追加できます。Oracle NoSQLハンドラは、列を追加するメタデータ変更イベントに対応できます。ソース表定義をOracle NoSQL表定義に調整する調整プロセスが発生します。列を追加するように構成すると、ソース表定義に存在し、Oracle NoSQL表定義には存在しない列が追加されます。表の調整プロセスは、アプリケーションの起動後、表に対する操作が最初に発生したときに実行されます。調整プロセスは、ソース表でのメタデータ変更イベント後、その変更イベント後にソース表に対する操作が最初に発生したときに再実行されます。

列の削除機能

追加する場合と同様に、列を削除するようにOracle NoSQLハンドラを構成できます。Oracle NoSQLハンドラは、列を削除するメタデータ変更イベントに対応できます。ソース表定義をOracle NoSQL表定義に調整する調整プロセスが発生します。列を削除するように構成すると、Oracle NoSQL表定義に存在し、ソース表定義には存在しない列が削除されます。

注意:

列を削除すると、Oracle NoSQLデータベースからデータが永久に削除されるため、危険を伴う可能性があります。削除を構成する前に、ユースケースを慎重に検討してください。

主キー列は削除できません。

DDL処理が行われないため、列名の変更は適切に処理されません。Oracle NoSQLハンドラは列名の大/小文字の変更を処理できます。ソース・データベースでの列名変更イベントは、ハンドラでは、既存の列を削除して新しい列を追加した場合と同じように解釈されます。

8.2.26.9 表チェックおよび調整プロセス

  1. Oracle NoSQLハンドラは、ターゲットOracle NoSQLデータベースで表定義を問い合せます。表が存在しない場合、Oracle NoSQLハンドラは次の2つのいずれかを実行します。gg.handler.name.ddlHandlingにCREATEが含まれる場合、データベースに表が作成されます。それ以外の場合、プロセスは異常終了し、表が存在しないことを示すメッセージが記録されます。
  2. Oracle NoSQLデータベースに表が存在する場合、Oracle NoSQLハンドラは、ソース証跡ファイルの表定義とデータベースの表定義の間で調整を実行します。この調整プロセスは、ソース表定義に存在し、対応するデータベース表定義に存在しない列を検索します。この基準に一致する列が見つかり、gg.handler.name.ddlHandling propertyにADDが含まれている場合、Oracle NoSQLハンドラは、新しい列を追加するデータベースのターゲット表を変更します。そうしないと、ターゲットで欠落している列は追加されません。プロパティgg.handler.name.abendOnUnmappedColumnstrueに設定されている場合、NoSQLハンドラは異常終了します。それ以外の場合、構成プロパティgg.handler.name.abendOnUnmappedColumnsfalseに設定されている場合、NoSQLハンドラはプロセスを続行し、ソース表に存在してターゲットNoSQL表に存在しない列のデータを複製しません。
  3. 調整プロセスでは、ターゲットOracle NoSQLに存在してソース表定義に存在しない列が検索されます。この基準に一致する列が見つかり、gg.handler.name.ddlHandlingプロパティにDROP,が含まれている場合、Oracle NoSQLハンドラは、これらの列を削除するOracle NoSQLのターゲット表を変更します。それ以外の場合、これらの列は無視されます。

8.2.26.9.1 完全イメージのデータの要件

Oracle NoSQLでは、更新操作は、行全体のデータの完全な再挿入を実行します。このOracle NoSQLの機能により、収集のパフォーマンスが向上しますが、その結果重要な要件が追加されます。更新は、すべての列のデータを含める必要があります(完全イメージ更新とも呼ばれます)。部分的なイメージ更新はサポートされていません(主キー情報および変更された列のデータのみを含む更新)。部分的なイメージ更新情報を含むOracle NoSQLハンドラを使用すると、ターゲットNoSQL表のデータが不完全になります。

8.2.26.10 Oracle NoSQL SDK依存性

Maven座標は次のとおりです。

Maven groupId: com.oracle.nosql.sdk

Maven artifactId: nosqldriver

バージョン: 5.2.27

8.2.26.10.1 Oracle NoSQL SDK依存性 5.2.27

bcpkix-jdk15on-1.68.jar
bcprov-jdk15on-1.68.jar
jackson-core-2.12.1.jar
netty-buffer-4.1.63.Final.jar
netty-codec-4.1.63.Final.jar
netty-codec-http-4.1.63.Final.jar
netty-codec-socks-4.1.63.Final.jar
netty-common-4.1.63.Final.jar
netty-handler-4.1.63.Final.jar
netty-handler-proxy-4.1.63.Final.jar
netty-resolver-4.1.63.Final.jar
netty-transport-4.1.63.Final.jar
nosqldriver-5.2.27.jar