Oracle GoldenGate for Big Data統合は、Oracle GoldenGate Java Deliveryフレームワークへのプラガブル機能として実行され、Javaアダプタ・フレームワークとも言います。この機能は、Java Deliveryの機能を拡張します。Oracle GoldenGateアプリケーション・アダプタ・ガイドで、Java Deliveryのドキュメントを参照することをお薦めします。ビッグ・データ機能の大半は、Java Deliveryの機能を採用して拡張しています。
Oracle GoldenGate for Big Data統合は、実行時にJava仮想マシンのインスタンスを作成します。Oracle GoldenGate for Big DataにはJava 7が必要です。Java 7のインストール・ディレクトリを指すようにJAVA_HOME環境変数を設定することをお薦めします。また、Java Deliveryプロセスはlibjvm.so (Windowsではlibjvm.dll)とlibjsig.so (Windowsではlibjsig.dll)のJava共有ライブラリをロードする必要があります。これらのライブラリは、JREの一部としてインストールされます。これらの共有ライブラリの場所を解決する必要があり、動的なライブラリを解決するように設定された適切な環境変数を、実行時にロードできます(つまり、LD_LIBRARY_PATH、PATHまたはLIBPATH)。
Oracle GoldenGate Java Deliverのユーザー・エグジット(Oracle GoldenGate Javaアダプタとも言う)を実行するために必要なOracle GoldenGateプロパティ・ファイルが、2つあります。ビッグ・データ統合を含むJava統合をホストするOracle GoldenGate Java Deliveryです。Oracle GoldenGate Java Deliveryは、Oracle GoldenGate ReplicatまたはExtractプロセスとともに実行できますが、Replicatプロセスとともに実行するほうが適していると考えられています。ReplicatまたはExtractプロセスを実行するには、ReplicatまたはExtractプロパティ・ファイルが必要です。ReplicatまたはExtractファイルに必要な命名規則は、process_name.prmです。ReplicatまたはExtractプロパティ・ファイルでのエグジット構文には、Javaアダプタ・プロパティ・ファイルの名前と場所を指定します。Javaアダプタの構成プロパティにビッグ・データ統合が含まれるのは、Javaアダプタ・プロパティ・ファイルです。Oracle GoldenGate for Big Data統合を実行するには、両方のプロパティ・ファイルが必要です。あるいは、デフォルト構文process_name.propertiesを使用しても、Javaアダプタ・プロパティは解決できます。Javaアダプタ・プロパティ・ファイルのデフォルトの命名を使用すると、Javaアダプタ・プロパティ・ファイルの名前をReplicatまたはExtractのプロパティ・ファイルから省略できます。
Oracle GoldenGate for Big Data統合のプロパティ・ファイルの例は、次のディレクトリのサブディレクトリにあります。
GoldenGate_install_dir/AdapterExamples/big-data
Oracle GoldenGate for Big Data統合でパフォーマンスを向上させる主な方法が、トランザクションのグループ化を利用する方法です。トランザクションのグループ化では、複数のトランザクションの操作をグループ化し、1つの大きいトランザクションにまとめます。大きいグループにまとめられたトランザクションを実行したほうが、通常は、小さい個別のトランザクションを実行するより効率的だからです。トランザクションのグループ化は、ReplicatとExtractのどちらのプロセスでも可能で、ReplicatまたはExtractプロセスでの実行の詳細は、次の項以降で説明します。
この項では、Oracle GoldenGate ReplicatプロセスでJavaアダプタを実行する方法について説明します。
JavaアダプタのReplicatプロセス・プロパティ・ファイルの例を次に示します。
REPLICAT hdfs TARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.properties --SOURCEDEFS ./dirdef/dbo.def DDL INCLUDE ALL GROUPTRANSOPS 1000 MAPEXCLUDE dbo.excludetable MAP dbo.*, TARGET dbo.*;
次に示すのは、Replicat構成エントリの説明です。
REPLICAT hdfs - Replicatプロセスの名前。
TARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.properties - libggjava.soを終了するときのターゲット・データベースを指定し、Javaアダプタ・プロパティ・ファイルをdirprm/hdfs.propertiesに設定します
--SOURCEDEFS ./dirdef/dbo.def - ソース・データベース定義ファイルを設定します。Oracle GoldenGate 12.2.0.1の証跡ファイルは証跡でメタデータを提供するため、コメント・アウトされています。
GROUPTRANSOPS 1000: ソース証跡ファイルからの1000個のトランザクションを1つのターゲット・トランザクションにグループ化します。これがデフォルトで、ビッグ・データ統合のパフォーマンスが向上します。
MAPEXCLUDE dbo.excludetable - 除外する表を指定します。
MAP dbo.*, TARGET dbo.*; - 入力表から出力表へのマッピングを示します。
ggsciでReplicatプロセスを追加して起動するコマンドは、次のとおりです。
ADD REPLICAT hdfs, EXTTRAIL ./dirdat/gg START hdfs
Replicatプロセスは、Replicat構成プロパティGROUPTRANSOPSを提供してトランザクションのグループ化を制御します。デフォルトでは、Replicatプロセスは1000個のトランザクションを1つのターゲット・トランザクションにグループ化します。トランザクションのグループ化をオフにする場合は、ReplicatプロパティGROUPTRANSOPSを1に設定します。
CHECKPOINTTABLEとNODBCHECKPOINTは、Replicatを使用するJava Deliveryには該当しません。Replicatチェックポイント・ファイル(.cpr)のほか、RDBMSのReplicatにおけるCHECKPOINTTABLEと似た情報を含む追加のチェックポイント・ファイル(dirchk/<group>.cpj)も作成されます。
次のReplicat機能は、このリリースではサポートされません。
BATCHSQL
SQLEXEC
Stored Procedure
競合の解決および検出(CDR)
REPERROR
Oracle GoldenGate Replicatプロセスは、カスタム・ターゲット・スキーマへのマッピングをサポートしています。この機能は、Oracle GoldenGate Extractプロセスを使用する場合には利用できません。メタデータ・プロバイダ機能を使用して、ターゲット・スキーマ(複数も可)を定義してから、Replicat構成ファイルで標準のReplicatマッピング構文を使用して、マッピングを定義する必要があります。レプリケーション構成ファイルでのReplicatマッピング構文については、Oracle GoldenGate Replicatのドキュメントを参照してください。メタデータ・プロバイダの設定の詳細は、「メタデータ・プロバイダの使用」を参照してください。
この項では、Oracle GoldenGate ExtractプロセスでJavaアダプタを実行する方法について説明します。
次の
EXTRACT hdfs discardfile ./dirrpt/avro1.dsc, purge --SOURCEDEFS ./dirdef/dbo.def CUSEREXIT libjavaue.so CUSEREXIT PASSTHRU, INCLUDEUPDATEBEFORES, PARAMS "dirprm/hdfs.props" GETUPDATEBEFORES TABLE dbo.*;
次に示すのは、Replicat構成エントリの説明です。
EXTRACT hdfs - Extractのプロセス名。
discardfile ./dirrpt/avro1.dsc, purge - 破棄ファイルを設定します
--SOURCEDEFS ./dirdef/dbo.def - 12.2の証跡ファイルにはソース定義が必要です。
CUSEREXIT libjavaue.so CUSEREXIT PASSTHRU, INCLUDEUPDATEBEFORES, PARAMS "dirprm/hdfs.props" - エグジット共有ライブラリを設定し、Javaアダプタ・プロパティ・ファイルを指定します
GETUPDATEBEFORES - 操作前イメージを取得します。
TABLE dbo.*; - 複製またはフィルタに除外する表を選択します。
Extractプロセスには、トランザクションをグループ化する機能はありません。ただし、Java DeliveryをExtractプロセスと統合すれば、同様にトランザクションのグループ化が可能です。Java Delivery層では、Javaアダプタ・プロパティ・ファイルでの構成を利用してトランザクションをグループ化できます。
gg.handler.name.mode
グループ化を有効にするには、このプロパティの値をtxに設定する必要があります。
gg.handler.name.maxGroupSize
操作グループによって保持できる操作の最大数を制御します。その操作グループが保持する操作は、1つのトランザクションからのものか複数のトランザクションからのものかは問いません。
操作グループは、トランザクションのコミットを送信し、この操作数に達するとすぐに、グループを終了します。このプロパティで、複数の操作グループ間にトランザクションを分割します。
gg.handler.name.minGroupSize
これは、グループを終了する前にグループに存在する必要がある操作の最小数です。
このプロパティを使用すると、複数の小さいトランザクションを1つの操作グループにグループ化して、小さすぎるグループを回避できるので、処理が効率的になります。
注意:
maxGroupSizeは、常にminGroupSize以上でなければなりません。つまり、maxGroupSize >= minGroupSizeとなります。
注意:
ReplicatプロセスでJava Deliveryを実行する場合は、Java層のトランザクションのグループ化は使用しないことをお薦めします。Replicatプロセスで実行する場合は、ReplicatプロパティGROUPTRANSOPSによって制御されるReplicatトランザクションのグループ化を使用する必要があります。
ビッグ・データのターゲットに対して使用するOracle GoldenGate for Big Data統合をトラブルシューティングするには、ロギングが必須です。この項では、Oracle GoldenGate for Big Data統合のログと、ロギングのベスト・プラクティスについて説明します。
Oracle GoldenGate for Big Data統合は、Java Deliveryの機能を利用します。Java Deliveryについては、Oracle GoldenGateアプリケーション・アダプタ・ガイドを参照してください。この設定では、Oracle GoldenGateのReplicatまたはExtractプロセスがユーザー・エグジット共有ライブラリをロードします。この共有ライブラリは次に、Java仮想マシンをロードし、それによってJavaインタフェースを提供するターゲットとのインタフェースをとります。したがって、データのフローは次のようになります。
Extractプロセス > ユーザー・イグジット > Javaレイヤー
または
Replicatプロセス > ユーザー・イグジット > Javaレイヤー
ユーザーがログを見直して新しいインストールと統合をトラブルシューティングするには、すべての層で正しくログを記録することが重要です。また、問題が発生してOracleサポートへの連絡が必要になった場合も、ログ・ファイルは問題を効率的に解決するために、Oracleサポートに提供する情報としても重要です。
ReplicatまたはExtractプロセスを実行すると、<GG Home>/dirrptディレクトリにログ・ファイルが作成または裁可されます。ファイルの命名規則は、<Replicat or Extract process name>.rptです。新しいOracle GoldenGateプロセスをデプロイするときに問題が発生した場合は、最初に問題の有無を調べるべきログの候補です。Java層には、ビッグ・データ・アプリケーションとの統合に伴う多くの困難があります。したがって、Oracle GoldenGate Big Data統合の初期設定を実行するとき、Java層では多くの問題が発生する可能性があります。そのため、Java層でのロギングの制御方法を理解する必要があります。
Oracle GoldenGate for Big Data製品には、Java層からログを記録できる柔軟性があります。ベスト・プラクティスとしては、Log4jロギングを使用してJava層からログを記録することをお薦めします。単純なLog4jロギングを有効にするには、Javaアダプタ構成ファイルで2つの構成値を設定する必要があります。
gg.log=log4j gg.log.level=INFO
gg.log設定で、Log4jファイルはGoldenGate_Home/dirrptディレクトリに作成され、ファイル名はReplicat or Extract process name_log level_log4j.logという命名規則に従います。サポートされるLog4jログ・レベルは、ロギングの粒度の順に次のリストになります。
OFF
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
ロギング・レベルの選択には、粒度が低いほうのロギング・レベルがすべて含まれます(つまり、WARNを選択した場合は、FATAL、ERROR、WARNのログ・メッセージがログ・ファイルに書き込まれます)。Log4jロギングはまた、個々のLog4jプロパティ・ファイルでも制御できます。こうした個別のLog4jプロパティ・ファイルを有効にするには、Javaアダプタ・プロパティ・ファイルでbootoptionsプロパティを編集します。Log4jプロパティ・ファイルの3つの例が、インストール時に追加され、次のクラスパスにも含まれています。
log4j-default.properties log4j-debug.properites log4j-trace.properties
これらのファイルのいずれかで、次のようにbootoptionsを変更できます。
javawriter.bootoptions=-Xmx512m -Xms64m -Djava.class.path=.:ggjava/ggjava.jar -Dlog4j.configuration=samplelog4j.properties
カスタマイズした独自のLog4jプロパティ・ファイルを使用してロギングを制御できます。カスタマイズしたLog4jプロパティ・ファイルを、JVMが検索してロードするには、それがJavaクラスパスに存在する必要があります。カスタムLog4jプロパティ・ファイルの例を次に示します。
# Root logger option
log4j.rootLogger=INFO, file
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=sample.log
log4j.appender.file.MaxFileSize=1GB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
カスタムのLog4jプロパティ・ファイルを使用する場合には、重要な要件が2つあります。1つ目に、カスタムLog4jプロパティ・ファイルのパスがjavawriter.bootoptionsプロパティに含まれる必要があります。ロギングは、ロギングの書記化後にgg.classpathプロパティの内容が実際にclassloaderに追加されるとき、JVMが初期化されるとただちに初期化されます。2つ目に、プロパティ・ファイルを正しくロードするclasspathは、ワイルドカードを追加していないプロパティ・ファイルを含むディレクトリである必要があります。
Oracle GoldenGate 12.2の新機能の1つが、メタデータ変更イベントをソース・データベースから証跡ファイルに伝播することです。リリース12.2では、この機能はOracle Databaseのレプリケーション・ソースに限定されます。この機能を有効にする方法は、Oracle GoldenGate for Oracle Databaseのドキュメントを参照してください。
Oracle GoldenGate for Big Dataのハンドラとフォーマッタには、メタデータ変更イベントが発生したときにアクションを実行する機能があります。メタデータ変更イベントが発生したときにアクションを実行できる機能は、ソース証跡ファイルで利用できるメタデータ変更イベントによって異なります。Oracle GoldenGate 12.2は、ソースのOracleデータベースからの証跡のメタデータと、DDLデータを伝播をサポートします。ソース証跡ファイルに、証跡のメタデータとDDLデータ(メタデータ変更イベント)がない場合、Oracle GoldenGate for Big Dataはメタデータ変更イベントを処理できません。
CDATA[]のラッピングのビッグ・データ・ハンドラおよびフォーマッタでは、値を空白として解釈できるJavaプロパティ・ファイルで、多くのパラメータの構成がサポートされています。Javaアダプタの構成処理では、Java構成ファイルの構成値から空白が削除されます。空白を削除するこの動作は、構成値によっては望ましいこともありますか、別の構成値には望ましくない場合もあります。空白文字を削除する場合、空白のまま残す機能がデフォルトです。一部の構成値で空白が維持されるように、空白値を特殊な構文でラップできる新機能が追加されました。Oracle for Big Dataは、空白を維持するためにCDATA[]のXML構文を借用しています。空白文字と見なされる値を、CDATA[]の内部にラップできます。
区切りテキスト・フォーマッタで、改行を区切り文字として設定しようとする例を次に示します。
gg.handler.{name}.format.lineDelimiter=\n
この構成は成功しません。改行文字は空白として解釈され、構成値から削除されてしまうからです。したがって、gg.handler設定では実質的に、行区切り文字が空白文字列に設定されます。
改行文字の構成を維持するには、次のように、その文字をCDATA[]ラッパーでラップするだけです。
gg.handler.{name}.format.lineDelimiter=CDATA[\n]
CDATA[]のラッピングでパラメータを構成すると、空白が維持され、行区切り文字は改行文字になります。CDATA[]ラッピングをサポートするパラメータを、このドキュメントで明示的にリストします。
個別に構成されるスキーマ・データ(カタログ名、スキーマ名、表名、列名)と列値データの両方についてより強力な検索および置換操作を実行できます。正規表現(regex)は、パターン・マッチングを通じて検索文字列をカスタマイズする文字列です。文字列を1つのパターンまたは正確に一致する部分に一致させることができます。Oracle GoldenGate for Big Dataでは、標準のOracle Java正規表現パッケージjava.util.regexを使用します。詳細は、The Single UNIX Specification, Version 4の「Base Definitions」巻にある正規表現に関する内容を参照してください。
gg.schemareplaceregexおよびgg.schemareplacestringパラメータを使用してスキーマ・データを置換できます。gg.schemareplaceregexを使用して正規表現を設定してから、それを使用してカタログ名、スキーマ名、表名、および列名で対応する一致項目を検索します。一致項目はgg.schemareplacestring値の内容に置き換えられます。gg.schemareplacestringのデフォルト値は空の文字列または""です。
たとえば、システム表名の中には、$mytableのようにドル記号から始まるものがあります。ほとんどのビッグ・データ・ターゲットでは表名にドル記号を使用できませんが、これらの表を複製する必要がある場合があります。ドル記号を削除するには、次の置換文字列を構成できます。
gg.schemareplaceregex=[$] gg.schemareplacestring=
検索および置換された表名の結果の例はmytableです。これらのパラメータはCDATA[]ラッピングもサポートして、構成値の値の空白を保持します。したがって、前と同じ例でCDATA[]ラッピングすると次のようになります。
gg.schemareplaceregex=CDATA[[$]] gg.schemareplacestring=CDATA[]
スキーマの検索および置換機能は、1つの検索正規表現と1つの置換文字列のみをサポートします。
gg.contentreplaceregexおよびgg.contentreplacestringパラメータを使用してコンテンツ・データを置換し、構成された正規表現を使用して列値を検索して、一致項目を置換文字列で置換できます。たとえば、これは列値の改行文字を置き換えるのに役立ちます。区切りテキスト・フォーマッタが使用された場合、データに含まれる改行文字は分析ツールで行区切り文字として誤って解釈されます。
n個のコンテンツ置換regex検索値を構成できます。regex検索および置換は、構成の順序で実行されます。構成される値は、次の特定の順序に従う必要があります。
gg.conentreplaceregex=some_regex gg.conentreplacestring=some_value gg.conentreplaceregex1=some_regex gg.conentreplacestring1=some_value gg.conentreplaceregex2=some_regex gg.conentreplacestring2=some_value
添え字2を使用せずに添え字3を構成すると、添え字3の構成が無視されます。
注意
正規表現の検索と置換にはコンピューティング処理が必要で、Oracle GoldenGate for Big Dataプロセスのパフォーマンスが低下する可能性があります。
改行を空白文字に置き換えるには、次のパラメータ構成を使用できます。
gg.contentreplaceregex=[\n] gg.contentreplacestring=CDATA[ ]
これによって、列値が次の値から変更されます。
this is me
変更後の値は次のとおりです。 :
this is me
どちらの値もCDATAラッピングをサポートします。2つ目の値はCDATA[]ラッパーでラップする必要があります。1つの空のスペースは空白と解釈されて、Oracle GoldenGate for Big Data構成層でトリミングされます。さらに、複数の検索および置換文字列を構成できます。たとえば、次の文字列から改行を削除するのに加え、列値から先頭および末尾の空白も削除します。
^\\s+|\\s+$
gg.contentreplaceregex1=^\\s+|\\s+$ gg.contentreplacestring1=CDATA[]
次のようにします。
Oracle GoldenGateの資格証明ストアはユーザーIDおよびその暗号化されたパスワード(ともに資格証明と呼ばれます)を管理します。これらはOracle GoldenGateプロセスにより使用され、ローカル・データベースと対話します。資格証明ストアを使用すると、Oracle GoldenGateのパラメータ・ファイルにユーザー名およびクリアテキスト・パスワードを指定する必要がなくなります。ユーザーIDのかわりにパラメータ・ファイルのオプションの別名を使用して、資格証明ストアのユーザーIDとパスワードのペアにマップすることもできます。資格証明ストアはOracle Credential Store Framework (CSF)内の自動ログイン・ウォレットとして実装されます。LDAPディレクトリの使用は、Oracle GoldenGate資格証明ストアではサポートされていません。自動ログイン・ウォレットは、必要なパスワードを指定するための人の介在を必要とせず、Oracle GoldenGateプロセスの自動再起動をサポートします。
Oracle GoldenGate for Big Dataでは、実際のユーザーIDまたはパスワードではなく、別名およびドメインをプロパティ・ファイルで指定します。
ユーザー資格証明は、セキュアなウォレット・ストレージで管理されます
ビッグ・データ環境用の資格証明ストアを作成できます。
GGSCI ADD CREDENTIALSTOREコマンドを使用して、Oracle GoldenGateインストール・ディレクトリ(デフォルト)のdircrd/サブディレクトリにあるcwallet.ssoという名前のファイルを作成します。
資格証明ストアcwallet.ssoファイルの場所を指定するには、GLOBALSファイルのCREDENTIALSTORELOCATIONパラメータで目的の場所を指定します。
資格証明ストアのコマンドの詳細は、『Oracle GoldenGateリファレンスfor Windows and UNIX』を参照してください。
注意:
Oracle GoldenGateインスタンスごとに1つの資格証明ストアのみ使用できます。
ビッグ・データ環境の資格証明ストアを作成した後、ストアにユーザーを追加できます。
各ユーザーを作成するにはGGSCI ALTER CREDENTIALSTORE ADD USER userid PASSWORD password [ALIAS alias] [DOMAIN domain]コマンドを実行します。
useridはユーザー名です。資格証明ストアに配置できるユーザー名のインスタンスは1つのみです(ALIASまたはDOMAINオプションが使用されていない場合)。
passwordはユーザーのパスワードです。このオプションを使用すると、パスワードはエコーされます(不明瞭化されません)。このオプションを省略すると、コマンドはパスワードを要求しますが、入力時に不明瞭化されます(より安全な方法として推奨されます)。
aliasはユーザー名の別名です。ログイン資格証明が必要なパラメータとコマンドでは、資格証明のかわりに別名を使用します。ALIASオプションを省略すると、別名はデフォルトでユーザー名に設定されます。
次に例を示します。
ALTER CREDENTIALSTORE ADD USER scott PASSWORD tiger ALIAS scsm2 domain ggadapters
資格証明ストアのコマンドの詳細は、『Oracle GoldenGateリファレンスfor Windows and UNIX』を参照してください。
Oracle GoldenGate Java Adapterプロパティ・ファイルでは、実行時に資格証明ストアのユーザー名とパスワード・エントリを解決する固有の構文が必要です。ユーザー名を解決するための構文は次のとおりです。
ORACLEWALLETUSERNAME alias domain_name
パスワードを解決するための構文は次のとおりです。
ORACLEWALLETPASSWORD alias domain_name
次の例は、myaliasという別名とmydomainというドメインで資格証明ストアのエントリを構成する方法を示しています。
注意:
HDFS Hive JDBCでは、ユーザー名とパスワードが暗号化されます。
gg.handler.hdfs.hiveJdbcUsername=ORACLEWALLETUSERNAME[myalias mydomain] gg.handler.hdfs.hiveJdbcPassword=ORACLEWALLETPASSWORD[myalias mydomain]
資格証明ストアは、ユーザー名とパスワードのペア・タイプの証明書を保存するためのものですが、この機能はさらに一般的に適用できます。ユーザー名とパスワードのエントリは資格証明ストアでアクセス可能な値と見なされます。Java Adapter層で解決される(Cユーザー・イグジット層ではアクセスされない)構成パラメータは資格証明ストアから解決できます。この機能は、機密情報を含む構成エントリを保護する方法に柔軟性を持たせるために開発されました。