内容は次のとおりです。
Oracle GoldenGate環境で使用するために表を準備するには、次のタスクを実行する必要があります。
ターゲット表のトリガー、カスケード削除制約、カスケード更新制約を無効にするか、これらを変更してOracle GoldenGateデータベース・ユーザーによる変更が無視されるようにします。Oracle GoldenGateでは、トリガーまたはカスケード制約の結果として生成されるDMLがレプリケートされます。同じトリガーや制約がターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。ソース表にemp_src
とsalary_src
、ターゲット表にemp_targ
とsalary_targ.
を使用している次の例について考えます
emp_src
に対して削除が発行されます。
それによって、削除がsalary_src
にカスケードされます。
Oracle GoldenGateが、両方の削除をターゲットに送信します。
まず親削除が到着し、emp_targ
に適用されます。
親削除によって、削除がsalary_targ
にカスケードされます。
salary_src
からカスケードされた削除がsalary_targ
に適用されます。
行は、すでに手順5で削除されているため、見つかりません。
親トピック: 処理のための表の準備
Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表にある形式の一意の行識別子が必要です。
TABLE
またはMAP
文でKEYCOLS
句が使用されないかぎり、Oracle GoldenGateは、使用する行識別子を次の優先順位に従って選択します。
主キー
タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順で最初の一意キー。
前述のキー・タイプのいずれも存在しない場合(その他の種類のキーが表に定義されている場合でも)、Oracle GoldenGateは、データベースで一意キーでの使用を許可されているすべての列(キー内での使用がOracle GoldenGateでサポートされていない列やOracle GoldenGate構成から除外されている列は除く)で疑似キーを作成します。
注意:
表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE
句が使用される原因となります。
親トピック: 行識別子の割当て
KEYCOLS
を使用したカスタム・キーの指定 前述のキー・タイプの行識別子が表に存在しないか、または、それらの識別子を使用しない場合は、常に一意の値が含まれている列が表にあれば、代替キーを定義できます。ExtractのTABLE
パラメータおよびReplicatのMAP
パラメータ内にKEYCOLS
句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。詳細は、『Oracle GoldenGateリファレンス』を参照してください。
注意:
レコードのRRNを表のキーとして使用する場合は、処理される各レコードのRRNが格納されるGGHEADER
Oracle GoldenGate環境変数のAUDITRBA
にアクセスします。
親トピック: 行識別子の割当て
ROWID
列の処理ROWID GENERATED ALWAYS
(デフォルト)のデータ型の列を含むターゲット表に挿入しようとすると、次のODBCエラーで失敗します。
ODBC error: SQLSTATE 428C9 native database error -798. {DB2 FOR OS/390}{ODBC DRIVER}{DSN08015} DSNT408I SQLCODE = -798, ERROR: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE OPTION GENERATED ALWAYS. COLUMN NAME ROWIDCOL.
次のいずれかを行って、ROWID
列を含む表がOracle GoldenGateによって処理されるように準備します。
ターゲット表のROWID
列がGENERATED BY DEFAULT
として定義されていることを確認します。
表定義を変更できない場合、次の手順を使用して回避します。
ROWID GENERATE ALWAYS
を回避する手順:
ソース表に対するExtract TABLE
文を作成し、その文で、ROWID
列を除外するCOLSEXCEPT
句を使用します。次に例を示します。
TABLE tab1, COLSEXCEPT (rowidcol);
COLSEXCEPT
句で、ROWID
列が取得されてターゲット表にレプリケートされないようにします。
ターゲット表では、ReplicatがROWID
をキーとして使用しないようにします。これは、次のいずれかの方法で行えます。
ターゲット表定義で主キーを指定します。
キーを作成できない場合、表に対するReplicat MAP
パラメータを作成し、その文にKEYCOLS
句を使用してROWID
列以外の一意の列を含めます。Replicatは、それらの列をキーとして使用します。次に例を示します。
MAP tab1, TARGET tab1, KEYCOLS (num, ckey);
KEYCOLS
の詳細は、「行識別子の割当て」を参照してください。
親トピック: 処理のための表の準備
この項では、SQL ServerデータベースへのExtractおよびReplicatの接続を設定する手順について説明します。
次のDB2 for z/OS初期化パラメータがOracle GoldenGateに適用されます。Oracle GoldenGateプロセスを起動する前に適切に設定される必要があります。
MVSDEFAULTSSID
: DB2サブシステムに設定します。
LOCATION
: DB2ブートストラップ・データセットに格納されているDB2の場所の名前に設定します。
MVSATTACHTYPE
: RRSAF
(Recoverable Resource Manager Services Attachment Facility)またはCAF
(Call Attachment Facility)に設定します。IBM社は、RRSAF
の使用を推奨しています。
MULTICONTEXT:
: RRSAF
を使用する場合、1に設定します。
PLANNAME
: DB2プランに設定します。デフォルト・プラン名はDSNACLI
です。
CURRENTAPPENSCH
初期化パラメータ(キーワード)を使用しないでください。
注意:
CAF
接続タイプを使用する場合、DB2に接続するExtractまたはReplicatプロセスのパラメータ・ファイルにOracle GoldenGate DBOPTIONS
パラメータを含め、NOCATALOGCONNECT
オプションを指定する必要があります。このパラメータによって、Oracle GoldenGateによる通常の試行が無効化され、DB2カタログに対して2つ目のスレッドが取得されなくなります。そうしない場合、ODBC operation failed: Couldn't connect to
data source
for catalog queries.
のようなエラー・メッセージを受信します。
親トピック: データベース接続の構成
次の例のように、z/OS UNIXプロファイルにDSNAOINI
環境変数を設定し、ODBC初期化ファイルを指定します。
export DSNAOINI="/etc/odbc810.ini"
親トピック: データベース接続の構成
DB2 ODBC初期化ファイルを正しく構成したことを確認するには、『DB2 UDB for z/OS ODBC Guide and Reference』のガイドラインに従います。重要な考慮事項の1つは、大カッコの開始と終了([および])のコーディングです。大カッコは、異なるコード化文字セットID (CCSID)で異なってエンコードされる可変文字ですが、ODBC初期化ファイルでは、IBM-1047 CCSIDのものである必要があります。DB2 ODBCは、他のCCSIDのカッコを認識しません。次の点に注意してください。
1つ目(開始)のカッコは、16進文字X'AD'
(0xAD
)を使用する必要があります。
2つ目(終了)のカッコは、16進文字X'BD'
(0xBD
)を使用する必要があります。
正しい大カッコのコードを設定するには、次のいずれかの方法を使用します。
OEDITでhex
コマンドを使用して、各文字の16進コードを適切に変更します。
iconv
ユーティリティを使用してODBC初期化ファイルを変換します。たとえば、CCSID IBM-037からIBM-1047に変換するには、次のコマンドを使用します。
iconv -f IBM-037 -t IBM-1047 ODBC.ini > ODBC-1047.ini
mv ODBC-1047.ini ODBC.ini
ファイルの作成または変更時、CCSID IBM-1047を使用するよう端末エミュレータまたは端末構成を変更します。
親トピック: データベース接続の構成
各Oracle GoldenGateプロセスはデータベース接続を行います。使用するプロセスの数および想定する他のDB2接続の数に応じて、DSNTIPE DB2 Thread Managementパネルで次のDB2システム・パラメータを調整する必要があります。
MAX USERS
(マクロDSN6SYSP CTHREAD
)
MAX TSO CONNECT
(マクロDSN6SYSP IDFORE
)
MAX BATCH CONNECT
(マクロDSN6SYSP IDBACK
)
RRSAFを使用する場合、次のように見込みます。
次のものに対するプロセスごとに2つのDB2スレッド
Extract
Replicat
GGSCIコマンドDBLOGIN
(データベースにログインします)
DEFGEN
ユーティリティ(列マッピングのデータ定義を生成します)
IFIコールに対するExtract用に追加で1つのDB2スレッド。
各ExtractおよびReplicatプロセスによって発行されるSQLEXEC
パラメータ文ごとに追加で1つのDB2スレッド。SQLEXEC
の詳細は、『Oracle GoldenGateリファレンス』を参照してください。
CAFを使用する場合、Oracle GoldenGateプロセスごとにスレッドは1つのみです。
親トピック: データベース接続の構成
Oracle GoldenGate USSアクセス権をSDSNLOAD
システム・ロード・ライブラリおよびDSNHDECP
ロード・モジュールに付与します。次のいずれかにライブラリを含めます。
z/OSシステム検索順序。
Oracle GoldenGateユーザーのUSSプロファイル。次のようなUNIXコマンドを使用します。ここで、DSN810
はDB2インストールのユーザー割当てデータ・セット接頭辞です。
export STEPLIB='DSN810.SDSNEXIT:DSN810.SDSNLOAD'
前述のコマンドによって、シェル・コマンドまたはOracle GoldenGateプロセスが実行されるたびに、USSでSTEPLIB DD
文と同等の割当てが行われます。APFを使用する場合、STEPLIB
連結のすべてのライブラリはAPF許可されている必要があります。
デフォルトでは、USSは、すべてのOracle GoldenGateプロセスのジョブ名と所有者を、起動したユーザーのものに設定します。_BPX_JOBNAME
および_BPX_USERID
環境変数を設定してジョブ名またはユーザーを変更できます。あるいは、Oracle GoldenGateプロセスに対してz/OSジョブまたは開始済タスク・プロシージャを作成できます。環境変数_BPX_JOBNAME
を使用するには、最低でもRACF FACILITY
クラスおよびBPX.JOBNAME
名への読取りアクセスが必要です。詳細は、Oracle GoldenGate Microservices ArchitectureのインストールおよびIBM z/OS System Services Planningのドキュメントを参照してください。
Managerプロセスを起動するユーザーは、通常他のOracle GoldenGateプロセスを実行するユーザーです。Oracle GoldenGateの処理は、WLMサブシステム・タイプOMVSのフォークされた子プロセスとして表示されます。次のガイドラインに基づいて、Oracle GoldenGateプロセスにワークロード・マネージャ(WLM)ベロシティ目標を割り当てます。
トランザクション・ログを読み取るExtractプロセスには、中程度(メインDB2アドレス空間のベロシティより下、ほとんどのオンライン・トランザクション、TSO/Eセッションおよびz/OSバッチ処理より上)のベロシティ目標を割り当てます。ベロシティ目標が高いほど、Extractが得るプロセッサ・パワーは多く、ラグは小さくなります。
初期ロードExtractプロセスにベロシティ目標を割り当てるか、通常のDB2バッチ・ジョブとして処理します。初期ロード・プロセスの詳細は、『Oracle GoldenGateの管理』を参照してください。
Replicatプロセスには、高いベロシティ目標を割り当てる必要があります。Replicatは通常のDB2バッチ・アプリケーションですが、バックログとレイテンシの発生を防ぐには、より多くの処理パワーが必要です。
Oracle GoldenGateユーティリティ(DEFGEN
、LOGDUMPなど)の実行はごくまれなため、他のUNIX端末向け処理と同様に実行できます。
SQLEXEC
コマンドでストアド・プロシージャを実行する場合、Oracle GoldenGateのボトルネックにならないことを確認します。優先順位を、コール元のExtractまたはReplicatプロセスと同程度にします。WLMではその優先順位で実行されますが、z/OSシステムでは、DB2およびz/OSのシステム・プログラマによって定義されたストアド・プロシージャの優先順位で実行されます。
Oracle GoldenGateをTSO/E OMVS
コマンド下で実行する場合、Oracle GoldenGateプロセスは、システムとTSO/Eユーザー・アカウント(UNIXカーネルではなく)のWLM制限に依存します。端末入力に対するOMVSポーリング方法が原因で、最大20秒の非常に長いTSO/Eレスポンス時間(サービス消費が少ないことが多々ある)が、OMVSユーザーについて記録されることがあります。これは、レスポンス時間に基づいたWLM目標に影響を及ぼします。
複数のWLMサービス・クラスをOracle GoldenGateプロセスに対して使用できます。次に、相対優先順位が保持されるOracle GoldenGateとその他の処理の例を、優先順位の高いものから低いものの順に示します。
z/OSシステム・プロセス(UNIXカーネルとIRLMを含む)。
プライマリExtractグループに対するDB2 for z/OSアドレス空間。
オンラインまたはバッチの変更同期用に構成されているプライマリExtractグループと、それによってコールされるDB2ストアド・プロシージャ。
z/OSトランザクション・マネージャ(CICS、IMSなど)。
Extractデータ・ポンプ用Collector (Server)(使用されている場合)。
(証跡から読み取る)ローカルExtractデータ・ポンプ(使用されている場合)。
リモート証跡(リモート・サイトから受信されるファイル)用Collector。そのようなファイルには、NonStopシステムでExtract RMTBATCH
パラメータによって作成されるQSAMファイルなどがあります。
オンラインReplicatグループとそれによってコールされるDB2ストアド・プロシージャ。
Managerプロセス(Oracle GoldenGateプロセスの起動と証跡のクリーンアップのためにのみ必要)。
GGSCIおよび他のユーザーのUNIXおよびTSO/E端末処理。
初期ロードExtractとそれによってコールされるDB2ストアド・プロシージャ。
初期ロードReplicatとそれによってコールされるDB2ストアド・プロシージャ。
他のz/OSバッチ処理。
次の項に、z/OSシステムの機能を使用したOracle GoldenGateの監視に関する情報を示します。
システム・ログ・プロセス(syslog
デーモンsyslogd
)が実行されている場合、USSは、UNIXメッセージの優先順位に従って、構成されている宛先にOracle GoldenGateメッセージを転送します。syslogd
の構成の詳細は、z/OS IP構成のドキュメントおよび『UNIX System Services Planning』を参照してください。
syslogd
が実行されていない場合、Oracle GoldenGateは、コマンド出力、ステータス情報およびエラー・メッセージをシステム・コンソールに書き込みます。次のUNIXコマンドを使用して、コンソール・メッセージをOracle GoldenGate USSセッションおよびOracle GoldenGateレポート・ファイルにリダイレクトできます。
export _BPXK_JOBLOG=STDERR
親トピック: プロセスの監視
システム管理機能(SMF)では、通常UNIXプロセス(Oracle GoldenGateプロセスを含む)ごとに別個のアカウンティング・レコードが作成されます。ただし、ユーザーがOMVS
コマンドでデフォルトのSHAREAS
オプションを使用してUNIXシェルを起動した場合、またはユーザーが環境変数_BPX_SHAREAS
をYES
に設定した場合、複数のプロセスが同じアドレス空間で実行される場合があります。SMFは、1つ目のプロセスにのみプロセスIDを付与しますが、リソース消費は、実行されているすべてのプロセスを対象に集計されます。Oracle GoldenGateの場合、これは、処理がManagerプロセス(mgr
という名前)の下に記録される可能性が高いということです。
DB2アカウンティング・トレースがSMF宛先についてもアクティブな場合、DB2は、次のOracle GoldenGateプロセスごとにSMFアカウンティング・レコードを作成します。
Extract
Replicat
Manager (Oracle GoldenGate表を保守する場合)。Oracle GoldenGate表の例としては、マーカー表やReplicatチェックポイント表があります。
Oracle GoldenGate DBLOGIN
コマンドを発行してデータベースにログインするGGSCIセッション。
親トピック: プロセスの監視
DB2データベースで実行されたDML操作の実際の数は、Oracle GoldenGateによってレポートされる、抽出されたDML操作の数と一致しない場合があります。更新文で行が物理的に変更されない場合、DB2はその更新文を記録しません。そのため、Oracle GoldenGateがそれを検出したり、統計に含めることはできません。
親トピック: プロセスの監視
Oracle GoldenGateではグローバリゼーション・サポートを提供しており、このサポートを使用する場合には考慮する必要があります。
DB2ソース・システムから異なる文字セットのターゲットにレプリケートする際、ASCIIデータとEBCDICデータが混在している場合は、DB2の文字データのエンコーディングになんらかの配慮が必要です。各Replicatによる文字セットの変換では、ソース・データが1つの文字セットのものである必要があります。
ソース文字セットは、証跡ヘッダーに指定されます。したがって、Oracle GoldenGate証跡には、ASCIIデータまたはEBCDICデータのいずれかを含むことができますが、両方を含むことはできません。Unicodeの表は特別な構成がなくても処理され、文字セットは1つという要件の対象外です。
両方の文字エンコーディング・タイプが含まれているソースについては、次のオプションがあります。
すべての表に対して1つのExtractを使用し、 ASCIIまたはEBCDICのいずれかとして文字データを証跡に書き込ませます。
異なるExtract(ASCII文字データを証跡に書き込むExtractとEBCDIC文字データを別の証跡に書き込むExtract)を使用します。2つのデータ・ストリームが個別に処理されるよう、各証跡を独自のデータ・ポンプ・プロセスとReplicatプロセスに関連付けます。
いずれのシナリオでも正しい文字セットを出力するには、TRAILCHARSETASCII
およびTRAILCHARSETEBCDIC
パラメータを使用します。デフォルトはTRAILCHARSETEBCDIC
です。これらのパラメータが使用されない場合、ASCIIおよびEBCDICデータはそのまま証跡に書き込まれます。これらのパラメータを使用する場合、次の点に注意してください。
これらのパラメータがシングルバイトDB2サブシステムに対して使用される場合、Extractは、使用されているパラメータに応じて、接続先のサブシステムのASCIIまたはEBCDICのいずれかのシングルバイトCCSIDにすべての文字データを変換します(Unicodeは対象外で、Unicodeのまま処理されます)。
マルチバイトDB2サブシステムに対して使用される場合、Extractは、ASCIIまたはEBCDICの表のみ(およびUnicode)を取得します。文字データは、Extractの接続先のDB2 z/OSサブシステムのASCIIまたはEBCDICのいずれか(使用されているパラメータに応じる)の混合CCSIDで書き込まれます。
親トピック: グローバリゼーション関数のサポート
パラメータ・ファイル内のスキーマ、表、列またはストアド・プロシージャの名前にマルチバイト文字が含まれる場合、名前を二重引用符で囲む必要があります。オブジェクト名の指定の詳細は、『Oracle GoldenGateの管理』を参照してください。
親トピック: グローバリゼーション関数のサポート