処理のための表の準備
次の表属性は、Oracle GoldenGate環境で処理する必要があります。
トリガーおよびカスケード制約の無効化
ターゲットSybase表のトリガー、カスケード削除制約、カスケード更新制約を無効にするか、Oracle GoldenGateデータベース・ユーザーによる変更を無視するように変更します。Oracle GoldenGateでは、トリガーまたはカスケード制約の結果として生成されるDMLがレプリケートされます。同じトリガーや制約がターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。ソース表にemp_src
とsalary_src
、ターゲット表にemp_targ
とsalary_targ
を使用している次の例について考えます。
-
emp_src
に削除が発行されます -
それによって、削除が
salary_src
にカスケードされます。 -
Oracle GoldenGateが、両方の削除をターゲットに送信します。
-
親削除が最初に到達し、
emp_targ
に適用されます。 -
親削除によって、削除が
salary_targ
にカスケードされます。 -
salary_src
からカスケードされた削除がsalary_targ
に適用されます。 -
行は、すでにステップ5で削除されているため、見つかりません。
データベース・セッションの開始時にターゲット・トリガーを無効化するようにReplicatを構成するには、次のステップを実行します。
キーのない表での行の変更の制限
ターゲット表に主キーまたは一意のキーがない場合は、重複する行が存在する可能性があります。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を変更する必要がある場合があります(さらに、ターゲットで発生する可能性のあるデータ損失を受け入れます)。これは、
ALTER EXTRACT
コマンドを使用して実行できます。 - ソース表とターゲット表を再同期してから、Oracle GoldenGate環境を再起動する必要があります。
古いアーカイブ・ファイルがソース・システムの新しいバックアップで上書きされるようなバックアップ・オプションまたはアーカイブ・オプションは使用しないでください。新しいバックアップは、古い名前とは異なる名前の別のファイルにしてください。これによって、Extractが特定のログを探す際にそのログが確実に存在することになり、また、サポートのために必要になった場合に確実にデータを使用できます。
トランザクション・ロギングの有効化
ADD TRANDATA
コマンドを使用して、各ソース表をレプリケーション対象としてマークします。このコマンドは、Sybaseのシステム・プロシージャsp_setreptable
およびsp_setrepcol
を使用します。ADD TRANDATA
は、データベース・インタフェースを介してこれらのプロシージャを使用するかわりに、表をマークするための推奨される方法ですが、所有者またはシステム管理者は、必要に応じてそれらのプロシージャを使用できます。詳細は、Sybaseのドキュメントを参照してください。
ADD TRANDATAで表をレプリケーション対象としてマークする手順:
マークする各表に対してADD TRANDATA
コマンドを実行します。ADD TRANDATA
コマンドの構文は次のとおりです。
ADD TRANDATA SCHEMA.TABLE LOBSNEVER | LOBSALWAYS | LOBSALWAYSNOINDEX | LOBSIFCHANGED
LOBSNEVER | LOBSALWAYS | LOBSALWAYSNOINDEX | LOBSIFCHANGED
は、LOBデータを伝播しないか、変更された場合のみ伝播するか(デフォルト)、常に伝播するかを制御します。LOBオプションが指定されていない場合は、LOBSIFCHANGED
がデフォルト値です。ADD TRANDATA
コマンドは、表に対して現在設定されているLOBレプリケーション設定を上書きします。
ノート:
ADD TRANDATA
の一部のオプションによって、sp_setrepcol
のALWAYS_REPLICATE
オプションが有効になります。LOB
列にNULL
値が含まれていて、表内の別の列が更新された(LOB
は更新されない)場合、ALWAYS_REPLICATE
が有効になっていても、このLOB
は取得されません。