Oracle® Fusion Middleware Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成 12c (12.2.0.1) E70107-04 |
|
![]() 前 |
![]() 次 |
Replicatが非統合モードの場合、ターゲットで制約チェックを延期する必要がある場合があります。
この例では、キー値2がすでに表に存在するため、Replicatによって最初の更新がターゲットに適用されると、ORA-00001(一意制約)エラーになります。Replicatトランザクションによって制約違反エラーが返されます。デフォルトでは、Replicatによってそれらの違反および異常終了は処理されません。
11.2.0.2より前のバージョンで一時的な主キーの重複を処理するには、ReplicatパラメータHANDLETPKUPDATE
を使用します。この構成では、非統合Replicatは、制約を一時的に延期して一時的な主キーの更新を処理します。この機能をサポートするには、ターゲット表でDEFERRABLE INITIALLY IMMEDIATE
として制約を作成または変更する必要があります。制約がDEFERRABLE
でない場合、Replicatは、HANDLECOLLISIONS
およびREPERROR
パラメータを使用して指定されているルール(存在する場合)に従ってエラーを処理するか、異常終了します。
11.2.0.2より後のバージョンの場合、非統合Replicatは、デフォルトではOracle Workspace Managerの作業領域を使用して一時的な主キーの重複を自動的に解決しようとします。この構成では、Replicatは、コミット時まで制約チェックを延期します。制約は、明示的に延期可能として定義されている必要はありません。
一時的な主キーの重複の自動処理の要件は、次のとおりです。
Replicatデータベース・ユーザーに次のOracle関数へのアクセス権を付与します。
DBMS_XSTREAM_GG.ENABLE_TDUP_WORKSPACE()
ターゲット表は延期可能な制約を持つことはできません。延期可能な制約がある場合、Replicatはエラーを返し、異常終了します。
延期可能な制約を持つ表を処理するには、制約がDEFERRABLE INITIALLY IMMEDIATE
であることを確認し、その表をマップするMAP
文でHANDLETPKUPDATE
パラメータを使用します。HANDLETPKUPDATE
パラメータでは、デフォルトである重複の自動処理がオーバーライドされます。作業領域の使用によって、次のOracle GoldenGateのエラー処理パラメータが影響を受けます。
HANDLECOLLISIONS
REPERROR
ReplicatによってOracle Workspace Managerの作業領域が有効になると、HANDLECOLLISIONS
、REPERROR
などのOracle GoldenGateパラメータで指定されたエラー処理が無視されます。かわりに、グループ化されたトランザクション(BATCHSQL
が有効な場合)がReplicatによって異常終了され、アクティブな作業領域を使用して通常のモードで更新が再試行されます。再度ORA-00001が発生する場合、Replicatでトランザクションがロールバックされ、有効なエラー処理ルールを使用してトランザクションが再試行されます。
注意:
非更新レコードに対してORA-00001が発生する場合、HANDLECOLLISIONS
、REPERROR
などのエラー処理のパラメータによってエラーが処理されます。
一時的な主キーの重複を含む操作に、LOBやXMLTypeなどの行外列の更新も含まれる場合、作業領域は使用できません。したがって、そのようなケースはサポートされず、ターゲットで未検出のデータの破損が発生する可能性があります。この例は、次のとおりです。
update T set PK = PK + 1, C_LOB = 'ABC';