GETUPDATEBEFORES | 忽略更新
有效對象
擷取與 Replicat
說明
使用 GETUPDATEBEFORES 和 IGNOREUPDATEBEFORES 參數來控制 UPDATE 作業中資料欄的先前影像是否包含在 Oracle GoldenGate 所處理的記錄中。影像包含更新資料列之前存在的資料欄明細之前。
(僅限 Oracle) 依照預設,Oracle GoldenGate 會擷取單一統一更新記錄中更新作業的變更前和變更後值。對於其他資料庫,只有變更前的值會寫入歷程檔。在舊版中,預設值是僅擷取變更後的值。從這個版本開始,自訂 SQL 敘述句 (SQLEXEC) 現在只會在每次更新作業使用新的預設更新格式執行一次。在此版本之前,自訂 SQL 敘述句會在發生變更前的值執行兩次,並在發生變更後值時執行一次。如果您使用 Oracle GoldenGate 搭配統一更新格式,可以使用 @BEFORE、@AFTER 和 @BEFOREAFTER 函數,明確地將前置或後續值傳送至自訂 SQL 敘述句。雖然 Oracle GoldenGate 預設可以使用此更新格式,但如果有衝突的參數,且先前會產生兩個個別的前置和後續變更記錄,則會保留舊格式的凸輪。在這些情況下,資訊訊息會記錄在報告檔案中。
使用 GETUPDATEBEFORES 參數,如下所示:
-
在 Extract 參數檔中,從資料來源擷取影像之前。
-
包含在 Replicat 作業中影像之前的影像之 Replicat 參數檔中。
您可以在影像之前與之後影像進行比較,以識別交易的淨結果,或執行其他差異計算。例如,如果 BALANCE 欄位在更新前為 $100,之後為 $120,則比較會顯示 $20 的差異。您可以使用 Oracle GoldenGate 的資料欄轉換函數來執行比較與計算。
若要在參數檔中的影像之前參照,請使用 @BEFORE 轉換函數。舉例而言:
COLMAP (previous = @BEFORE (balance))
使用「衝突偵測與解決 (CDR)」功能時,需要 GETUPDATEBEFORES。如需 CDR 的詳細資訊,請參閱手動衝突偵測與解決。
GETUPDATEBEFORES 和 IGNOREUPDATEBEFORES 參數是表格特定的參數。所有後續的 TABLE 或 MAP 敘述句都會有一個參數保持有效,直到遇到其他參數為止。
由於您可以選擇性地啟用或停用 MAP 敘述句之間的這些參數,因此您可以為協調式 Replicat 的不同繫線啟用或停用這些參數。在一組 MAP 敘述句中指定 GETUPDATEBEFORES 繫線,然後在不同的 MAP 敘述句集合中指定 IGNOREUPDATEBEFORES 繫線。
GETUPDATESBEFORES 的限制:
-
對於 PostgreSQL,不會記錄
LOB資料欄的影像,也不會寫入歷程檔。 -
對於 SQL Server,
IMAGE、NTEXT和TEXT資料類型的資料欄會記錄為影像更新作業前的NULL值,除非資料欄已更新,否則VARBINARY(MAX)、VARCHAR(MAX)和NVARCHAR(MAX)的資料欄會記錄為影像更新作業前的NULL值。
預設
IGNOREUPDATEBEFORES
語法
GETUPDATEBEFORES | IGNOREUPDATEBEFORES
範例
此範例顯示如何選擇性地將 GETUPDATEBEFORES 和 IGNOREUPDATEBEFORES 套用至不同的 MAP 敘述句,每個敘述句代表一個協調式 Replicat 的不同繫線。
GETUPDATEBEFORES
MAP sales.cust, TARGET sales.cust, THREAD (1);
MAP sales.ord, TARGET sales.ord, THREAD (2);
IGNOREUPDATEBEFORES
MAP sales.loc, TARGET sales.loc, THREAD (3);