準備要處理的表格
您必須執行下列工作來準備表格,以便在 Oracle GoldenGate 環境中用於 Db2 z/OS。
停用觸發程式與串聯限制
停用目標表格的觸發程式、連鎖刪除限制條件以及連鎖更新限制條件,或將它們更改為忽略 Oracle GoldenGate 資料庫使用者所做的變更。Oracle GoldenGate 會複製觸發程式或連鎖限制條件所產生的 DML。如果在目標表格上啟用相同的觸發程式或限制條件,因複製的版本而變成冗餘,且資料庫會傳回錯誤。請參考下列範例,其中來源表格為 emp_src 與 salary_src,而目標表格為 emp_targ 與 salary_targ。
-
會發出
emp_src的刪除。 -
它會將刪除重疊至
salary_src。 -
Oracle GoldenGate 會將這兩個刪除項目傳送至目標。
-
父項刪除會先到達,並套用至
emp_targ。 -
父項刪除會將刪除重疊套用至
salary_targ。 -
從
salary_src連鎖刪除會套用至salary_targ。 -
在步驟 5 中刪除資料列,且找不到該資料列。
確定表格的資料列唯一性
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 指定自訂金鑰
如果表格沒有前述類型的資料列 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資料欄都定義為GENERATED BY DEFAULT。 -
如果無法變更表格定義,您可以使用下列程序來處理表格定義。
解決方法 ROWID GENERATE ALWAYS:
-
對於來源表格,請建立 Extract
TABLE敘述句,並在排除ROWID資料欄的該敘述句中使用COLSEXCEPT子句。舉例而言:TABLE tab1, COLSEXCEPT (rowidcol);COLSEXCEPT子句不會擷取ROWID資料欄,也不會複製到目標表格。 -
對於目標表格,請確定 Replicat 不會嘗試使用
ROWID資料欄作為索引鍵。這可以用下列其中一種方式來完成:-
在目標表格定義中指定主索引鍵。
-
如果無法建立索引鍵,請為表格建立 Replicat
MAP參數,然後在包含ROWID資料欄以外之任何唯一資料欄的該敘述句中使用KEYCOLS子句。Replicat 將使用這些資料欄作為索引鍵。舉例而言:MAP tab1, TARGET tab1, KEYCOLS (num, ckey);
-
維護具體化查詢表格
為了維護來源與目標具體化查詢表格 (MQT) 之間的同位,您可以複製基礎表格,但不會複製 MQT。目標資料庫會根據 Replicat 套用至基本表格的變更來維護 MQT。
下列為設定這些表格的規則:
-
在您的
TABLE和MAP敘述句中包含基礎表格。 -
請勿在
TABLE和MAP敘述句中包含 MQT。 -
TABLE和MAP敘述句中可以使用萬用字元,即使它們可能會解析 MQT 名稱以及一般表格名稱。Oracle GoldenGate 會自動從萬用字元表格清單中排除 MQT。不過,依名稱明確列出在 ExtractTABLE敘述句中的任何 MQT 將會導致 Extract 異常中止。