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をサポートしていません。

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.ddlHandlingCREATEが含まれる場合、データベースに表が作成されます。それ以外の場合、プロセスは異常終了し、表が存在しないことを示すメッセージが記録されます。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ストアがセキュリティが無効の状態で実行するように構成されている場合、ハンドラはauthTypenoneに設定して、NoSQLストアへのアクセスを許可します。

16.3 Oracle NoSQLハンドラの構成

Oracle NoSQLハンドラの操作は、プロパティ・ファイルを使用して構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

Oracle NoSQLハンドラの選択を有効にするには、まずgg.handler.name.type=nosqlを指定してハンドラ・タイプを構成してから、次に示す他のOracle NoSQLプロパティを構成する必要があります。

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

gg.handlerlist

必須

任意の文字列。

なし

Oracle NoSQLハンドラの名前を指定します。Oracle NoSQLハンドラ名は、この表にリストしたプロパティ名の一部になります。

gg.handler.name.type

必須

nosql

なし

Oracle NoSQL Databaseにチェンジ・データ・キャプチャをストリーミングするOracle NoSQLハンドラを選択します。

gg.handler.name.fullyQualifiedTableName

オプション

true | false

false

Oracle NoSQLハンドラは表名にスキーマ名を追加し、これをNoSQLストアに完全修飾の表名として格納します。

gg.handler.name.mode

オプション

op | tx

op

デフォルトが推奨されます。opモードでは、操作は受信したとおりに処理されます。txモードでは、操作はトランザクションのコミット時にキャッシュされ、処理されます。tx モードのほうが低速で、作成されるメモリー・フットプリントが大きくなります。

gg.handler.name.nosqlStore

必須

任意の文字列。

なし

ストアの名前。指定する名前は、ストアをインストールしたときに使用した名前と同じにする必要があります。

gg.handler.name.nosqlURL

必須

任意の文字列。

なし

現在ストアに属しているノードのネットワーク名とポート情報。

gg.handler.name.interactiveMode

オプション

true | false

true

Oracle NoSQLハンドラは、1つの操作がその都度処理される対話型モード、または操作のグループが一緒に処理されるバッチ・モードで処理できます。

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.username

オプション

有効なユーザー名の文字列。

なし

Oracle NoSQLストアへの接続用のユーザー名。AuthTypebasicに設定されている場合、これは必須です。

gg.handler.name.password

オプション

有効なパスワードの文字列。

なし

Oracle NoSQLストアへの接続用のパスワード。AuthTypebasicに設定されている場合、これは必須です。

gg.handler.name.authType

オプション

basic| kerberos| none

なし

Oracle NoSQLストアにログインする際の認証タイプ。

authTypebasicに設定されている場合は、ログインするためのユーザー名とパスワードが必要です。

authTypeがKerberosに設定されている場合は、ログインするためのKerberosプリンシパル、KerberosレルムおよびKerberosキー・タブ・ファイルの場所が必要です。

gg.handler.name.securityPropertiesFile

オプション

セキュリティ・ファイルの相対パスまたは絶対パス。

なし

セキュリティ・ファイルにより、Oracle NoSQLハンドラはKVストアに管理者としてアクセスできます。

gg.handler.name.publicTrustFile

オプション

信頼ファイルの相対パスまたは絶対パス。

なし

SSLトランスポートを有効にするパブリック信頼ファイル。

gg.handler.name.kerberosKeyTabFile

オプション

Kerberosキー・タブ・ファイルの相対パスまたは絶対パス

なし

キー・タブ・ファイルを使用すると、Oracle NoSQLハンドラがパスワードにアクセスし、Kerberosセキュリティに対してkinit操作を実行できます。

gg.handler.name.kerberosPrincipal

オプション

user/FQDN@MY.REALMなどの有効なKerberosプリンシパル名

なし

Kerberos認証で用いるKerberosプリンシパル名。

gg.handler.name.kerberosRealm

オプション

Kerberosレルム名

なし

Kerberos認証用のKerberosレルム名。

gg.handler.name.dataConverterClass

オプション

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

DefaultDataConverter

カスタム・データ・コンバータを実装して、特定のユースケースをサポートするデフォルトのデータ変換ロジックをオーバーライドできます。

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]

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

バッチ・モードのOracle NoSQLハンドラを構成すると、対話型モードよりも高いパフォーマンスが得られます。バッチ処理モードは、主キーの同じシャード・キー部分を共有する表に関連付けられた一連の操作を実行するための効率的なトランザクション・メカニズムを提供します。単一のネットワーク相互作用を使用して一連の操作全体を実行することにより、効率が向上します。バッチに指定されたすべての操作は、シリアライズ可能分離を効率的に提供する単一トランザクションのスコープ内で実行されます。

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

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