18 Oracle GoldenGateのためのデータベースの準備 — CDCキャプチャ
CDCキャプチャをサポートするようにデータベース設定およびサプリメンタル・ロギングを構成するプロセス。
この章では、Oracle GoldenGateによるソース・トランザクション・データのCDCキャプチャをサポートするための、データベース設定とサプリメンタル・ロギングの構成に役立つ情報を説明します。
次のOracle By Exampleを使用すると、CDCキャプチャについてより詳しく学習できます。
SQL Server CDCキャプチャ・レプリケーションのためのOracle GoldenGateの使用http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/goldengate/12c/sql_cdcrep/sql_cdcrep.html。
内容は次のとおりです。
CDCサプリメンタル・ロギングの有効化
CDC Extractでは、変更データを取得する方法としてSQL Serverチェンジ・データ・キャプチャ表が使用されるため、次の手順と要件に従い、Extractによって変更データが正しくロギング、保持および取得されるようにすることが重要です。
ADD TRANDATA
コマンドでサプリメンタル・ロギングを有効にすると、トランザクションの再構築に必要な情報をExtractで取得できます。
ADD TRANDATA
は、Oracle GoldenGateにより取得されるすべての表に対して発行する必要があり、そのためには、有効なスキーマを使用して、必要なOracle GoldenGateの表およびストアド・プロシージャを作成する必要があります。
CDC Extractのサプリメンタル・ロギングを有効にするには、次の手順を行います。
-
SQL Serverチェンジ・データ・キャプチャをデータベース・レベルで有効にします(まだ有効になっていない場合)。
-
EXECUTE sys.sp_cdc_enable_db
-
-
EXECUTE sys.sp_cdc_enable_table
を実行することにより、サプリメンタル・ロギングが有効な各ベース表に対してチェンジ・データ・キャプチャ表を作成し、各CDC表のためのトリガーを作成します。CDC表は、データベース内のシステム表の一部として存在し、cdc.OracleGG_basetableobjectid_CT
のようなネーミング規則を持っています。 -
ネーミング規則が
schema.OracleGGTranTables
のトラッキング表を作成します。この表を使用してCDC表のトランザクション・インジケータが格納され、CDC表のトリガーが起動されたときにこの表に移入されます。表はGLOBALS
ファイルのGGSCHEMA
パラメータにリストされたスキーマによって所有されます。 -
各CDC表に対して一意のフェッチ・ストアド・プロシージャを作成し、さらにExtractが機能するために必要なその他のストアド・プロシージャも作成します。ストアド・プロシージャは、
GLOBALS
ファイルのGGSCHEMA
パラメータにリストされたスキーマによって所有されます。 -
また、表に対するCDCの有効化の一環として、SQL Serverではデータベースごとに2つのジョブを作成します。
cdc.dbname_capture cdc.dbname_cleanup
-
CDCキャプチャ・ジョブはSQL Serverのトランザクション・ログを読み取ってCDC表にデータを移入し、これらのCDC表からExtractはトランザクションを取得します。したがって、CDCキャプチャ・ジョブが常に実行されていることが非常に重要です。そのためには、SQL Serverエージェントが常に実行され、SQL Serverの起動時に自動的に実行できるように設定されている必要があります。
-
CDCキャプチャ・ジョブの重要なチューニング情報は、CDCキャプチャ方法の操作に関する考慮事項にあります。
-
Microsoftによって作成されるCDCクリーンアップ・ジョブは、Oracle GoldenGate ExtractがCDC表のデータを取得済であるかどうかに依存しません。そのため、追加の手順を行って、
TRANDATA
を有効にした直後にCDCクリーンアップ・ジョブを無効にするか削除し、Oracle GoldenGate専用のCDCクリーンアップ・ジョブを有効にする必要があります。詳細はCDC表の履歴データの保持を参照してください。
次の手順では、SQL Serverのシステム管理者(sysadmin
)ロールのメンバーであるデータベース・ユーザーが必要です。
CDC表の履歴データの保持
サプリメンタル・ロギングを有効にすると、Extractでトランザクションを再構成するために必要なデータが一連のSQL Server CDCシステム表に格納され、さらに、トランザクション内で操作をトラッキングするために使用されるOracle GoldenGateオブジェクトも格納されます。サプリメンタル・ロギングを有効にする際に、SQL Serverは自身のチェンジ・データ・キャプチャ・クリーンアップ・ジョブを作成し、デフォルトではこれを夜間に実行して、72時間より古いデータをパージします。SQL ServerのCDCクリーンアップ・ジョブは、ExtractでこれらのCDCシステム表のデータを引き続き必要とする場合があることを認識しないため、Extractが取得する機会を得る前にそのデータを削除する可能性があります。
処理中にExtractが必要とするデータがCDCシステム表から削除されている場合、次のいずれかの修正処理が必要になる可能性があります。
-
Extractを変更して、CDCデータが使用可能になった後の時点から取得します(さらにターゲットで起こり得るデータ損失を受け入れます)。
-
ソース表とターゲット表を再同期してから、Oracle GoldenGate環境を再開します。
この状況を修正するために、CDC Extract用のOracle GoldenGateには.batバイナリが含まれており、これによりOracle GoldenGateクリーンアップ・ジョブ、および関連付けられたストアド・プロシージャと表を作成します。デフォルトでは、起動時に各CDC Extractが、これらのOracle GoldenGateクリーンアップ・ジョブ・オブジェクトが存在すると想定するため、存在しない場合はExtractがシャット・ダウンします。また、SQL Server CDCクリーンアップ・ジョブがOracle GoldenGateクリーンアップ・ジョブとともに存在する場合も、Extractはシャット・ダウンします。ExtractによるOracle GoldenGate CDCクリーンアップ・ジョブ・オブジェクトのデフォルト・チェックは、ExtractでTRANLOGOPTIONS NOMANAGECDCCLEANUP
を使用して上書きできますが、これは開発およびテストの場合のみお薦めします。
サプリメンタル・ロギングを有効にした直後、かつExtractを起動する前に、次の手順を使用して、Oracle GoldenGate CDCクリーンアップ・ジョブおよび関連付けられたオブジェクトを作成してください。オブジェクトが手動で削除された場合など、これらの手順を再実行してこの機能を再度有効にできます。
Oracle GoldenGate CDCクリーンアップ・ジョブおよびオブジェクトの作成手順:
これには、SQL Serverのシステム管理者(sysadmin
)ロールのメンバーであるSQL Serverで認証されたデータベース・ユーザーが必要です。Windows認証は、.batバイナリの場合はサポートされません
-
SQL ServerエージェントからデータベースのSQL Serverの
cdc.dbname_cleanup
ジョブを停止し、無効にします。または、次のコマンドでソース・データベースからドロップできますEXECUTE sys.sp_cdc_drop_job 'cleanup'
-
ogg_cdc_cleanup_setup.bat
ファイルを実行し、次の変数値を指定します。ogg_cdc_cleanup_setup.bat createJob userid password databasename servername\instancename schema
前述の
userid password
は、sysadmin
権限を持つユーザーの有効なSQL Serverログインおよびパスワードです。ソース・データベース名およびインスタンス名は、databasename servername\instancename
です。サーバー名のみがリストされている場合、デフォルトのインスタンスに接続されます。schema
は、GLOBALS
ファイルにGGSCHEMA
パラメータとともにリストされているスキーマ名です。このスキーマは、サプリメンタル・ロギング、チェックポイント表、ハートビート表およびOracle GoldenGate CDCクリーンアップ・ジョブなど、すべてのOracle GoldenGateオブジェクトで同一の必要があります。例:
ogg_cdc_cleanup_setup.bat createJob ggsuser ggspword db1 server1\inst1 ogg
Oracle GoldenGate CDCクリーンアップ・ジョブは作成時に、10分ごとに実行されるようにスケジュールされ、デフォルトの保存期間は72時間になります。ただし、保存期間に関係なく、ジョブによってExtractのリカバリ・チェックポイントのデータはパージされません。
Oracle GoldenGate CDCクリーンアップ・ジョブの詳細は、CDCキャプチャ方法の操作に関する考慮事項にあります。
双方向ループ検出の有効化
Oracle GoldenGateの双方向実装には、1つのソース・データベースのExtractが、別のソース・データベースからReplicatによって送信されたトランザクションを再取得しないように、ループ検出が必須です。
CDC Extractキャプチャ方法の場合、デフォルトでは、Replicatの配信先の表に対してサプリメンタル・ロギングが有効なかぎり、Extractが構成されているデータベースにReplicatによってコミットされたトランザクションは、Replicatからのトランザクションを再取得します。
Replicatによって適用されるトランザクションの再取得を無視するには、CDC Extractに対してTRANLOGOPTIONS FILTERTABLE
パラメータを使用する必要があります。フィルタリング表に使用する表として、Replicat用にOracle GoldenGateチェックポイント表を作成する必要があります。
フィルタ表を作成してサプリメンタル・ロギングを有効化する手順:
この手順には、SQL Serverのシステム管理者(sysadmin
)ロールのメンバーであるデータベース・ユーザーが必要です。
-
ソース・システムで、
GGSCI
を実行します -
次のコマンドを発行してデータベースにログインします。
DBLOGIN SOURCEDB DSN [,{USERID user, PASSWORD password | USERIDALIAS alias}]
前述の例の
SOURCEDB DSN
は、SQL Serverデータソースの名前です。USERID
userはデータベース・ログインで、PASSWORD
passwordは、データ・ソースがSQL Server認証を使用して接続する場合に必要なパスワードです。または、資格証明が資格証明ストアに格納されている場合、USERIDALIAS
aliasは、資格証明の別名です。統合Windows認証を使用するDSNにDBLOGIN
を使用する場合、GGSCIセッションのデータベースへの接続は、GGSCIを実行しているユーザーによるものになります。ADD TRANDATA
またはDELETE TRANDATA
を発行するには、このユーザーは、SQL Serversysadmin
サーバー・ロールのメンバーである必要があります。 -
ソース・データベースにデータを配信するためにReplicatによって使用されるOracle GoldenGateチェックポイント表を作成します。
例:
ADD CHECKPOINTTABLE ogg.ggchkpt
GLOBALS
ファイルのGGSCHEMA
パラメータで使用されるスキーマ名と同じものを使用することをお薦めします。 -
新しく作成されたチェックポイント表のサプリメンタル・ロギングを有効にします。
例:
ADD TRANDATA ogg.ggchkpt
-
チェックポイント表の情報とともにReplicatを追加します。
例:
ADD REPLICAT reptgt1, EXTTRAIL ./dirdat/e2,checkpointtable ogg.ggchkpt
-
フィルタリング表用のReplicatのチェックポイント表を使用して、
IGNOREREPLICATES
(デフォルトでオン)およびFILTERTABLE
パラメータによりExtractを構成します。TRANLOGOPTIONS IGNOREREPLICATES
TRANLOGOPTIONS FILTERTABLE ogg.ggchkpt