準備要處理的表格

必須在 Oracle GoldenGate 環境中處理下列表格屬性。

停用觸發程式和串聯限制條件

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

  1. emp_src 會發出刪除。

  2. 它會將刪除重疊至 salary_src。

  3. Oracle GoldenGate 會將這兩個刪除項目傳送至目標。

  4. 父項刪除會先到達,並套用至 emp_targ。

  5. 父項刪除會將刪除重疊套用至 salary_targ。

  6. 從 salary_src 連鎖刪除會套用至 salary_targ 。

  7. 找不到資料列,因為該資料列已在步驟 5 中刪除。

若要設定 Replicat 在資料庫階段作業開始時停用目標觸發程式,請執行下列步驟:

  1. 將複製角色指定給 Replicat 使用者。

  2. 將下列參數陳述式新增至 Replicat 參數檔的根層級。

SQLEXEC "set triggers off"

指定資料列 ID

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

限制沒有關鍵碼之表格中的列變更

如果目標表格沒有主索引鍵或唯一索引鍵,則可以有重複的資料列。Oracle GoldenGate 可能會更新或刪除目標表格中的太多資料列,導致來源和目標資料不同步,而不會出現錯誤訊息提醒您。若要限制更新的資料列數目,請將 DBOPTIONS 參數與 Replicat 參數檔中的 LIMITROWS 選項搭配使用。LIMITROWS 可提升目標系統上的 Oracle GoldenGate 效能,因為僅處理一個資料列。

複製加密資料

Oracle GoldenGate 支援以系統加密的密碼加密的資料欄,但不支援以使用者定義的密碼加密的資料欄。請根據下列 Oracle GoldenGate 限制,檢查要從中擷取資料的表格:

加密的資料欄會在資料檔和日誌中加密,因此必須將 Extract 設定為從資料庫擷取純文字值。若要觸發此擷取,請使用 Extract TABLE 參數的 FETCHCOLS 和 FETCHMODCOLS[EXCEPT] 選項。FETCHCOLS 會強制擷取不在日誌中的值,而 FETCHMODCOLS 或 FETCHMODCOLS[EXCEPT] 會強制擷取日誌中的值。同時使用這些參數可確保一律從資料庫擷取加密的資料欄。

以下是如何設定 Extract 以支援加密的範例。在此範例中,加密的資料欄為 cardnum。

TABLE ab.payments, FETCHCOLS (cardnum), FETCHMODCOLS (cardnum);

準備交易記錄

為了擷取 DML 作業,Oracle GoldenGate 會讀取線上日誌。若要確保 Oracle GoldenGate 處理作業的持續性與完整性,必須依照下列各節中的指示設定日誌:

初始化次要截斷點

在執行 Oracle GoldenGate Extract 處理作業之前,先在來源系統上建立次要日誌截斷點。擷取會使用次要截斷點來識別待處理的資料。

若要起始次要截斷點,請以具有 sa_role 權限的使用者身分登入資料庫,然後發出下列命令:

dbcc settrunc( 'ltm', valid )

依預設,Extract 將會在建立次要截斷點後進行管理。不允許 Extract 停止超過必要的時間;否則日誌最終可能會填滿,而資料庫將會停止。解決此問題的唯一方法是停用次要截斷點並在 Oracle GoldenGate 外部進行管理,然後永久清除交易日誌。摘錄尚未處理的資料將會遺失,您必須重新同步來源與目標資料。

若要控制次要截斷點的管理方式,請使用 TRANLOGOPTIONS 參數。如需詳細資訊,請參閱Oracle GoldenGate for Windows and UNIX 的參照。

調整日誌大小並保留日誌

保留來源系統上的足夠日誌資料,讓 Extract 在您停止它或發生非計畫性停機後,可以從其檢查點重新開始。Extract 必須能夠存取包含最早未確認工作單位開始的日誌,以及之後的所有日誌。若要判斷 Extract 檢查點的位置,請使用 INFO EXTRACT 命令。如需有關 INFO EXTRACT 的詳細資訊,請參閱Oracle GoldenGate for Windows and UNIX 的參照。

如果沒有保留 Extract 在處理期間所需的資料 (不論是在線上或備份日誌中),則可能需要下列其中一個更正動作:

確定不使用備份或歸檔選項,導致來源系統上的新備份覆寫舊的歸檔檔案。新的備份應該是不同名稱與舊備份不同的檔案。這可確保如果 Extract 尋找特定日誌,它仍會存在,並且確保資料在支援案例需要時可供使用。

啟用交易記錄

使用 ADD TRANDATA 命令標示每個來源表格以進行複製。此命令使用 Sybase sp_setreptable 與 sp_setrepcol 系統程序。建議使用 ADD TRANDATA 來標示表格,而不是透過資料庫介面使用這些程序,不過擁有者或系統管理員可以視需要使用這些程序。有關詳細資訊,請參閱 Sybase 文件。

若要標示要使用 ADD TRANDATA 進行複製的表格,請執行下列動作:

為每個要標示的表格執行 ADD TRANDATA 命令。ADD TRANDATA 指令的語法為:

ADD TRANDATA SCHEMA.TABLE LOBSNEVER | LOBSALWAYS | LOBSALWAYSNOINDEX | LOBSIFCHANGED

LOBSNEVER | LOBSALWAYS | LOBSALWAYSNOINDEX | LOBSIFCHANGED 控制一律不會傳輸 LOB 資料、只在變更時傳輸 (預設值),還是一律傳輸。若未指定 LOB 選項,則 LOBSIFCHANGED 為預設值。ADD TRANDATA 命令將會覆寫目前為表格設定的 LOB 複製設定。

注意:某些 ADD TRANDATA 選項會啟用 sp_setrepcol 的 ALWAYS_REPLICATE 選項。如果 LOB 資料欄包含 NULL 值,則會更新表格中的另一個資料欄 (但不是 LOB),即使已啟用 ALWAYS_REPLICATE,也不會擷取 LOB。