準備要處理的表格

您必須執行下列工作來準備表格,以便在 Oracle GoldenGate 環境中用於 Db2 z/OS。


停用觸發程式與串聯限制

停用目標表格的觸發程式、連鎖刪除限制條件以及連鎖更新限制條件,或將它們更改為忽略 Oracle GoldenGate 資料庫使用者所做的變更。Oracle GoldenGate 會複製觸發程式或連鎖限制條件所產生的 DML。如果在目標表格上啟用相同的觸發程式或限制條件,因複製的版本而變成冗餘,且資料庫會傳回錯誤。請參考下列範例,其中來源表格為 emp_src 與 salary_src,而目標表格為 emp_targ 與 salary_targ。

確定表格的資料列唯一性

Oracle GoldenGate 需要來源和目標表格上的唯一資料列 ID,才能尋找正確的目標資料列以進行複製的更新和刪除。

除非 TABLE 或 MAP 敘述句中有 KEYCOLS 子句,否則 Oracle GoldenGate 會選取資料列 ID,以下列優先順序使用:

  1. 主索引鍵

  2. 不包含時戳或非具體化計算資料欄的第一個唯一索引鍵文數字。

  3. 如果沒有任何先前的金鑰類型存在 (即使表格中可能定義了其他類型的金鑰),Oracle GoldenGate 會建構所有資料欄的虛擬金鑰資料庫允許用於唯一金鑰,但不包括金鑰中不支援的 Oracle GoldenGate 或 Oracle GoldenGate 組態中排除的金鑰。

注意:如果表格上有其他不可使用的金鑰,或表格中沒有金鑰,Oracle GoldenGate 會將適當的訊息記錄至報表檔案。從所有資料欄建構索引鍵,代表來源系統上 Oracle GoldenGate 的效能。在目標上,此索引鍵會讓 Replicat 使用更廣泛且更低效率的 WHERE 子句。

  1. 如果表格沒有適當的索引鍵,或者您偏好不使用現有的索引鍵,您可以定義替代索引鍵 (如果表格的資料欄一律包含唯一值)。您可以在 Extract TABLE 和 Replicat MAP 參數中包含 KEYCOLS 子句,以定義此替代索引鍵。指定的金鑰將會覆寫 Oracle GoldenGate 找到的任何現有主索引鍵或唯一索引鍵。請參閱Oracle GoldenGate 參照中的 TABLE | MAP 。

使用 KEYCOLS 指定自訂金鑰

如果表格沒有前述類型的資料列 ID,或者您偏好不使用這些 ID,則如果表格的資料欄一律包含唯一值,您可以定義替代索引鍵。您可以在 Extract TABLE 和 Replicat MAP 參數中包含 KEYCOLS 子句,以定義此替代索引鍵。指定的金鑰將會覆寫 Oracle GoldenGate 找到的任何現有主索引鍵或唯一索引鍵。如需詳細資訊,請參閱Oracle GoldenGate 參照。

處理含有 ROWID 資料欄的表格

嘗試插入包含資料類型為 ROWID GENERATED ALWAYS (預設值) 之資料欄的目標表格中,將會因下列 ODBC 錯誤而失敗:

ODBC error: SQLSTATE 428C9 native database error -798. {DB2 FOR OS/390}{ODBC DRIVER}{DSN08015} DSNT408I SQLCODE = -798, ERROR: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE OPTION GENERATED ALWAYS. COLUMN NAME ROWIDCOL.

您可以執行下列其中一項作業,來準備含有 ROWID 資料欄的表格,以供 Oracle GoldenGate 處理:

解決方法 ROWID GENERATE ALWAYS:

  1. 對於來源表格,請建立 Extract TABLE 敘述句,並在排除 ROWID 資料欄的該敘述句中使用 COLSEXCEPT 子句。舉例而言:

    TABLE tab1, COLSEXCEPT (rowidcol);

    COLSEXCEPT 子句不會擷取 ROWID 資料欄,也不會複製到目標表格。

  2. 對於目標表格,請確定 Replicat 不會嘗試使用 ROWID 資料欄作為索引鍵。這可以用下列其中一種方式來完成:

    • 在目標表格定義中指定主索引鍵。

    • 如果無法建立索引鍵,請為表格建立 Replicat MAP 參數,然後在包含 ROWID 資料欄以外之任何唯一資料欄的該敘述句中使用 KEYCOLS 子句。Replicat 將使用這些資料欄作為索引鍵。舉例而言:

      MAP tab1, TARGET tab1, KEYCOLS (num, ckey);

維護具體化查詢表格

為了維護來源與目標具體化查詢表格 (MQT) 之間的同位,您可以複製基礎表格,但不會複製 MQT。目標資料庫會根據 Replicat 套用至基本表格的變更來維護 MQT。

下列為設定這些表格的規則: