8.2.26 Oracle NoSQL
Oracle NoSQLハンドラでは、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)からターゲットOracle NoSQL Databaseにトランザクション・データを複製できます。
この章では、Oracle NoSQLハンドラの使用方法について説明します。
- 概要
- オンプレミス接続
- OCIクラウド接続
- Oracle NoSQL型
- Oracle NoSQLハンドラの構成
- パフォーマンスに関する考慮事項
- 操作処理のサポート
- 列の処理
- 表チェックおよび調整プロセス
- Oracle NoSQL SDK依存性
親トピック: ターゲット
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を参照してください。
親トピック: Oracle NoSQL
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クラウド接続
8.2.26.3.1 サーバー認証
親トピック: OCI Cloud接続
8.2.26.3.2 クライアント認証
初期接続時に、サーバーがクライアントを認証するためにfingerprint
、keyfile
およびpass_phrase
プロパティが使用されます。
親トピック: OCI Cloud接続
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/*
親トピック: OCI Cloud接続
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
親トピック: OCI Cloud接続
8.2.26.4 Oracle NoSQL型
Oracle NoSQLにはいくつかの列データ型が用意されており、そのデータ型のほとんどがOracle NoSQLハンドラでサポートされています。証跡ファイルの列値から、Oracle NoSQLハンドラでOracle NoSQL列タイプを表す対応するJavaタイプへのデータ型変換が必要です。
Oracle NoSQLハンドラは、デフォルトでは配列、マップおよびレコード・データ型をサポートしていません。これらをサポートするために、カスタム・データ・コンバータを実装し、ユースケースをサポートする独自のカスタム・ロジックでデフォルトのデータ型変換ロジックをオーバーライドできます。Oracleサポートにお問い合せください。
次のOracle NoSQLデータ型がサポートされています。
- バイナリ
- ブール
- 倍精度
- 整数
- 数値
- 文字列
- タイムスタンプ
次のOracle NoSQLデータ型はサポートされていません。
- 配列
- マップ
親トピック: Oracle NoSQL
8.2.26.5 Oracle NoSQLハンドラの構成
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
nosql |
なし |
Oracle NoSQLハンドラを選択します。 |
|
オプション |
|
|
true に設定すると、NoSQLハンドラは一度に1つの操作を処理します。false に設定すると、NoSQLハンドラはトランザクションのコミット時にバッチ操作を処理します。バッチには制限があります。バッチ操作は表ごとに分ける必要があり、表のすべてのバッチ操作には共通の共有キーが必要です。
|
|
オプション |
カンマ・デリミタで区切られた任意の組合せの |
なし |
指定するDDL機能についてOracle NoSQLハンドラを構成します。オプションには、CREATE 、ADD ,およびDROP があります。
|
|
オプション |
正の整数 |
3 |
Oracle NoSQLハンドラが検出した読取りまたは書込み例外の再試行回数。 |
|
オプション |
正の整数 |
30000 |
NoSQLリクエストがレスポンスを待機する最大時間(ミリ秒)。タイムアウトを超えた場合、コールは失敗したと見なされます。 |
|
オプション |
プロトコルを含む有効なURL。 |
なし |
オンプレミスのみ。NoSQLプロキシ・インスタンスの接続URLを設定するために使用します。 |
|
オプション |
文字列 |
なし |
オンプレミスのみ。NoSQLプロキシ・プロセスを介してオンプレミスのNoSQLインスタンスに接続するためのユーザー名を設定するために使用します。 |
|
オプション |
文字列 |
なし |
オンプレミスのみ。NoSQLプロキシ・プロセスを介してオンプレミスのNoSQLインスタンスに接続するためのパスワードを設定するために使用します。 |
|
オプション |
OCI上のOracle NoSQLコンパートメントのOCID。 |
なし |
クラウドのみ。OCI上のOracle NoSQLクラウド・インスタンス・コンパートメントのOCID。 |
|
オプション |
有効なOracle OCIリージョン名。 |
なし |
クラウドのみ。Oracle NoSQLクラウド・インスタンスのOCIリージョン名。 |
|
オプション |
有効なパスとファイル名。 |
なし |
クラウドのみ。ユーザー、フィンガープリント、テナンシ、リージョンおよびキー・ファイルに関するOracle OCI情報を含む構成ファイルのパスおよびファイル名を設定します。 |
|
オプション |
なし |
"DEFAULT" |
クラウドのみ。gg.handler.name.configFilePath の名前付きサブセクションを設定します。OCI構成ファイルには複数のエントリを含めることができ、命名によって使用するエントリを指定します。
|
|
オプション |
正の整数 |
10 |
クラウドのみ。クラウド・インスタンスで作成されたOracle NoSQL表は、最大ストレージ・サイズで構成する必要があります。これにより、Oracle NoSQLハンドラによって作成された表の構成が設定されます。 |
|
オプション |
正の整数 |
50 |
クラウドのみ。OCIクラウド・インスタンスで作成されたOracle NoSQL表は、最大読取りスループットである読取りユニットで構成する必要があります。各ユニットは1KB/秒です。 |
|
オプション |
正の整数 |
50 |
クラウドのみ。OCIクラウド・インスタンスで作成されたOracle NoSQL表は、最大書込みスループットである書込みユニットで構成する必要があります。各ユニットは1KB/秒です。 |
|
オプション |
|
|
ソース表で列が見つかったが、ターゲットNoSQL表にその列が存在しない場合に異常終了することがハンドラの必要な動作である場合は、true に設定します。対応する列がターゲットNoSQL表に存在しない列がソース表で見つかった場合にその列を無視することがハンドラの必要な動作である場合は、false に設定します。
|
|
オプション |
完全修飾のデータ・コンバータ・クラス名。 |
デフォルトのデータ・コンバータ。 |
カスタム・データ・コンバータを実装して、特定のユースケースをサポートするデフォルトのデータ変換ロジックをオーバーライドできます。使用するには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以降を使用する必要があります。 |
親トピック: Oracle NoSQL
8.2.26.6 パフォーマンスに関する考慮事項
その後、NoSQLハンドラが対話型モードで処理されると、操作はNoSQLハンドラによって受信されたときに一度に1つずつ処理されます。
次のパラメータが設定されている場合、NoSQLハンドラはバルク・モードで処理されます。
gg.handler.name.interactiveMode=false
- 操作は同じNoSQL表に対して実行する必要があります。
- 操作は、同じNoSQLシャード内にある必要があります(同じシャード・キーまたはシャード・キー値を持つ必要があります)。
- バッチには、行ごとに1つの操作のみが存在します。
false
に設定されている場合、NoSQLハンドラでは表およびシャード・キー別に操作をグループ化し、同じ行に対する操作を重複排除します。
重複排除の例: 行の挿入および更新がある場合、その操作が同じトランザクションまたはReplicatグループ化されたトランザクション内にある場合は、更新操作のみが処理されます。
対話型モードがfalse
に設定されている場合、NoSQLハンドラによってパフォーマンスが向上することがあります。ただし、対話型モードでパフォーマンスを向上させるには、前述の基準で操作をグループ化できる必要があります。操作が前述の基準でグループ化できない場合、または操作またはバルク・モードによって非常に小規模なバッチへのグループ化のみが提供される場合、バルク・モードではパフォーマンスが大幅に向上しない可能性があります。
親トピック: Oracle 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データベースの主キーを削除と挿入としてのみ変更する更新操作を処理できます。この操作を正常に処理するには、ソース証跡ファイルに、すべての列の変更前と変更後の完全なデータ・イメージが含まれている必要があります。
親トピック: Oracle NoSQL
8.2.26.8 列の処理
列の削除機能
注意:
列を削除すると、Oracle NoSQLデータベースからデータが永久に削除されるため、危険を伴う可能性があります。削除を構成する前に、ユースケースを慎重に検討してください。主キー列は削除できません。
DDL処理が行われないため、列名の変更は適切に処理されません。Oracle NoSQLハンドラは列名の大/小文字の変更を処理できます。ソース・データベースでの列名変更イベントは、ハンドラでは、既存の列を削除して新しい列を追加した場合と同じように解釈されます。
親トピック: Oracle NoSQL
8.2.26.9 表チェックおよび調整プロセス
- Oracle NoSQLハンドラは、ターゲットOracle NoSQLデータベースで表定義を問い合せます。表が存在しない場合、Oracle NoSQLハンドラは次の2つのいずれかを実行します。gg.handler.name.ddlHandlingにCREATEが含まれる場合、データベースに表が作成されます。それ以外の場合、プロセスは異常終了し、表が存在しないことを示すメッセージが記録されます。
- Oracle NoSQLデータベースに表が存在する場合、Oracle NoSQLハンドラは、ソース証跡ファイルの表定義とデータベースの表定義の間で調整を実行します。この調整プロセスは、ソース表定義に存在し、対応するデータベース表定義に存在しない列を検索します。この基準に一致する列が見つかり、
gg.handler.name.ddlHandling property
にADDが含まれている場合、Oracle NoSQLハンドラは、新しい列を追加するデータベースのターゲット表を変更します。そうしないと、ターゲットで欠落している列は追加されません。プロパティgg.handler.name.abendOnUnmappedColumns
がtrue
に設定されている場合、NoSQLハンドラは異常終了します。それ以外の場合、構成プロパティgg.handler.name.abendOnUnmappedColumns
がfalse
に設定されている場合、NoSQLハンドラはプロセスを続行し、ソース表に存在してターゲットNoSQL表に存在しない列のデータを複製しません。 - 調整プロセスでは、ターゲットOracle NoSQLに存在してソース表定義に存在しない列が検索されます。この基準に一致する列が見つかり、
gg.handler.name.ddlHandling
プロパティにDROP,が含まれている場合、Oracle NoSQLハンドラは、これらの列を削除する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
親トピック: Oracle NoSQL SDK依存性