16 Oracle NoSQLハンドラの使用
Oracle NoSQLハンドラの使用方法について説明します。このハンドラにより、Oracle GoldenGateからターゲットOracle NoSQL Databaseにトランザクション・データを複製できます。
トピック:
16.1 概要
Oracle NoSQL Databaseは、NoSQLタイプの分散型キー値データベースです。これは、NoSQLベースのアプリケーション開発プロセスを大幅に簡略化する、強力かつ柔軟なトランザクション・モデルを提供します。また、新たな容量を動的に追加する際でも、高可用性と透過的ロード・バランシングによって水平方向に拡張します。
Oracle NoSQL Databaseは、アプリケーション開発者に非常に単純なデータ・モデルを提供します。各行は一意キーで識別され、また、アプリケーションによって解釈される任意の長さの値も含まれます。アプリケーションは、1つのトランザクションで単一行を操作(挿入、削除、更新、読取り)できます。また、アプリケーションは、データベース内のすべての行の反復非トランザクション・スキャンを実行することもできます。https://www.oracle.com/database/nosqlおよびhttps://docs.oracle.com/cd/NOSQL/docs.htmを参照してください。
Oracle NoSQLハンドラは、表APIを使用してOracle NoSQLにチェンジ・データ・キャプチャをストリーミングします。表APIでは、表、スキーマ、データ型、主キーなど、RDBMSの一部の機能を提供します。Oracle NoSQLは、キー値APIもサポートしています。キー値APIは、キーに基づいてOracle NoSQLに生データを格納します。NoSQLハンドラは、キー値APIをサポートしていません。
親トピック: Oracle NoSQLハンドラの使用
16.2 詳細な機能
トピック:
16.2.1 Oracle NoSQLデータ型
Oracle NoSQLにはいくつかの列データ型が用意されており、そのデータ型のほとんどがOracle NoSQLハンドラでサポートされています。証跡ファイルの列値から、Oracle NoSQLハンドラでOracle NoSQL列タイプを表す対応するJavaタイプへのデータ型変換が必要です。
Oracle NoSQLハンドラは、デフォルトでは配列、マップおよびレコード・データ型をサポートしていません。これらをサポートするために、カスタム・データ・コンバータを実装し、ユースケースをサポートする独自のカスタム・ロジックでデフォルトのデータ型変換ロジックをオーバーライドできます。Oracleサポートにお問い合せください。
次のOracle NoSQLデータ型がサポートされています。
-
Binary
-
Boolean
-
Double
-
Float
-
整数
-
Long
-
Java文字列
親トピック: 詳細な機能
16.2.2 パフォーマンスに関する考慮事項
バッチ・モードのOracle NoSQLハンドラを構成すると、対話型モードよりも高いパフォーマンスが得られます。バッチ処理モードは、主キーの同じシャード・キー部分を共有する表に関連付けられた一連の操作を実行するための効率的なトランザクション・メカニズムを提供します。単一のネットワーク相互作用を使用して一連の操作全体を実行することにより、効率が向上します。バッチに指定されたすべての操作は、シリアライズ可能分離を効率的に提供する単一トランザクションのスコープ内で実行されます。
親トピック: 詳細な機能
16.2.3 操作処理のサポート
Oracle NoSQLハンドラは、同期APIを使用してOracle NoSQLに操作を移動します。Oracle NoSQLデータベースでは、挿入、更新および削除操作が、従来のRDBMSとは異なる方法で処理されます。
次に、挿入、更新および削除操作が操作モードに応じてハンドラでどのように解釈されるかについて説明します。
-
insert
– データベースに行が存在しない場合、挿入操作は挿入として処理されます。行が存在する場合、挿入操作は更新として処理されます。 -
update
– データベースに行が存在しない場合、更新操作は挿入として処理されます。行が存在する場合、更新操作は更新として処理されます。 -
delete
– データベースに行が存在しない場合、削除操作は無効です。行が存在する場合、削除操作は削除として処理されます。
Oracle NoSQLデータベースのデータの状態は、最終的には冪等です。ソース証跡ファイルまたは証跡ファイルのセクションを再生できます。最終的には、証跡データがOracle NoSQLに書き込まれた回数に関係なく、Oracle NoSQLデータベースの状態は同じになります。
Oracle NoSQLデータベースの行の主キー値は変更できません。Oracle NoSQLの行の主キー値を変更する更新操作は、削除と挿入として処理される必要があります。Oracle NoSQLハンドラは、Oracle NoSQLデータベースの主キーを削除と挿入としてのみ変更する更新操作を処理できます。この操作を正常に処理するには、ソース証跡ファイルに、すべての列の変更前と変更後の完全なデータ・イメージが含まれている必要があります。
親トピック: 詳細な機能
16.2.4 列の処理
列の追加機能
Oracle NoSQLハンドラを構成して、ソース証跡ファイルの表定義には存在するが、Oracle NoSQL表定義には存在しない列を追加できます。Oracle NoSQLハンドラは、列を追加するメタデータ変更イベントに対応できます。ソース表定義をOracle NoSQL表定義に調整する調整プロセスが発生します。列を追加するように構成すると、ソース表定義に存在し、Oracle NoSQL表定義には存在しない列が追加されます。表の調整プロセスは、アプリケーションの起動後、表に対する操作が最初に発生したときに実行されます。調整プロセスは、ソース表でのメタデータ変更イベント後、その変更イベント後にソース表に対する操作が最初に発生したときに再実行されます。
列の削除機能
追加する場合と同様に、列を削除するようにOracle NoSQLハンドラを構成できます。Oracle NoSQLハンドラは、列を削除するメタデータ変更イベントに対応できます。ソース表定義をOracle NoSQL表定義に調整する調整プロセスが発生します。列を削除するように構成すると、Oracle NoSQL表定義に存在し、ソース表定義には存在しない列が削除されます。
注意:
列を削除すると、Oracle NoSQLデータベースからデータが永久に削除されるため、危険を伴う可能性があります。削除を構成する前に、ユースケースを慎重に検討してください。
主キー列は削除できません。
DDL処理が行われないため、列名の変更は適切に処理されません。Oracle NoSQLハンドラは列名の大/小文字の変更を処理できます。ソース・データベースでの列名変更イベントは、ハンドラでは、既存の列を削除して新しい列を追加した場合と同じように解釈されます。
親トピック: 詳細な機能
16.2.5 表チェックおよび調整プロセス
まず、Oracle NoSQLハンドラは、ターゲットOracle NoSQLデータベースで表定義を問い合せます。表が存在しない場合、Oracle NoSQLハンドラは次の2つのいずれかを実行します。gg.handler.name.ddlHandling
にCREATE
が含まれる場合、データベースに表が作成されます。それ以外の場合、プロセスは異常終了し、表が存在しないことを示すメッセージが記録されます。Oracle NoSQLデータベースに表が存在する場合、Oracle NoSQLハンドラは、ソース証跡ファイルの表定義とデータベースの表定義の間で調整を実行します。この調整プロセスは、ソース表定義に存在し、対応するデータベース表定義に存在しない列を検索します。この基準に一致する列が見つかり、gg.handler.name.ddlHandling
プロパティにADD
が含まれている場合、Oracle NoSQLハンドラは、新しい列を追加するデータベースのターゲット表を変更します。それ以外の場合、これらの列は無視されます。
次に、調整プロセスは、ターゲットOracle NoSQL表に存在するが、ソース表定義に存在しない列を検索します。この基準に一致する列が見つかり、gg.handler.name.ddlHandling
プロパティにDROP
が含まれている場合、Oracle NoSQLハンドラは、これらの列を削除するOracle NoSQLのターゲット表を変更します。それ以外の場合、これらの列は無視されます。
親トピック: 詳細な機能
16.2.6 セキュリティ
Oracle NoSQLハンドラは、2つの認証方式(基本およびKerberos)をサポートしています。
これらの認証方式の両方で、KVストアへのトランスポート・メカニズムとしてSSLを使用します。アダプタ・プロパティ・ファイルで、Oracle NoSQLハンドラ構成の一部としてSSLのパブリック信頼ファイルの相対パスまたは絶対パスを指定する必要があります。
基本認証方式では、プロパティ・ファイルに構成パラメータとして指定されたユーザー名とパスワードを使用して、Oracle NoSQLデータベースにログインしようとします。Oracle GoldenGateでビッグ・データ環境用の資格証明ストアを作成できます。ビッグ・データ環境用の資格証明ストアを作成した後、ストアにユーザーを追加できます。
ユーザーを作成するには、GGSCIで次のコマンドを実行します。
ALTER CREDENTIALSTORE ADD USER userid PASSWORD password [ALIAS alias] [DOMAIN domain]
説明:
-
userid
はユーザー名です。資格証明ストアに配置できるユーザー名のインスタンスは1つのみです(ALIAS
またはDOMAIN
オプションが使用されていない場合)。 -
password
はユーザーのパスワードです。このオプションを使用すると、パスワードはエコーされます(不明瞭化されません)。このオプションを使用しない場合は、パスワードの入力を求められます。入力したパスワードは不明瞭化されます(より安全な方法としてお薦めします)。 -
alias
はユーザー名の別名です。ログイン資格証明が必要なパラメータとコマンドでは、資格証明のかわりに別名を使用します。ALIAS
オプションを使用しない場合、別名はデフォルトでユーザー名に設定されます。
作成されたユーザーには、Oracle NoSQLデータベースに対する読取り/書込みアクセス権が必要です。Oracle NoSQLのユーザー管理の詳細は、次を参照してください。
https://docs.oracle.com/cd/NOSQL/html/SecurityGuide/config_auth.html.
Oracle NoSQLへのサポートされている外部ログイン・メカニズムはKerberosのみです。Kerberos認証方式は、Kerberosプリンシパル、レルムおよびkeytab
ファイルを使用してOracle NoSQLデータベースにログインしようとします。これらの値はプロパティ・ファイルで構成パラメータとして指定します。
ハンドラは、まずOracle NoSQLデータベースに管理者としてログインする際にハンドラでセキュリティ・プロパティ・ファイルを使用できるかどうかを確認しようとします。user.security
ファイルがハンドラで使用できる場合は、管理者としてデータベースにログインします。セキュリティ・プロパティ・ファイルがハンドラで使用できない場合は、AuthType
(基本またはKerberos)を確認します。Oracle NoSQLストアがセキュリティが無効の状態で実行するように構成されている場合、ハンドラはauthType
をnone
に設定して、NoSQLストアへのアクセスを許可します。
親トピック: 詳細な機能
16.3 Oracle NoSQLハンドラの構成
Oracle NoSQLハンドラの操作は、プロパティ・ファイルを使用して構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。
Oracle NoSQLハンドラの選択を有効にするには、まずgg.handler.name.type=nosql
を指定してハンドラ・タイプを構成してから、次に示す他のOracle NoSQLプロパティを構成する必要があります。
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
任意の文字列。 |
なし |
Oracle NoSQLハンドラの名前を指定します。Oracle NoSQLハンドラ名は、この表にリストしたプロパティ名の一部になります。 |
|
必須 |
|
なし |
Oracle NoSQL Databaseにチェンジ・データ・キャプチャをストリーミングするOracle NoSQLハンドラを選択します。 |
|
オプション |
|
|
Oracle NoSQLハンドラは表名にスキーマ名を追加し、これをNoSQLストアに完全修飾の表名として格納します。 |
|
オプション |
|
|
デフォルトが推奨されます。 |
|
必須 |
任意の文字列。 |
なし |
ストアの名前。指定する名前は、ストアをインストールしたときに使用した名前と同じにする必要があります。 |
|
必須 |
任意の文字列。 |
なし |
現在ストアに属しているノードのネットワーク名とポート情報。 |
|
オプション |
|
|
Oracle NoSQLハンドラは、1つの操作がその都度処理される対話型モード、または操作のグループが一緒に処理されるバッチ・モードで処理できます。 |
|
オプション |
|
なし |
指定するDDL機能についてOracle NoSQLハンドラを構成します。オプションには、
|
|
オプション |
任意の数値。 |
3 |
Oracle NoSQLハンドラが検出した読取りまたは書込み例外の再試行回数。 |
|
オプション |
有効なユーザー名の文字列。 |
なし |
Oracle NoSQLストアへの接続用のユーザー名。 |
|
オプション |
有効なパスワードの文字列。 |
なし |
Oracle NoSQLストアへの接続用のパスワード。 |
|
オプション |
|
なし |
Oracle NoSQLストアにログインする際の認証タイプ。
|
|
オプション |
セキュリティ・ファイルの相対パスまたは絶対パス。 |
なし |
セキュリティ・ファイルにより、Oracle NoSQLハンドラはKVストアに管理者としてアクセスできます。 |
|
オプション |
信頼ファイルの相対パスまたは絶対パス。 |
なし |
SSLトランスポートを有効にするパブリック信頼ファイル。 |
|
オプション |
Kerberosキー・タブ・ファイルの相対パスまたは絶対パス |
なし |
キー・タブ・ファイルを使用すると、Oracle NoSQLハンドラがパスワードにアクセスし、Kerberosセキュリティに対して |
|
オプション |
|
なし |
Kerberos認証で用いるKerberosプリンシパル名。 |
|
オプション |
Kerberosレルム名 |
なし |
Kerberos認証用のKerberosレルム名。 |
|
オプション |
完全修飾のデータ・コンバータ・クラス名。 |
|
カスタム・データ・コンバータを実装して、特定のユースケースをサポートするデフォルトのデータ変換ロジックをオーバーライドできます。 |
親トピック: Oracle NoSQLハンドラの使用
16.4 サンプル構成の確認
Javaアダプタ・プロパティ・ファイル内のOracle NoSQLDBハンドラのサンプル構成を次に示します。
gg.handlerlist=nosql
#The handler properties
gg.handler.nosql.type= nosql
gg.handler.nosql.mode= op
gg.handler.nosql.nosqlStore= kvstore
gg.handler.nosql.nosqlURL= localhost:5000
gg.handler.nosql.ddlHandling= CREATE,ADD,DROP
gg.handler.nosql.interactiveMode=true
gg.handler.nosql.retries= 2
gg.handler.nosql.authType=basic
gg.handler.nosql.username= ORACLEWALLETUSERNAME[myalias mydomain]
gg.handler.nosql.password= ORACLEWALLETPASSWORD[myalias mydomain]
親トピック: Oracle NoSQLハンドラの使用
16.5 パフォーマンスに関する考慮事項
バッチ・モードのOracle NoSQLハンドラを構成すると、対話型モードよりも高いパフォーマンスが得られます。バッチ処理モードは、主キーの同じシャード・キー部分を共有する表に関連付けられた一連の操作を実行するための効率的なトランザクション・メカニズムを提供します。単一のネットワーク相互作用を使用して一連の操作全体を実行することにより、効率が向上します。バッチに指定されたすべての操作は、シリアライズ可能分離を効率的に提供する単一トランザクションのスコープ内で実行されます。
親トピック: Oracle NoSQLハンドラの使用
16.6 完全イメージのデータの要件
Oracle NoSQLでは、更新操作は、行全体のデータの完全な再挿入を実行します。このOracle NoSQLの機能により、収集のパフォーマンスが向上しますが、その結果重要な要件が追加されます。更新は、すべての列のデータを含める必要があります(完全イメージ更新とも呼ばれます)。部分的なイメージ更新はサポートされていません(主キー情報および変更された列のデータのみを含む更新)。部分的なイメージ更新情報を含むOracle NoSQLハンドラを使用すると、ターゲットNoSQL表のデータが不完全になります。
親トピック: Oracle NoSQLハンドラの使用