確保來源和目標表格中的資料列唯一性
除非在 TABLE 或 MAP 敘述句中使用 KEYCOLS 子句,否則 Oracle GoldenGate 會根據記錄的限制數目和類型,選取下列優先順序要使用的資料列 ID (請參閱交易日誌設定值和需求 )。
注意:JSON Relation Duality Views (JSON DV) 和 JSON Collection Tables (JCTs) 不支援 KEYCOLS 子句,因為它們具有單一且預先定義的索引鍵 (_id)。
-
主索引鍵若未包含任何擴充 (32K)
VARCHAR2/NVARCHAR2資料欄。沒有不顯示資料欄的主索引鍵。 -
唯一索引鍵:不含不顯示資料欄的唯一索引鍵。
若為非整合式 Replicat,則選取唯一金鑰的方式如下:
-
第一個唯一索引鍵的字母順序沒有虛擬資料欄、沒有 UDT、沒有以函數為基礎的資料欄、沒有可為空值的資料欄,以及沒有擴充 (32K)
VARCHAR2/NVARCHAR2資料欄。若要支援包含不顯示索引之資料欄的索引鍵,您必須使用 Oracle GoldenGateGLOBALS檔案中的ALLOWINVISIBLEINDEXKEYS參數。 -
第一個唯一索引鍵的字母順序沒有虛擬資料欄、沒有 UDT、沒有擴充 (32K)
VARCHAR2/NVARCHAR2資料欄,或沒有以函數為基礎的資料欄,但可以包含可為空值的資料欄。若要支援包含不顯示索引之資料欄的索引鍵,您必須使用 Oracle GoldenGateGLOBALS檔案中的ALLOWINVISIBLEINDEXKEYS參數。
-
-
不可為空值的唯一索引鍵:至少一個唯一索引鍵的資料欄不可為空值。這是因為
NOALLOWNULLABLEKEYS是預設值。
注意:ALLOWNULLABLEKEYS 對整合式 Replicat 無效。
-
如果沒有任何先前的金鑰類型存在 (即使表格中定義了其他類型的金鑰),Oracle GoldenGate 會為資料庫允許的所有資料欄建構虛擬金鑰用於唯一索引鍵,不包括虛擬資料欄、UDT、以函數為基礎的資料欄、擴充 (32K)
VARCHAR2/NVARCHAR2資料欄,以及 Oracle GoldenGate 使用者明確排除於 Oracle GoldenGate 組態之外的任何資料欄。除非因上述限制而排除,否則虛擬索引鍵中允許不顯示的資料欄。
注意:如果表格上有其他不可使用的金鑰,或表格上沒有金鑰,Oracle GoldenGate 會將適當的訊息記錄至報表檔案。從所有資料欄建構索引鍵,代表來源系統上 Oracle GoldenGate 的效能。在目標上,此索引鍵會讓 Replicat 使用更大且更低效率的 WHERE 子句。
如果表格沒有適當的索引鍵,或者您偏好不使用現有的索引鍵,如果表格的資料欄一律包含唯一值,您可以定義替代索引鍵。您可以在 Extract TABLE 參數和 Replicat MAP 參數中包含 KEYCOLS 子句,以定義此替代索引鍵。指定的金鑰將會覆寫 Oracle GoldenGate 找到的任何現有主索引鍵或唯一索引鍵。如需詳細資訊,請參閱Oracle GoldenGate 的參數與函數參照。
如果下列條件符合 Oracle Replicat,您必須使用與來源表格索引鍵資料欄相符的唯一索引:
-
未指定
KEYCOLS參數。 -
未指定
USEALLKEYCOLUMNS參數。 -
未指定
ALLOWNULLABLEKEYS參數。 -
來源與目標鍵值資料欄不相符。
-
與來源表格索引鍵資料欄相符的唯一索引存在。