プライマリ・コンテンツへ移動
Oracle® Fusion Middleware SybaseのためのOracle GoldenGateのインストールおよび構成
12c (12.2.0.1)
E70109-01
  目次へ移動
目次

前
 
次
 

3 Oracle GoldenGateのためのSybaseシステムの準備

この章では、Oracle GoldenGateをサポートするようにデータベースおよびシステムを準備するためのガイドラインを示します。

この章の内容は次のとおりです。

3.1 処理のための表の準備

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

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

ターゲット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"
    

3.1.2 行識別子の割当て

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

3.1.2.1 Oracle GoldenGateが使用する行識別子の種類を判別する方法

KEYCOLS句がTABLE文またはMAP文内で使用されていない場合、Oracle GoldenGateは、使用する行識別子を次の優先順位で選択します。

  1. 主キー。

  2. 計算済列、ファンクション・ベースの列、NULL値を許可する列を含まない、文字列が一意の最初のキー。

  3. 計算済列やファンクション・ベースの列は含まないが、NULL値を許可する列を含む可能性のある、文字列が一意の最初のキー。

  4. 先行するキー・タイプがまったく存在しない場合は(表に他のタイプのキーが定義されている可能性があるとしても)、計算済列、ファンクション・ベースの列およびGoldenGate構成から明示的に除外されている列を除いて、データベースが一意のキー内で使用できるすべての列の擬似キーが、GoldenGateによって作成されます。


注意:

表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE句が使用される原因となります。

Oracle GoldenGateでは、次のように列名にカンマが含まれている主キーや一意キーはサポートされません。

CREATE TABLE Tab ... PRIMARY KEY ("col1, Id", col2)

この場合、"col1, ID "は1つ目の主キー列で、col2は2つ目の主キー列です。

3.1.2.2 KEYCOLSを使用したカスタム・キーの指定

前述のキー・タイプの行識別子が表に存在しないか、または、それらの識別子を使用しない場合は、常に一意の値が含まれている列が表にあれば、代替キーを定義できます。ExtractのTABLEパラメータとReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。Oracle GoldenGateは、検出した既存の主キーまたは一意キーのかわりに、指定されたキーを使用します。詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください。

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

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

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

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

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

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

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

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

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

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

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

3.2.1項「トランザクション・ロギングの有効化」

3.2.2項「ログのサイズ指定および保持」

3.2.3項「2次切捨て点の初期化」

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

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はキャプチャされません。

3.2.2 ログのサイズ指定および保持

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

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

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

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

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

3.2.3 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リファレンス』を参照してください。