確保來源和目標表格中的資料列唯一性

除非在 TABLE 或 MAP 敘述句中使用 KEYCOLS 子句,否則 Oracle GoldenGate 會根據記錄的限制數目和類型,選取下列優先順序要使用的資料列 ID (請參閱交易日誌設定值和需求 )。

注意:JSON Relation Duality Views (JSON DV) 和 JSON Collection Tables (JCTs) 不支援 KEYCOLS 子句,因為它們具有單一且預先定義的索引鍵 (_id)。

  1. 主索引鍵若未包含任何擴充 (32K) VARCHAR2/NVARCHAR2 資料欄。沒有不顯示資料欄的主索引鍵。

  2. 唯一索引鍵:不含不顯示資料欄的唯一索引鍵。

    若為非整合式 Replicat,則選取唯一金鑰的方式如下:

    • 第一個唯一索引鍵的字母順序沒有虛擬資料欄、沒有 UDT、沒有以函數為基礎的資料欄、沒有可為空值的資料欄,以及沒有擴充 (32K) VARCHAR2/NVARCHAR2 資料欄。若要支援包含不顯示索引之資料欄的索引鍵,您必須使用 Oracle GoldenGate GLOBALS 檔案中的 ALLOWINVISIBLEINDEXKEYS 參數。

    • 第一個唯一索引鍵的字母順序沒有虛擬資料欄、沒有 UDT、沒有擴充 (32K) VARCHAR2/NVARCHAR2 資料欄,或沒有以函數為基礎的資料欄,但可以包含可為空值的資料欄。若要支援包含不顯示索引之資料欄的索引鍵,您必須使用 Oracle GoldenGate GLOBALS 檔案中的 ALLOWINVISIBLEINDEXKEYS 參數。

  3. 不可為空值的唯一索引鍵:至少一個唯一索引鍵的資料欄不可為空值。這是因為 NOALLOWNULLABLEKEYS 是預設值。

注意:ALLOWNULLABLEKEYS 對整合式 Replicat 無效。

  1. 如果沒有任何先前的金鑰類型存在 (即使表格中定義了其他類型的金鑰),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,您必須使用與來源表格索引鍵資料欄相符的唯一索引: