準備要處理的表格
下列段落中的表格屬性必須在您的 Oracle GoldenGate 環境中處理。
目標識別資料欄、觸發程式以及限制條件的 Replicat 考量
將資料複寫至含有識別資料欄、觸發程式以及連鎖檢查限制條件的目標 SQL Server 資料庫時,請考慮下列事項:
-
對於具有識別資料欄的資料欄,Replicat 會為表格設定
IDENTITY_INSERT ON,以降低傳遞效能。 -
對於具有觸發程式或連鎖限制條件的表格,如果 Replicat 設定為傳遞觸發程式將插入或連鎖限制條件將更新或刪除的相同資料,則執行觸發程式或連鎖作業可能會導致 Replicat 錯誤。
例如,來源上的
TableA具有將記錄插入TableB的觸發程式。Extract 設定為擷取TableA和TableB的記錄。在目標上,Replicat 會先插入TableA的記錄,然後TableA的觸發程式會觸發並插入TableB,接著是 Replicat 嘗試將相同記錄插入TableB,這會導致 Replicat 錯誤。 -
請一併檢查任何外來索引鍵限制條件,以降低傳遞效能。
-
對於目標資料庫上具有觸發程式的表格,請將
SET XACT_ABORT參數設為關閉。這樣可確保執行觸發程式作業不會導致遺失的交易。
若要克服這些情況,可以根據複製使用案例實作數個選項。
-
對於 Replicat 是唯一將資料寫入目標表格之處理作業的單向實行,請考量下列目標表格之「識別」資料欄、觸發程式和限制條件的選項。
-
停用或刪除目標表格上的「識別」特性、觸發程式和限制條件。
-
修改識別特性、觸發程式和限制條件,並為每個項目設定
NOT FOR REPLICATION選項,並確定 Microsoft ODBC 驅動程式至少為版本 17.8.1。
-
-
對於 Replicat 和應用程式都將資料寫入目標表格以及啟用觸發程式和限制條件的多向實行,請修改「識別」特性、觸發程式和限制條件,並為每個項目設定
NOT FOR REPLICATION選項,並確定 Microsoft ODBC 驅動程式至少為 17.8.1 版本。此外,若要在多向複製組態中使用
IDENTITY資料欄,請將IDENTITY資料欄的增量值定義為等於組態中的伺服器數目,並為每個資料欄定義不同的原始內建值。例如,三資料庫組態如下:
Database1 將原始內建值設為 0,增量為 3。
Database2 將原始內建值設為 1,增量為 3。
Database3 將原始內建值設為 2,增量為 3。
使用陣列處理改善 IDENTITY 複製
由於每個階段作業只有一個表格可將 IDENTITY_INSERT 設為 ON,因此 Replicat 在將 IDENTITY 資料套用至階段作業中的多個表格時,必須持續切換 IDENTITY_INSERT。若要改善此情況的 Replicat 效能,請使用 BATCHSQL 參數。BATCHSQL 會讓 Replicat 使用陣列處理,而不是一次套用一個 SQL 敘述句。
確保來源和目標表格中的資料列唯一性
Oracle GoldenGate 需要來源和目標表格上某種形式的唯一資料列 ID,才能尋找正確的目標資料列以進行複製的更新和刪除。
除非在 TABLE 或 MAP 敘述句中使用 KEYCOLS 子句,否則 Oracle GoldenGate 會選取資料列 ID,以下列優先順序使用:
-
主索引鍵
-
不包含時戳或非具體化計算資料欄的第一個唯一索引鍵文數字。
-
如果沒有任何先前的金鑰類型存在 (即使表格中可能定義了其他類型的金鑰),Oracle GoldenGate 會建構所有資料欄的虛擬金鑰資料庫允許用於唯一金鑰,不包括金鑰中 Oracle GoldenGate 不支援的金鑰或 Oracle GoldenGate 組態中排除的金鑰。注意:如果表格上有其他不可使用的金鑰,或表格上沒有金鑰,Oracle GoldenGate 會將適當的訊息記錄至報表檔案。從所有資料欄建構索引鍵,代表來源系統上 Oracle GoldenGate 的效能。在目標上,此索引鍵會讓 Replicat 使用更大且更低效率的
WHERE子句。
- 如果表格沒有適當的索引鍵,或者您偏好不使用現有的索引鍵,您可以定義替代索引鍵 (如果表格的資料欄一律包含唯一值)。您可以在 Extract
TABLE參數和 ReplicatMAP參數中包含KEYCOLS子句,以定義此替代索引鍵。指定的金鑰將會覆寫 Oracle GoldenGate 找到的任何現有主索引鍵或唯一索引鍵。請參閱Oracle GoldenGate 參照中的 TABLE | MAP 。
使用 KEYCOLS 指定自訂金鑰
如果表格沒有適用的資料列識別碼,或您偏好不使用識別碼,則您可以定義替代索引鍵,前提是表格的資料欄一律包含唯一值。您可以在 Extract TABLE 參數和 Replicat MAP 參數中包含 KEYCOLS 子句,以定義此替代索引鍵。指定的金鑰會覆寫 Oracle GoldenGate 找到的任何現有主索引鍵或唯一索引鍵。