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)ロールのメンバーであるデータベース・ユーザーが必要です。

  1. ソースOracle GoldenGateインストールで、GLOBALS (すべて大文字で拡張子なし)ファイルがGGSCHEMA <schemaname>パラメータで作成されていることを確認します。ソース・データベースで使用されているスキーマ名(CREATE SCHEMA schemaname)が作成されていることを確認します。このスキーマは、データベースで作成される後続のすべてのOracle GoldenGateコンポーネントで使用されるため、Oracle GoldenGateのみで使用される一意のスキーマ(‘ogg’など)を作成することをお薦めします
  2. ソース・システムで、GGSCIを実行します
  3. 次のコマンドを発行してデータベースにログインします。
    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 Server sysadminサーバー・ロールのメンバーである必要があります。

  4. GGSCIで、Extract構成内にある個々の表に対して次のコマンドを発行します。 ワイルドカードを使用して複数の表の名前を指定できます

    ADD TRANDATA owner.table

    ADD TRANDATA owner.*

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バイナリの場合はサポートされません

  1. SQL ServerエージェントからデータベースのSQL Serverのcdc.dbname_cleanupジョブを停止し、無効にします。または、次のコマンドでソース・データベースからドロップできます

    EXECUTE sys.sp_cdc_drop_job 'cleanup'
  2. 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)ロールのメンバーであるデータベース・ユーザーが必要です。

  1. ソース・システムで、GGSCIを実行します

  2. 次のコマンドを発行してデータベースにログインします。

    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 Server sysadminサーバー・ロールのメンバーである必要があります。

  3. ソース・データベースにデータを配信するためにReplicatによって使用されるOracle GoldenGateチェックポイント表を作成します。

    例: ADD CHECKPOINTTABLE ogg.ggchkpt

    GLOBALSファイルのGGSCHEMAパラメータで使用されるスキーマ名と同じものを使用することをお薦めします。

  4. 新しく作成されたチェックポイント表のサプリメンタル・ロギングを有効にします。

    例: ADD TRANDATA ogg.ggchkpt

  5. チェックポイント表の情報とともにReplicatを追加します。

    例: ADD REPLICAT reptgt1, EXTTRAIL ./dirdat/e2,checkpointtable ogg.ggchkpt

  6. フィルタリング表用のReplicatのチェックポイント表を使用して、IGNOREREPLICATES (デフォルトでオン)およびFILTERTABLEパラメータによりExtractを構成します。

    TRANLOGOPTIONS IGNOREREPLICATES

    TRANLOGOPTIONS FILTERTABLE ogg.ggchkpt