ALLOWNOOPUPDATES | NOALLOWNOOPUPDATES
適用対象
Replicat
説明
ALLOWNOOPUPDATES
およびNOALLOWNOOPUPDATES
では、Replicatがno-op
操作に対応する方法を制御します。no-op操作は、ターゲット表では無効な操作です。次に、これを指定する場合の例を示します。
-
ソース表に、ターゲット表に存在しない列がある、または(
COLSEXCEPT
句を使用して)レプリケーションから除外された列がある。どちらの場合も、そのソース列を更新する場合、Replicat SQL文内のSET
句で使用するターゲット列名がありません。 -
列を現在の値と同じ値に設定する更新が行われる。データベースは変更されなかったため、新しい値は記録されません。しかし、主キーが記録されたため、Oracle GoldenGateはこの操作を変更レコードとして取得しますが、Replicat SQL文の
SET
句に列値がありません。
デフォルト(NOALLOWNOOPUPDATES
)では、これらのタイプの操作はデータベースを更新しないため、Replicatはエラーとともに異常終了します。ALLOWNOOPUPDATES
を指定すると、Replicatは異常終了せずに操作を無視します。Replicatによってレポートされる統計には、UPDATE
は行われたが、データベースは更新されないと示されます。
内部パラメータAPPLYNOOPUPDATES
を使用して、強制的にUPDATE
を適用させることができます。APPLYNOOPUPDATES
は、ALLOWNOOPUPDATES
より優先されます。両方が指定された場合、Replicatは、ソース表とターゲット表のキー列が存在する更新を適用します。デフォルトでは、ソース表にキーがあり、ターゲット表にキーがない場合、Oracle GoldenGateは次のメッセージとともに異常終了します。
2011-01-25 02:28:42 GGS ERROR 160 Encountered an update for target table TELLER, which has no unique key defined. KEYCOLS can be used to define a key. Use ALLOWNOOPUPDATES to process the update without applying it to the target database. Use APPLYNOOPUPDATES to force the update to be applied using all columns in both the SET and WHERE clause.
HANDLECOLLISIONS
またはINSERTMISSINGUPDATES
パラメータが使用されているときにALLOWNOOPUPDATES
が指定された場合、およびOracle GoldenGateにすべてのターゲット・キー値がある場合、Oracle GoldenGateは、SET
句およびWHERE
句の表のすべての列を使用して(APPLYNOOPUPDATES
動作を起動して)、UPDATE
を適用します。これは、Oracle GoldenGateが行の存在または欠落を判別するために必要です。欠落している場合、Oracle GoldenGateは、UPDATE
をINSERT
に変換します。
DDLレプリケーションがアクティブではない構成でALLOWNOOPUPDATES
を有効化するには、すべてのプロセスを停止し、GLOBALS
パラメータ・ファイルにALLOWNOOPUPDATES
を追加して、プロセスを再起動します。ALLOWNOOPUPDATES
を再度無効化するには、それをGLOBALS
ファイルから削除して、プロセスを再起動します。
DDLサポートがアクティブな構成でALLOWNOOPUPDATES
機能を有効化するには、次のステップを実行します。
-
GLOBALS
パラメータ・ファイルにALLOWNOOPUPDATES
パラメータを追加します。 -
次のSQLを使用して、DDLスキーマの
GGS_SETUP
表を更新します。UPDATE owner.GGS_SETUP SET value='0' WHERE property='ALLOWNOOPUPDATES'; COMMIT;
-
Managerを含むすべてのOracle GoldenGateプロセスを再起動します。この時点から、Oracle GoldenGateは、非検証または無効の主キーを一意の識別子として選択します。
DDLサポートがアクティブな場合、ALLOWNOOPUPDATES
機能を無効化するには、次のステップを実行します。
-
GLOBALS
パラメータ・ファイルからALLOWNOOPUPDATES
を削除します。 -
GGS_SETUP
表に追加したレコードを0
に更新します。 -
次のようにして、DDLスキーマの
GGS_SETUP
表を更新します。UPDATE owner.GGS_SETUP SET value='1' WHERE property='NOALLOWNULLABLEKEYS'; COMMIT;
-
すべてのOracle GoldenGateプロセスを再起動します。
デフォルト
NOALLOWNOOPUPDATES
(表にキーが含まれていない場合にのみ適用)
構文
ALLOWNOOPUPDATES | NOALLOWNOOPUPDATES
親トピック: Oracle GoldenGateパラメータ