26 Oracle GoldenGateシステムの準備

この章では、Oracle GoldenGateをサポートするシステム・リソースとデータベース・リソースの要件を示します。

この章は次の項で構成されています:

データベース構成

Extractプロセスは、ソースSybaseサーバーのSybase Replication APIを直接呼び出します。次の手順で、このサーバーのソース・データベースを、Oracle GoldenGateによるデータ・キャプチャをサポートするように構成する必要があります。

  • ExtractはSybase LTMを使用してSybaseトランザクション・ログを読み取るため、Sybase Replication Serverで構成されたデータベースに対して実行できません。同じデータベース上のトランザクション・ログを読み取ることができるコンテキストを保持できるのは、一度に1つのプロセスのみです。

  • Sybase Multisiteの可用性では、Sybase Replication Serverを利用してウォーム・スタンバイおよびターゲット・サブスクリプション・データベースにトランザクションをレプリケートします。Oracle GoldenGate for Sybaseはプライマリ・ウォーム・スタンバイからは取得できませんが、SAP Sybase Rep Serverがそのデータベースのトランザクション・ログを制御していないため、Multisiteの可用性ターゲット・サブスクリプション・データベースからは取得できます。

  • DSQUERY変数を、Oracle GoldenGateが使用するデータベースを含むサーバーに設定します。

  • Extractプロセスには、2次ログ切捨て点を管理するための権限が必要です。詳細は、「2次切捨て点の初期化」を参照してください。

  • データベース・ページ・サイズを4K、8K、16K、32Kまたはそれ以上に構成します。UPGRADECHECKPOINT table_nameコマンドを使用してターゲットのSybaseデータベースのチェックポイントを更新するには、プログラムによって作成される行サイズが2Kページを超えるように構成する必要があります。ターゲット・データベースのページ・サイズが2Kに構成されていると、チェックポイントのアップグレードは失敗します。これはReplicatに対してのみ有効です。

Oracle GoldenGateプロセス用データベース・ユーザー

Oracle GoldenGateには、データベース・ユーザー・アカウントが必要です。次のガイドラインに従ってこのアカウントを作成し、権限を割り当てます。

  • データの安全性確保と、Oracle GoldenGateの処理の的確な監視のため、他のユーザー、アプリケーション、プロセスには、Oracle GoldenGateデータベース・ユーザーとしてのログオンまたは操作を許可しないでください。

  • Oracle GoldenGate専用のデータベース・ユーザーを作成します。データベースに接続する必要のあるすべてのOracle GoldenGateプロセスに対して同じユーザーでもかまいません。

    • Extract (ソース・データベース)

    • Replicat (ターゲット・データベース)

    • DEFGENユーティリティ(ソースまたはターゲット・データベース)

  • Extractプロセスには、ソース・データベースにアクセスするための権限が必要です。次の内の1つを実行します。

    • システム管理者権限を付与します。

    • ユーザー名にreplication_roleを割り当てます。レプリケーション・ロールを付与するためのコマンドは次のとおりです。

      sp_role 'grant', replication_role, Extract_user

      または

      use dbname grant role replication_role to Extract_user
      

    ノート:

    特定のDDLまたはDML操作では、sa_rolereplication_roleの両方を使用する必要があることがあります。

  • Replicatプロセスには、ターゲット・データベースに対する接続権限およびDML権限が必要です。

処理のための表の準備

次の表属性は、Oracle GoldenGate環境で処理する必要があります。

内容は次のとおりです。

トリガーおよびカスケード制約の無効化

ターゲットSybase表のトリガー、カスケード削除制約、カスケード更新制約を無効にするか、これらを変更してOracle GoldenGateデータベース・ユーザーによる変更が無視されるようにします。Oracle GoldenGateでは、トリガーまたはカスケード制約の結果として生成されるDMLがレプリケートされます。同じトリガーや制約がターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。ソース表にemp_srcsalary_src、ターゲット表にemp_targsalary_targを使用している次の例について考えます。

  1. emp_srcに対して削除が発行されます。

  2. それによって、削除がsalary_srcにカスケードされます。

  3. Oracle GoldenGateが、両方の削除をターゲットに送信します。

  4. まず親削除が到着し、emp_targに適用されます。

  5. 親削除によって、削除がsalary_targにカスケードされます。

  6. salary_srcのカスケードされた削除が、salary_targに適用されます

  7. 行は、すでにステップ5で削除されているため、見つかりません。

データベース・セッションの開始時にターゲットのトリガーを無効化するようにReplicatを構成するには、次のステップを実行します。

  1. Replicatユーザーにレプリケーション・ロールを割り当てます。
  2. Replicatパラメータ・ファイルのルート・レベルに、次のパラメータ文を追加します。
    SQLEXEC "set triggers off"
    

行識別子の割当て

Oracle GoldenGateでは、レプリケートされた更新および削除のターゲット行を正確に特定するため、ソース表およびターゲット表になんらかの形の一意の行識別子が必要です。

キーのない表での行の変更の制限

ターゲット表に主キーまたは一意のキーがない場合、重複する行が存在する可能性があります。Oracle GoldenGateで更新または削除されるターゲット表の行数が多くなりすぎ、ソース・データとターゲット・データの同期がとれなくなる可能性があります。警告するエラー・メッセージは表示されません。更新される行数を制限するには、Replicatパラメータ・ファイルでDBOPTIONSパラメータにLIMITROWSオプションを使用します。LIMITROWSを使用すると1行しか処理されないため、ターゲット・システムにおけるOracle GoldenGateのパフォーマンスが向上する可能性があります。

暗号化データのレプリケート

Oracle GoldenGateでは、システム暗号化パスワードによる暗号化列をサポートしていますが、ユーザー定義パスワードによる暗号化列はサポートしていません。データのキャプチャ元となる表が、Oracle GoldenGateの次の制限事項を満たしているかどうか確認します。

  • 暗号化列を含む表は、主キーまたは一意のキーを持っている必要があります。

  • 暗号化を使用する列を、主キーの一部に含むことはできません。

暗号化列は、データ・ファイルおよびログ内で暗号化されるので、Extractは、データベースからクリアテキスト値をフェッチするように構成する必要があります。このフェッチをトリガーするには、ExtractのTABLEパラメータのFETCHCOLSオプションおよびFETCHMODCOLS[EXCEPT]オプションを使用します。FETCHCOLSによってログに含まれていない値のフェッチが行われ、FETCHMODCOLSまたはFETCHMODCOLS[EXCEPT]によってログに含まれている値のフェッチが行われます。これらのパラメータをあわせて使用することで、暗号化列が必ずデータベースからフェッチされるようになります。

暗号化をサポートするようにExtractを構成する方法の例を次に示します。この例で、暗号化列はcardnumです。

TABLE ab.payments, FETCHCOLS (cardnum), FETCHMODCOLS (cardnum);

トランザクション・ログの準備

DML操作をキャプチャするため、Oracle GoldenGateはオンライン・ログを読み取ります。Oracle GoldenGateの処理の継続性および完全性を確保するために、次の項に示すようにログを構成する必要があります。

内容は次のとおりです。

2次切捨て点の初期化

Oracle GoldenGateのExtractプロセスを実行する前に、ソース・システムで2次ログ切捨て点を設定します。Extractでは、2次切捨て点を使用して未処理のデータを識別します。

2次切捨て点を初期化するには、sa_role権限を持つユーザーとしてデータベースにログオンし、次のコマンドを発行します。

dbcc settrunc( 'ltm', valid )

デフォルトでは、一度設定された2次切捨て点はExtractによって管理されます。Extractの停止時間が必要以上に長引かないようにしてください。長引いた場合はログがいっぱいになる可能性があり、データベースが停止します。この問題を解消するための唯一の方法は、2次切捨て点を無効化してOracle GoldenGateの外側で2次切捨て点を管理し、トランザクション・ログをパージすることです。Extractがまだ処理していないデータは失われ、ソース・データとターゲット・データの再同期化が必要になります。

2次切捨て点の管理方法を制御するには、TRANLOGOPTIONSパラメータを使用します。詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください

ログのサイズ設定と保持

Extractの停止や計画外の停止が発生した後にExtractがチェックポイントから再開できるようにするため、ソース・システムに十分なログ・データを保持します。Extractは、コミットされていない、最も古い作業ユニットの開始点を含むログと、それ以降のすべてのログにアクセスできることが必要です。Extractのチェックポイントの位置を決定するには、INFO EXTRACTコマンドを使用します。INFO EXTRACTの詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください。

処理中にExtractが必要とするデータが、オンラインまたはバックアップ・ログで保持されていない場合、次の修正処理のいずれかが必要になる可能性があります。

  • ログ・データが使用可能な、より遅い時点からキャプチャするようにExtractを変更します(さらに、ターゲットでデータ損失があれば受け入れます)。

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

古いアーカイブ・ファイルをソース・システムの新規バックアップで上書きするバックアップ・オプションやアーカイブ・オプションを使用しないでください。新規バックアップでは、古いファイルとは異なる名前を付けて別のファイルを作成します。これによって、Extractが特定のログを探す際にそのログが確実に存在することになり、また、サポートのために必要になった場合に確実にデータを使用できます。

トランザクション・ロギングの有効化

ADD TRANDATAコマンドを使用して、レプリケーション用に各ソース表をマークします。このコマンドでは、Sybaseのシステム・プロシージャsp_setreptableおよびsp_setrepcolを使用します。ADD TRANDATAは、データベース・インタフェースを介してそれらのプロシージャを使用するかわりに、表にマークするための方法として推奨されます。ただし、所有者またはシステム管理者は、必要に応じてそれらのプロシージャを使用できます。詳細は、Sybaseのドキュメントを参照してください。

ADD TRANDATAでレプリケーション用に表をマークする手順:

  1. ソース・システムのOracle GoldenGateディレクトリからGGSCIを実行します。
  2. GGSCIからデータベースにログインします。
    DBLOGIN SOURCEDB database USERID user PASSWORD xxx
    

    説明:

    • databaseはデータベース名です。

    • userはデータベース所有者またはシステム管理者です。パスワードの入力を要求されます。このコマンドにはパスワードの暗号化オプションがあります。詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください

    • xxxは、関連付けられたユーザーのパスワードです。

  3. マークする各表に対してADD TRANDATAコマンドを発行します。
    ADD TRANDATA SCHEMA.TABLE LOBSNEVER | LOBSALWAYS | LOBSALWAYSNOINDEX | LOBSIFCHANGED
    

    説明:

    • LOBSNEVER | LOBSALWAYS | LOBSALWAYSNOINDEX | LOBSIFCHANGEDによって、LOBデータを伝播しない、変更された場合のみ伝播する(デフォルト)、常に伝播する、という状態が制御されます。ADD TRANDATAコマンドによって、現在表に設定されているLOBレプリケーション設定が上書きされます。

ノート:

ADD TRANDATAの一部のオプションによって、sp_setrepcolALWAYS_REPLICATEオプションが有効になります。LOB列にNULL値が含まれていると、(LOBが更新されずに)表内の別の列が更新された場合、ALWAYS_REPLICATEが有効になっていてもそのLOBはキャプチャされません。