22 Oracle GoldenGateのためのデータベースの準備 — CDCキャプチャ

SQL ServerのExtractによるキャプチャに使用するソース・データベースの表でサプリメンタル・ロギングを有効にする方法と、古い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’など)を作成することをお薦めしますSQL Serverスキーマcdcは使用しないで、Oracle GoldenGateに固有の新しいスキーマを作成することをお薦めします。
  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.*

    オプションで、SQL Serverチェンジ・データ・キャプチャのステージング表を配置するファイルグループを指定できます。その場合は、既存のファイルグループ名を指定したFILEGROUPオプションを使用します。

    ADD TRANDATA owner.table FILEGROUP cdctables

    ADD TRANDATAを参照してください。

CDCステージング・データのパージ

サプリメンタル・ロギングを有効にすると、Extractでトランザクションを再構成するために必要なデータが一連のSQL Server CDCシステム表に格納され、さらに、トランザクション内で操作をトラッキングするために使用されるOracle GoldenGateオブジェクトも格納されます。サプリメンタル・ロギングを有効にする際に、SQL Serverは自身のチェンジ・データ・キャプチャ・クリーンアップ・ジョブを作成し、デフォルトではこれを夜間に実行して、72時間より古いデータをパージします。SQL Server CDCのクリーン・アップ・ジョブは、Extractが該当するCDCシステム表のデータを引き続き必要とする可能性があることを認識しないため、Extractがキャプチャする前にそのデータを削除してしまうことがあります。

処理中にExtractが必要とするデータがCDCシステム表から削除されている場合、次のいずれかの修正処理が必要になる可能性があります。

  • Extractを変更して、CDCデータが使用可能になった後の時点から取得します(さらにターゲットで起こり得るデータ損失を受け入れます)。

  • ソース表とターゲット表を再同期してから、Oracle GoldenGate環境を再開します。

この状況を修正するために、SQL ServerのためのOracle GoldenGateにはogg_cdc_cleanup_setup.batプログラムが含まれています。このプログラムは、Oracle GoldenGateクリーン・アップ・ジョブ関連のストアド・プロシージャと表を作成するために使用します。

デフォルトでは、ExtractはこれらのOracle GoldenGateクリーン・アップ・ジョブ・オブジェクトが存在すると想定していて、存在しない場合は停止します。SQL Server CDCクリーン・アップ・ジョブとOracle GoldenGateクリーン・アップ・ジョブが同時に存在していると、Extractは警告を発行します。

Oracle GoldenGate CDCクリーン・アップ・ジョブ・タスク・オブジェクトに対するExtractのデフォルト・チェックは、ExtractのTRANLOGOPTIONS NOMANAGECDCCLEANUPを使用して上書きできますが、この上書きは開発やテストを目的としている場合のみにしてください。

サプリメンタル・ロギングを有効にした直後、かつExtractを起動する前に、次のステップを使用して、Oracle GoldenGate CDCクリーンアップ・ジョブおよび関連付けられたオブジェクトを作成してください。オブジェクトが手動で削除された場合など、これらのステップを再実行してこの機能を再度有効にできます。

Oracle GoldenGate CDCクリーンアップ・ジョブおよびオブジェクトの作成手順:

ogg_cdc_cleanup_setupファイルは、Classic Architectureのホーム・ディレクトリにあります。

スクリプトはMicrosoftのsqlcmdユーティリティを使用するため、Oracle GoldenGateがインストールされているシステムにsqlcmdがインストールされていることを確認してください。

これには、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ファイルを実行し、次の変数値を指定します。

    Windowsの場合:

    ogg_cdc_cleanup_setup.bat createJob userid password databasename servername\instancename schema

    Linuxの場合:

    ./ogg_cdc_cleanup_setup.sh createJob userid password databasename "servername,port" schema

    前の例で、USER IDとパスワードは、sysadmin権限を持つユーザーの有効なSQL Serverログインとパスワードにする必要があります。databasename servername\instancenameまたはservernameportは、ソース・データベース名、サーバーおよびインスタンス、またはSQL Serverが稼働しているサーバーとTCP/IPポートです。サーバー名のみがリストされている場合、デフォルトのインスタンスに接続されます。schemaは、GLOBALSファイルにGGSCHEMAパラメータとともにリストされているスキーマ名です。このスキーマは、サプリメンタル・ロギング、チェックポイント表、ハートビート表およびOracle GoldenGate CDCクリーンアップ・ジョブなど、すべてのOracle GoldenGateオブジェクトで同一の必要があります。

    たとえば:

    ogg_cdc_cleanup_setup.bat createJob ggsuser ggspword db1 server1\inst1 ogg
    接続文字列でserver,portを使用する場合、文字列を二重引用符で囲みます。次に例を示します:
    ogg_cdc_cleanup_setup.bat createJob login password source database "sql2016.samplestring.us-west-1.rds.amazonaws.com,1433" OGG schema name

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