この章では、Oracle GoldenGateをサポートするようにデータベースおよびシステムを準備するためのガイドラインを示します。
この章の内容は次のとおりです。
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を構成するには、次の手順を実行します。
Replicatユーザーにレプリケーション・ロールを割り当てます。
Replicatパラメータ・ファイルのルート・レベルに、次のパラメータ文を追加します。
SQLEXEC "set triggers off"
Oracle GoldenGateでは、レプリケートされた更新および削除のターゲット行を正確に特定するため、ソース表およびターゲット表になんらかの形の一意の行識別子が必要です。
KEYCOLS
句がTABLE
文またはMAP
文内で使用されていない場合、Oracle GoldenGateは、使用する行識別子を次の優先順位で選択します。
主キー。
計算済列、ファンクション・ベースの列、NULL値を許可する列を含まない、文字列が一意の最初のキー。
計算済列やファンクション・ベースの列は含まないが、NULL値を許可する列を含む可能性のある、文字列が一意の最初のキー。
先行するキー・タイプがまったく存在しない場合は(表に他のタイプのキーが定義されている可能性があるとしても)、計算済列、ファンクション・ベースの列およびGoldenGate構成から明示的に除外されている列を除いて、データベースが一意のキー内で使用できるすべての列の擬似キーが、GoldenGateによって作成されます。
注意: 表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE 句が使用される原因となります。 |
Oracle GoldenGateでは、次のように列名にカンマが含まれている主キーや一意キーはサポートされません。
CREATE TABLE Tab ... PRIMARY KEY ("col1, Id", col2)
この場合、"col1, ID
"は1つ目の主キー列で、col2
は2つ目の主キー列です。
ターゲット表に主キーまたは一意のキーがない場合、重複する行が存在する可能性があります。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の処理の継続性および完全性を確保するために、次の項に示すようにログを構成する必要があります。
ADD TRANDATA
コマンドを使用して、レプリケーション用に各ソース表をマークします。このコマンドでは、Sybaseのシステム・プロシージャsp_setreptable
およびsp_setrepcol
を使用します。ADD TRANDATA
は、データベース・インタフェースを介してそれらのプロシージャを使用するかわりに、表にマークするための方法として推奨されます。ただし、所有者またはシステム管理者は、必要に応じてそれらのプロシージャを使用できます。詳細は、Sybaseのドキュメントを参照してください。
ADD TRANDATAでレプリケーション用に表をマークする手順:
ソース・システムのOracle GoldenGateディレクトリからGGSCIを実行します。
GGSCIからデータベースにログインします。
DBLOGIN SOURCEDBdatabase
USERIDuser
PASSWORDxxx
条件:
database
はデータベース名です。
user
はデータベース所有者またはシステム管理者です。パスワードの入力を要求されます。このコマンドにはパスワードの暗号化オプションがあります。詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください。
xxx
は、関連付けられたユーザーのパスワードです。
マークする各表に対してADD TRANDATA
コマンドを発行します。
ADD TRANDATA SCHEMA.TABLE LOBSNEVER | LOBSALWAYS | LOBSALWAYSNOINDEX | LOBSIFCHANGED
条件:
LOBSNEVER | LOBSALWAYS | LOBSALWAYSNOINDEX | LOBSIFCHANGED
によって、LOBデータを伝播しない、変更された場合のみ伝播する(デフォルト)、常に伝播する、という状態が制御されます。ADD TRANDATA
コマンドによって、現在表に設定されているLOBレプリケーション設定が上書きされます。
注意: ADD TRANDATA の一部のオプションによって、sp_setrepcol のALWAYS_REPLICATE オプションが有効になります。LOB 列にNULL 値が含まれていると、(LOB が更新されずに)表内の別の列が更新された場合、ALWAYS_REPLICATE が有効になっていてもそのLOB はキャプチャされません。 |
Extractの停止や計画外の停止が発生した後にExtractがチェックポイントから再開できるようにするため、ソース・システムに十分なログ・データを保持します。Extractは、コミットされていない、最も古い作業ユニットの開始点を含むログと、それ以降のすべてのログにアクセスできることが必要です。Extractのチェックポイントの位置を決定するには、INFO EXTRACT
コマンドを使用します。INFO EXTRACT
の詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください。
処理中にExtractが必要とするデータが、オンラインまたはバックアップ・ログで保持されていない場合、次の修正処理のいずれかが必要になる可能性があります。
ログ・データが使用可能な、より遅い時点からキャプチャするようにExtractを変更します(さらに、ターゲットでデータ損失があれば受け入れます)。
ソース表とターゲット表を再同期してから、Oracle GoldenGate環境を再起動します。
古いアーカイブ・ファイルをソース・システムの新規バックアップで上書きするバックアップ・オプションやアーカイブ・オプションを使用しないでください。新規バックアップでは、古いファイルとは異なる名前を付けて別のファイルを作成します。これによって、Extractが特定のログを探す際にそのログが確実に存在することになり、また、サポートのために必要になった場合に確実にデータを使用できます。
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リファレンス』を参照してください。