ALLOWNOOPUPDATES | 不允許更新
有效對象
Replicat
說明
使用 ALLOWNOOPUPDATES 和 NOALLOWNOOPUPDATES 來控制 Replicat 回應 no-op 作業的方式。無作業是指對目標表格沒有影響的作業。以下是一些可能發生此情況的範例。
-
來源表格的資料欄不存在於目標表格中,或含有從複製排除的資料欄 (使用
COLSEXCEPT子句)。無論是哪一種情況,如果更新來源資料欄,Replicat SQL 敘述句中的SET子句中都不會使用目標資料欄名稱。 -
系統會進行更新,將資料欄設為與目前資料欄相同的值。資料庫不會記錄新值,因為它沒有變更。不過,Oracle GoldenGate 會以變更記錄的方式擷取作業,因為已記錄主索引鍵,但是 Replicat SQL 敘述句中沒有
SET子句的資料欄值。
使用 NOALLOWNOOPUPDATES 時,只有當來源和目標表格未定義索引鍵,或 Replicat 未使用 KEYCOLS 時,Replicat 才會中止。在此情況下,在目標表格未定義唯一索引鍵,而且會在任何來源資料欄執行更新作業時,會發生類似下列的錯誤:
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.
您可以使用參數 APPLYNOOPUPDATES 來強制套用 UPDATE。APPLYNOOPUPDATES 會覆寫 ALLOWNOOPUPDATES。如果同時指定兩者,Replicat 會套用來源和目標表格有索引鍵資料欄的更新。
如果在使用 HANDLECOLLISIONS 或 INSERTMISSINGUPDATES 參數時指定 ALLOWNOOPUPDATES,且 Oracle GoldenGate 具有所有目標索引鍵值,則 Oracle GoldenGate 會使用 SET 子句中表格的所有資料欄和 WHERE 子句 (呼叫 APPLYNOOPUPDATES 行為) 來套用 UPDATE。這是必要的,因此 Oracle GoldenGate 可以判斷資料列是否存在或遺漏。如果遺漏,Oracle GoldenGate 會將 UPDATE 轉換成 INSERT。
預設
NOALLOWNOOPUPDATES
語法
ALLOWNOOPUPDATES | NOALLOWNOOPUPDATES