TABLE | MAP
有效對象
TABLE 適用於 Extract。您只能將 TABLE 與 Replicat 搭配使用 EVENTACTIONS 參數。MAP 對某些情況和 Replicat 的 Extract 有效。請參閱 MAP for Extract 瞭解詳細資訊。
說明
TABLE 和 MAP 參數可控制要受 Oracle GoldenGate 處理作業影響的物件之選取、對應及操控。這些參數的運作方式如下:
-
使用 Extract 參數檔中的
TABLE參數,指定一或多個要由 Extract 處理作業從資料來源擷取的物件。TABLE選項會指定處理工作,例如在 Extract 將擷取的資料寫入 Oracle GoldenGate 歷程檔之前,必須執行的篩選和記號定義。 -
列出 Extract 的
EXTFILE、EXTTRAIL、RMTFILE或RMTTRAIL參數之後,列出TABLE參數。若要在同一個 Extract 中寫入多個歷程檔,請在每個歷程檔設定之後建立個別的TABLE參數。 -
使用 Replicat 參數檔中的
MAP參數,將來源物件的資料對應至適當的目標物件。MAP選項會指定將資料套用至目標物件之前必須執行的處理工作,例如篩選、轉換以及錯誤處理。您要與來源物件同步的每個目標物件,都必須透過MAP參數與該來源物件建立關聯。可以使用萬用字元指定多個來源 - 目標關係。
TABLE 和 MAP 適用於初始載入組態,以及設定為支援複製交易變更的線上程序。
您可以使用 TABLE 和 MAP 處理下列物件:
-
索引組織表格
-
具體化視觀表
-
表格
若要指定 Extract 擷取的順序,請使用 SEQUENCE 參數。
注意:Oracle GoldenGate 支援複製 Oracle 具體化視觀表的實際資料值。
您可以在參數檔中使用一或多個 TABLE 或 MAP 敘述句 (含或不含萬用字元) 來指定要處理的所有物件。
您可以使用下列參數,從萬用字元的 TABLE 或 MAP 敘述句排除物件:
-
TABLEEXCLUDE和MAPEXCLUDE參數 -
其他排除參數包括
CATALOGEXCLUDE、SCHEMAEXCLUDE以及EXCLUDEWILDCARDOBJECTSONLY。 -
處理與 AutoCDR 不相容的參數 (例如
REPERROR/MAPEXCEPTIONEXCEPTIONONLY) 時發生錯誤。啟用 AutoCDR 的表格會忽略任何其他錯誤處理。
預設
無
TABLE 的語法
對於表格,您可以使用所有 TABLE 選項。對於非表格物件,請只使用 TABLE 來指定要擷取的物件。
TABLE <source_table>[, TARGET <target_table>]
[, ATTRCHARSET (<charset>)]
[, CHARSET <character_set>]
[, COLCHARSET <character_set>]
[, COLMAP (<column_mapping>)]
[, {COLS | COLSEXCEPT} (<column_list>)]
[, {DEF | TARGETDEF} <template>]
[, EVENTACTIONS <action>]
[, EXITPARAM '<parameter>']
[, {FETCHCOLS | FETCHCOLSEXCEPT} (<column_list>)]
[, {FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column_list>)]
[, FETCHBEFOREFILTER]
[, FILTER (<filter_clause>)]
[, GETBEFORECOLS (<column_specification>)]
[, KEYCOLS (<columns>)]
[, SQLEXEC (<SQL_specification>)]
[, SQLPREDICATE 'WHERE <where_clause>']
[, TOKENS (<token_definition>)]
[, TRIMSPACES | NOTRIMSPACES]
[, TRIMVARSPACES | NOTRIMVARSPACES]
[, WHERE (<clause>)]
[, <container>.]<schema.table> PARTITIONOBJID <ptn_object_ID> [, <ptn_object_ID>]
;
MAP 語法
MAP <source_table>, TARGET <target_table>
[, MOD_COMPARE_COLS( <tgt_col> = <source> )]
[, COLMAP (<column_mapping>)]
[, COMPARECOLS (<column_specification>)]
[, COORDINATED]
[, {DEF | TARGETDEF} <template>]
[, EXCEPTIONSONLY]
[, EXITPARAM '<parameter>']
[, EVENTACTIONS (<action>)]
[, FILTER (<filter_clause>)]
[, HANDLECOLLISIONS | NOHANDLECOLLISIONS]
[, INSERTALLRECORDS]
[, INSERTAPPEND | NOINSERTAPPEND]
[, KEYCOLS (<columns>)]
[, MAPALLCOLUMNS | NOMAPALLCOLUMNS]
[, MAPEXCEPTION (<exceptions_mapping>)]
[, MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS]
[, REPERROR (<error>, <response>)]
[, RESOLVECONFLICT (<conflict_resolution_specification>)]
[, SQLEXEC (<SQL_specification>)]
[, THREAD (<thread_ID>)]
[, THREADRANGE (<thread_range>[, <column_list>])]
[, TRIMSPACES | NOTRIMSPACES]
[, TRIMVARSPACES | NOTRIMVARSPACES]
[, WHERE (<clause>)]
[, <container>.]<schema.table> PARTITIONOBJID <ptn_object_ID> [, <ptn_object_ID>]
;
TABLE 和 MAP 選項
下表摘要 TABLE 和 MAP 參數可用的選項。請注意,並非所有選項都對這兩個參數有效。
表 11 TABLE 和 MAP 語法元件摘要
| 元件 | 說明 | 有效對象 |
|---|---|---|
MAP MOD_COMPARE_COL( tgt_col = source [,...] ) |
此為僅限 Replicat 參數。將指定的來源值指派給目標資料欄的前一個影像作為索引鍵值,而該值用於 WHERE 子句。 |
MAP |
TABLE <source_table>[, TARGET <target>] |
指定 Extract 之 TABLE 敘述句中的來源物件,以及與目標物件的選擇性對應。用於 Extract 參數檔。 |
TABLE |
MAP source_table, TARGET target_table |
指定 Replicat 處理作業的來源 - 目標物件對應。在 Replicat 參數檔中使用。 | MAP |
ATTRCHARSET (charset) |
指定 UDT 屬性層次的來源字元集資訊。 | TABLE |
COLCHARSET character_set |
指定任何支援的字元集。 | TABLE |
COLMAP (column_mapping) |
在不同的來源與目標資料欄之間對應記錄。 | TABLE 與 MAP |
{COLS \| COLSEXCEPT} (column_list) |
選取或排除要處理的欄。 | TABLE |
COMPARECOLS (column_specification) |
指定用於衝突偵測與解決的資料欄。 | TABLE 與 MAP |
COORDINATED |
強制將交易處理為障礙異動。 | MAP |
{DEF | TARGETDEF} template |
指定來源定義或目標定義樣板。 | TABLE 和 MAP |
EXCEPTIONSONLY |
指定 MAP 陳述式為例外 MAP 陳述式。 |
MAP |
EVENTACTIONS (action) |
根據符合指定篩選規則的記錄觸發動作。 | TABLE 和 MAP |
EXITPARAM 'parameter' |
以文字字串的形式傳送參數至使用者結束程式。 | TABLE 與 MAP |
FETCHBEFOREFILTER |
指示執行篩選之前要執行的 FETCHCOLS 或 FETCHCOLSEXCEPT 動作。 |
TABLE |
{FETCHCOLS | FETCHCOLSEXCEPT} (column_list) |
當值不在交易記錄中時,啟用從來源資料庫擷取資料欄值。 | TABLE |
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (column_list) |
強制在交易日誌中有資料欄時,從資料庫擷取資料欄值。 | TABLE |
FILTER (filter_clause) |
根據數值選取記錄。FILTER 提供比 WHERE 更大的彈性。 |
TABLE 和 MAP |
GETBEFORECOLS (column_specification) |
在要擷取並寫入歷程檔的資料欄影像之前強制執行。 | TABLE |
HANDLECOLLISIONS \| NOHANDLECOLLISIONS |
起始載入處理程序以變更同步群組所套用的處理程序來調整目標表的變更結果。 | MAP |
INSERTALLRECORDS |
將所有資料列變更套用為插入。 | MAP |
INSERTAPPEND \| NOINSERTAPPEND |
控制 Replicat 是否在 INSERT 敘述句使用 Oracle APPEND 提示。 |
MAP |
KEYCOLS (columns) |
指定可唯一識別資料列的資料欄。 | TABLE 和 MAP |
MAPALLCOLUMNS | NOMAPALLCOLUMNS |
控制 Replicat 是否取得非索引鍵資料欄。 | 北美 |
MAPEXCEPTION (exceptions_mapping) |
指定 MAP 敘述句包含萬用字元表格的異常狀況處理。 |
MAP |
MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS |
控制 Replicat 是否在預設資料欄對應的 Oracle 目標表格中包含不顯示的資料欄。對於使用明確資料欄對應之 Oracle 目標表格中不顯示的資料欄,一律都會對應它們,因此不需要此選項。 | MAP |
REPERROR (error, response) |
控制執行 MAP 敘述句時,Replicat 回應錯誤的方式。 |
MAP |
RESOLVECONFLICT (conflict_resolution_specification) |
指定衝突解決方式的規則。 | MAP |
SQLEXEC (SQL_specification) |
執行預存程序與查詢。 | TABLE 與 MAP |
SQLPREDICATE 'WHERE where_clause' |
啟用 WHERE 子句以選取初始載入的資料列。 |
TABLE |
THREAD (thread_ID) |
適用於協調模式的 Replicat。指定 MAP 敘述句將由指定的 Replicat 繫線處理。 |
MAP |
THREADRANGE (thread_range, column_list) |
適用於協調模式的 Replicat。指定 MAP 敘述句將由指定的 Replicat 繫線範圍處理。 |
MAP |
TOKENS (token_definition) |
定義使用者權杖。 | TABLE |
TRIMSPACES \| NOTRIMSPACES |
控制將 CHAR 對應至 VARCHAR 資料欄時,是否裁剪尾端空格。 |
TABLE 和 MAP |
TRIMVARSPACES \| NOTRIMVARSPACES |
控制將 VARCHAR 對應至 CHAR 或 VARCHAR 資料欄時,是否裁剪尾端空格。 |
TABLE 與 MAP |
WHERE (clause) |
根據條件運算子選取記錄。 | TABLE 與 MAP |
| ; | (Semicolon) 終止 TABLE 或 MAP 陳述式且為必要。 |
TABLE 與 MAP |
PARTITIONOBJID |
可用於整合式擷取。此選項用來指定分割表格所要擷取之分割區的物件 ID。 | TABLE 和 MAP |
MAP MOD_COMPARE_COL (tgt_col = 來源 [,...])
tgt_col 必須是目標表格資料欄名稱,而且應該是要正確生效的索引鍵資料欄。source 可以是來源表格資料欄、常數值 (數字或字串)、資料欄對應函數或 SQLEXEC 結果。例如,在影像值為 1 之前,source col1 會對應至 target col 1. source col1,這是虛擬值,因為 DBA 會將其遮罩以保全。Replicat 可在 target col1 的影像值前 SQLEXEC 查詢實際值。使用 MOD_COMPARE_COLS() 時,Replicat 會將虛擬 source col1 值取代為 SQLEXEC 結果,讓 UPDATE 或 DELETE 作業正常運作。
TABLE <source_table>[, TARGET <target>]
TABLE 在 Extract 參數檔中有效。
使用 TABLE 指定要讓 Extract 擷取資料的來源物件。指定物件的完全合格兩部分或三部分名稱,例如 <schema.table> 或 <catalog.schema.table>。您可以使用萬用字元指定多個含有一個 TABLE 敘述句的物件。若要正確指定物件名稱和萬用字元,請參閱 Oracle GoldenGate Microservices 文件中的在資料庫物件名稱中使用萬用字元和在命令引數中使用萬用字元。
只有當 Extract 必須參照目標定義檔案 (以 TARGETDEFS 參數指定) 以執行轉換,或當使用 COLMAP 選項來對應資料欄時,才使用 TARGET 選項。否則,可以從 TABLE 參數省略。使用 COLMAP 和轉換工作的資料欄對應通常會在目標系統上執行,以將複製活動對來源系統的影響降到最低,但可視需要在來源系統上執行。例如,在具有多個來源和一個目標的組態中,可以在來源系統上執行資料欄對應和轉換。在這種情況下,管理一個目標定義檔案可能比較容易,而不是管理每個來源資料庫的定義檔案,特別是在需要產生新定義檔案的頻繁應用程式變更時。
在 TABLE 參數中使用 TARGET 可根據目標結構 (而非來源結構) 識別擷取資料的中繼資料,以反映定義檔案或資料欄對應中反映的記錄結構。如果 TARGET 指定目標 Oracle 容器資料庫中的表格,請勿使用三部分名稱。Replicat 只能連線到一個容器或目錄,因此會假設該名稱的容器或目錄部分與 Replicat 登入的容器或目錄部分相同 (根據資料庫而定,使用 USERIDALIAS 指定)。
如果不需要其他 TABLE 語法選項來處理指定的來源資料,您可以使用簡單的 TABLE 陳述式,請務必以分號加以終止。
TABLE sales.customers;
以下顯示使用萬用字元來指定多個表格:
TABLE sales.*;
前面的 TABLE 敘述句會直接 Extract 擷取指定物件的所有支援資料欄資料,並將其寫入歷程檔而不執行任何篩選、轉換或其他操控。
MAP <source_table>, TARGET <target_table>
MAP 在 Replicat 參數檔中有效。您也可以在 Extract 參數檔中使用 MAP,以變更 Oracle GoldenGate 為表格儲存的交易名稱。請參閱
使用 MAP 指定來源物件,然後使用 TARGET 指定 Replicat 套用複製來源資料的目標物件。MAP 和 TARGET 子句共同構成對應。
-
對於
MAP <source_table>,請指定來源物件。指定物件的完全合格兩部分或三部分名稱,例如<schema.table>或<catalog.schema.table>。您可以使用萬用字元來指定多個來源物件。 -
若為
TARGET <target_table>,請指定兩部分名稱,即使目標為容器資料庫。Replicat 只能連線到一個容器或目錄,因此會假設該名稱的容器或目錄部分與 Replicat 登入的容器或目錄部分相同 (視資料庫而定,以USERIDALIAS指定)。您可以使用萬用字元來指定多個目標物件。
以下顯示使用萬用字元來指定多個表格。請注意,TARGET 子句未包含萬用字元前的 tab 前置碼。該規格無效,因為萬用字元會解析為 sales.tabtab1、sales.tabtab2 等等。
MAP sales.tab*, TARGET sales.*;
如果物件不需要篩選、對應或其他工作,您可以使用簡單的 MAP 敘述句,如以下所示,請務必以分號終止每個敘述句。
MAP sales.customers, TARGET sales.customers;
MAP fin.*, TARGET fin.*;
ATTRCHARSET <(charset)>
ATTRCHARSET 適用於 TABLE。
使用 ATTRCHARSET 子句指定 UDT 屬性層次的來源字元集資訊。它會覆寫歷程檔中定義的字元集,或由 SOURCECHARSET、CHARSET 或 COLCHARSET 參數指定。
有效值為字元集名稱與有效的 UDT 屬性名稱。支援萬用字元屬性名稱。舉例而言:
TABLE SCHEMA.T*,
ATTRCHARSET(WE8DEC, col*.attr1, col1.attr*.attr3);
COLCHARSET <character_set>
COLCHARSET 適用於 TABLE。
使用 COLCHARSET 子句指定任何支援的字元集。請參閱 COLCHARSET 以取得詳細資訊。
COLMAP <(column_mapping)>
COLMAP 適用於 TABLE 和 MAP。
使用 COLMAP:
-
當來源和目標資料欄的名稱不同時,將個別來源資料欄對應至目標資料欄。
-
指定來源和目標名稱相同的預設資料欄對應。
COLMAP 提供選取、轉譯資料欄資料,以及將資料欄資料從來源資料欄移至目標資料欄的指示。注意:若要在後續 MAP 敘述句中跨所有表格建立資料欄對應的全域規則,請使用 COLMATCH 參數。
取得有關設定資料欄對應的詳細資訊
若要使用 COLMAP,必須考量相關的組態準則,例如來源與目標資料欄結構是否相同,以及全域資料欄對應參數是否足夠。
語法
COLMAP (
[USEDEFAULTS, ]
<target_column> = <source_expression> [BINARYINPUT]
[, ...]
)
USEDEFAULTS
如果在明確的資料欄對應中未指定來源和目標資料欄,則自動對應名稱相同的來源和目標資料欄。資料類型會根據本機資料定義檔案,視需要自動轉譯。如果那些資料欄的名稱相同,而且資料不需要任何篩選或轉換,USEDEFAULTS 就不需要明確的資料欄對應。
請先指定 USEDEFAULTS,再指定 COLMAP 子句中的明確資料欄對應。
<target_column = source_expression>
定義明確的來源 - 目標資料欄對應。
<target_column>
指定目標資料欄的名稱。如需資料欄名稱中支援的字元,請參閱支援的字元集。
<source_expression>
可為下列任何一項:
-
來源資料欄的名稱,例如
ORD_DATE -
數值常數,例如
123 -
在單引號內的字串常數,例如
'ABCD' -
使用 Oracle GoldenGate 資料欄轉換函數的表示式,例如
@STREXT (COL1, 1, 3)。請參閱表格和資料欄對應函數瞭解詳細資訊。
BINARYINPUT
當目標資料欄定義為二進位資料類型 (例如 RAW 或 BLOB),但來源輸入在資料中間包含二進位零時,請使用 BINARYINPUT。來源輸入會以二進位輸入處理,並隱藏資料值的取代。
範例 1
MAP ggs.tran, TARGET ggs.tran2, COLMAP (loc2 = loc, type2 = type);
範例 2
TABLE ggs.tran, COLMAP (SECTION = @STRCAT('\u00a7', SECTION ));
{COLS | COLSEXCEPT} (<column_list>)
COLS 和 COLSEXCEPT 對 TABLE 有效。
使用 COLS 和 COLSEXCEPT 來控制要擷取資料的資料欄。
-
COLS指定包含要擷取之資料的資料欄。使用COLS時,Oracle GoldenGate 會忽略不在COLS清單中的所有資料欄。 -
COLSEXCEPT指定要從擷取中排除的資料欄。使用COLSEXCEPT時,Oracle GoldenGate 會擷取不在COLSEXCEPT清單中的所有資料欄。對於包含多個資料欄的表格,COLSEXCEPT可能比以COLS列出每個資料欄更有效率。注意:請勿排除索引鍵資料欄,也不要使用
COLSEXCEPT來排除包含 Oracle GoldenGate 不支援之資料類型的資料欄。COLSEXCEPT不排除不支援的資料類型。
若要使用 COLS,需要下列項目:
-
表格必須有一或多個索引鍵資料欄,或者必須使用
KEYCOLS選項定義替代索引鍵。請參閱KEYCOLS(資料欄) 。 -
以
KEYCOLS指定的索引鍵資料欄或資料欄必須包含在以COLS指定的資料欄清單中。否則,系統不會擷取這些資料,並在處理期間產生錯誤。
如果沒有主索引鍵、唯一索引鍵或 TABLE 敘述句中的 KEYCOLS 子句,Oracle GoldenGate 會使用表格中的所有資料欄,因此不需要呈現 COLS。
注意:請勿在資料汲取 Extract 群組以傳遞模式處理的表格使用此選項。
語法
{COLS | COLSEXCEPT} (<column> [, ...])
<column>
資料欄的名稱。若要指定多個 <columns>,請建立以逗號分隔的清單,例如:
COLS (name, city, state, phone)
注意:如果資料庫只記錄更新作業中變更之資料欄的值,則可能無法使用以 COLS 指定的擷取資料欄。若要讓這些資料欄可供使用,請使用 TABLE 敘述句中的 FETCHCOLS 選項,或啟用資料欄的補充記錄日誌。
範例
此範例中的 COLS <clause> 只會擷取 <columns> 1 和 3,而 COLSEXCEPT <clause> 會擷取除 <columns> 1 和 3 以外的所有 <columns>。
TABLE hq.acct, COLS (col1, col3);
TABLE hq.sales, COLSEXCEPT (col1, col3);
COMPARECOLS (<column_specification>)
COMPARECOLS 對 MAP 有效。
Use COMPARECOLS to specify the columns that Replicat uses to detect and resolve update or delete conflicts when configured with the RESOLVECONFLICT option of MAP in a multi-master configuration. 衝突是歷程檔中記錄的先前影像與目標表格中適當資料之間的不相符。
若要使用 COMPARECOLS,必須透過 Extract TABLE 敘述句中的 GETBEFORECOLS 參數,在歷程檔記錄中提供前面的影像。指定的資料欄必須存在於目標資料庫中,同時也是 Replicat 組態的一部分 (符合 TARGET 規格,無論是否有 COLMAP 子句)。
COMPARECOLS 僅支援純量資料類型作為比較資料欄。純量資料類型可用於 WHERE 子句、具有單一、單元值以及沒有內部元件。Oracle GoldenGate 支援的純量資料類型包括下列,但不包括 LOB。
-
數值資料型態
-
日期資料型態
-
字元資料類型
部分非純量資料類型的範例包括空間資料、使用者定義的資料類型、大型物件 (LOB)、XML、參照資料類型以及 RAW。考量 CDR 的資料列可以包含非純量資料,只要衝突不在非純量資料本身。
若要指定衝突解決常式,請使用 MAP 的 RESOLVECONFLICT 選項。COMPARECOLS 和 RESOLVECONFLICT 可以是 MAP 敘述句中的任何順序。
取得有關設定 CDR 功能的詳細資訊
如需設定衝突偵測與解決方式的詳細資訊,請參閱自動衝突偵測與解決或手動衝突偵測與解決。
語法
COMPARECOLS(
{ON UPDATE | ON DELETE}
{ALL | KEY | KEYINCLUDING (<col>[,...]) | ALLEXCLUDING (<col>[,...]) }
[,...]
)
{ON UPDATE |
ON DELETE} |
指定是否應比較指定資料欄的前一個影像以進行更新或刪除。您只能使用 ON UPDATE、僅 ON DELETE 或兩者。如果同時使用兩者,請在相同的 COMPARECOLS 子句內指定兩者。請參閱範例,瞭解如何同時使用兩者。
{ALL | KEY | KEYINCLUDING (<col>[,...]) | ALLEXCLUDING (<col>[,...])}
指定擷取之前影像的資料欄。
ALL
使用目標表格中的所有資料欄進行比較。如果在歷程檔中沒有可用的影像之前有任何對應,就會產生錯誤。使用 ALL 會針對 Replicat 強制執行最高處理負載,但允許使用所有資料欄進行衝突偵測比較,以獲得最大準確性。
KEY
僅比較主索引鍵資料欄。這是最快的選項,但不允許偵測最準確的衝突,因為索引鍵可以相符,但非索引鍵資料欄可能會不同。
KEYINCLUDING
比較主索引鍵資料欄和指定的資料欄。這是速度與偵測準確度之間的合理妥協。
ALLEXCLUDING
比較指定資料欄以外的所有資料欄。對於包含多個資料欄的表格,ALLEXCLUDING 可能比 KEYINCLUDING 更有效率。請勿排除索引鍵資料欄。
範例 1
在下列範例中,會針對衝突比較索引鍵資料欄加上 name、address 和 salary 資料欄。
MAP src, TARGET tgt
COMPARECOLS (
ON UPDATE KEYINCLUDING (name, address, salary),
ON DELETE KEYINCLUDING (name, address, salary));
範例 2
在下列範例中,會忽略 comment 資料欄,並比較所有其他資料欄的衝突。
MAP src, TARGET tgt
COMPARECOLS (ON UPDATE ALLEXCLUDING (comment))
協調式
COORDINATED 對 MAP 有效。此選項在 Replicat 處於協調模式時有效。
使用 COORDINATED 選項,強制將對相同 MAP 敘述句中的物件進行的交易當作屏障交易處理。它會讓所有 MAP 敘述句中的所有繫線同步至相同的歷程檔位置。同步化位置是交易的開頭,其中包含符合包含 COORDINATED 關鍵字之 MAP 的記錄。接著,交易會由單一繫線 (即目前執行中繫線中繫線 ID 最小的繫線) 原子套用,如果在參數檔中指定 USEDEDICATEDCOORDINATIONTHREAD,則會使用 ID 為 0 的專用繫線套用。
與 COORDINATED 一起指定的 THREAD 和 THREADRANGE 子句會被忽略,因為指定的繫線不會套用記錄。COORDINATED 關鍵字會暫時暫停平行處理,讓目標表格在套用強制協調交易之前處於一致狀態。在此之後,平行執行就會再次開始。
依預設 Replicat 可協調更新主索引鍵的異動、執行 DDL 的異動,以及特定 EVENTACTIONS 動作。COORDINATED 提供明確的協調。
如需詳細資訊,請參閱關於協調式 Replicat 。
語法
COORDINATED
範例
以下為 COORDINATED 選項的使用範例。在此範例中,商業規則要求在 Replicat 對 MAP 敘述句中指定的物件執行包括 SQLEXEC 作業的交易之前,目標表格處於一致狀態。在此情況下,平行程度必須暫時轉換成序列 SQL 處理。
針對下列 MAP 敘述句,如果其他繫線在 t2 中插入 col_val 值為 100 的記錄,然後繫線 1 執行插入 t1,則 SQLEXEC 會刪除該資料列。如果其他執行緒仍在處理值為 100 的記錄,則 SQLEXEC 會失敗。因此,此 MAP 敘述句的結果是無法預測的。
MAP u1.t1, TARGET u2.t1 SQLEXEC (ID test2, QUERY ' delete from u2.t2 where col_val =100 ', NOPARAMS)), THREAD(1);
相反地,使用 COORDINATED 時,所有繫線都會在某個共同點同步,包括處理 col_val=100 記錄的繫線,因此會移除結果的模糊性。
MAP u1.t1, TARGET u2.t1 SQLEXEC (ID test2, QUERY ' delete from u2.t2 where col_val =100 ', NOPARAMS)), THREAD(1), COORDINATED;
{DEF| TARGETDEF}<template>
DEF 和 TARGETDEF 適用於 TABLE 和 MAP。
使用 DEF 和 TARGETDEF 來指定由 DEFGEN 公用程式建立的定義範本名稱。
-
DEF指定來源定義範本。 -
TARGETDEF指定目標定義範本。
範本是以特定表格的定義為基礎。它可讓與原始表格具有相同定義的新表格新增至 Oracle GoldenGate 組態,而不需要為它們執行 DEFGEN,也不需要停止和啟動 Oracle GoldenGate 處理作業。範本中的定義用於定義查尋。
語法
{DEF | TARGETDEF} <template>
<template>
DEFGEN 公用程式產生的下列其中一個定義樣板名稱:
-
使用
DEF來指定由DEFGEN參數檔中TABLE參數的DEF選項所產生的來源定義樣板。 -
使用
TARGETDEF來指定由DEFGEN參數檔中TABLE參數的TARGETDEF選項所產生的目標定義樣板。
範本中包含的定義必須與在相同 TABLE 或 MAP 陳述式中指定的表格或表格定義相同。
當名稱的指定方式與儲存在資料庫中的名稱相同時,會觀察到樣板名稱的區分大小寫。確定在此 TABLE 或 MAP 敘述句的 DEF 或 TARGETDEF 子句中,以及在建立樣板的 DEFGEN 參數檔中,指定樣板名稱的方式相同。
範例 1
此範例顯示不區分大小寫的樣板名稱。
MAP acct.cust*, TARGET acct.cust*, DEF custdef;
範例 2
此範例顯示當資料庫需要引號來強制區分大小寫時,範本名稱會區分大小寫。
TABLE acct.cust*, DEF "CustDef";
範例 3
此範例顯示同時使用 DEF 和 TARGETDEF 的案例。
MAP acct.cust*, TARGET acc.cust*, DEF custdef, TARGETDEF tcustdef;
僅限例外
EXCEPTIONSONLY 對 MAP 有效。
在用於錯誤處理的 MAP 陳述式例外中使用 EXCEPTIONSONLY。例外 MAP 陳述式必須遵循預期有錯誤的 MAP 陳述式。只有在先前一般 MAP 敘述句中處理的最後一筆記錄發生錯誤時,才會執行 MAP 敘述句的異常狀況。
若要使用 EXCEPTIONSONLY,請使用含有 EXCEPTION 選項的 REPERROR 陳述式,無論是在一般 MAP 陳述式或參數檔案的根目錄。請參閱 REPERROR 以取得詳細資訊。注意:如果使用「Oracle GoldenGate 衝突偵測與解決 (CDR)」功能,就不需要具備 EXCEPTION 的 REPERROR。CDR 會自動將導致錯誤的所有作業傳送至異常狀況 MAP 敘述句。
例外 MAP 陳述式必須指定與一般 MAP 陳述式相同的來源表格,但例外 MAP 陳述式中的目標表格必須為例外表格。
注意:請參閱 MAPEXCEPTION (exceptions_mapping) 以支援萬用字元物件名稱。
語法
EXCEPTIONSONLY
EVENTACTIONS (<action>)
EVENTACTIONS 適用於 TABLE 和 MAP。某些選項僅適用於一個或另一個參數,並在說明中註明。
使用 EVENTACTIONS 可讓程序根據符合特定篩選規則資格的歷程檔 (稱為事件記錄) 中的記錄,採取定義的動作。您可以使用此系統 (稱為事件標記系統,或事件標記基礎架構) 根據資料庫事件來自訂處理。例如,您可暫停處理程序以執行轉換或報告統計資料。複製資料變更時支援事件標記功能,但不支援初始載入。
若要觸發不需要將資料套用至目標表格的動作,您可以使用 Replicat TABLE 參數搭配支援 EVENTACTIONS 的篩選選項。如需詳細資訊,請參閱 TABLE for Replicat 。
您可能需要結合兩個或多個動作才能達成目標。合併多個動作時,會先剖析整個 EVENTACTIONS 敘述句,然後再依優先順序執行指定的選項。下列清單顯示優先順序。Process the record 之前列出的動作會在記錄寫入歷程檔或套用至目標之前 (視處理作業而定)。Process the record 之後所列的動作會在記錄處理後執行。
-
TRACE -
LOG -
CHECKPOINT BEFORE -
DISCARD -
SHELL -
ROLLOVER -
(處理記錄)
-
IGNORE -
REPORT -
SUSPEND -
ABORT -
CHECKPOINT AFTER -
FORCESTOP -
STOP
若要避免以一般方式處理事件記錄,請使用 IGNORE 或 DISCARD 選項。由於 IGNORE 和 DISCARD 會在記錄本身之前進行評估,因此會阻止處理記錄。如果沒有這些選項,則 Extract 的 EVENTACTIONS 會將記錄寫入歷程檔,而 Replicat 的 EVENTACTIONS 則會將該作業套用至目標資料庫。
您應考慮交易可能包含兩筆或多筆觸發事件動作的記錄。在此情況下,可能會有多個特定 EVENTACTIONS 規格的執行。例如,如果遇到兩個觸發兩個連續 ROLLOVER 動作的限定記錄,會導致 Extract 累計歷程檔兩次,讓兩個檔案中的其中一個空白交易資料。
您也應考慮當 GETUPDATEBEFORES 參數生效時,會為 UPDATE 作業產生兩筆記錄:包含之前影像的記錄,以及包含之後影像的記錄。當作業符合事件記錄的資格時,會針對這些記錄觸發事件動作。您可以使用 GGHEADER 資料欄轉換函數的 BEFOREAFTERINDICATOR 記號作為 FILTER 子句中的篩選,來限定記錄,讓事件動作只會在之前記錄或之後記錄觸發一次,但不能同時觸發兩者。
下列範例會篩選 BEFORE 指標。EVENTACTION 會發出 ECHO shell 命令,以在遇到 BEFORE 記錄時,將字串 'Triggered on BEFORE' 輸出至事件日誌。
TABLE qasource.test, &
FILTER(@STRFIND('BEFORE', @GETENV('GGHEADER' , 'BEFOREAFTERINDICATOR')) > 0), &
EVENTACTIONS ( shell ('echo --== Triggered on BEFORE ==-- '), LOG);
以下顯示事件 <action> 的結果:
013-03-06 17:59:31 INFO OGG-05301 Shell command output: '--== Triggered
on AFTER ==--'
下列範例會執行相同的作業,但針對 AFTER 指標。
TABLE qasource.test, &
FILTER(@STRFIND('AFTER', @GETENV('GGHEADER' , 'BEFOREAFTERINDICATOR')) > 0), &
EVENTACTIONS ( shell ('echo --== Triggered on AFTER ==-- '), LOG);
語法
EVENTACTIONS (
[STOP | SUSPEND | ABORT | FORCESTOP]
[IGNORE [RECORD | TRANSACTION [INCLUDEVENT]]
[DISCARD]
[LOG [INFO | WARNING]]
[REPORT]
[ROLLOVER]
[SHELL '<command>' | SHELL ('<command>', VAR <variable> = {<column_name> | <expression>}
[, ...]) ]
[TRACE[2] <file> [TRANSACTION] [DDL[INCLUDE] | DDLONLY] [PURGE | APPEND]]
[CHECKPOINT [BEFORE | AFTER | BOTH]]
[, ...]
)
STOP
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
遇到指定的事件記錄時,讓處理程序正常停止。處理程序會等候事件異動內的其他作業完成後,再停止。如果交易是分組或分批的 Replicat 交易,則會在處理作業正常停止之前套用目前的交易群組。處理程序會在事件記錄之後的下一筆記錄重新啟動,只要該記錄也已簽署交易的結尾。
如果因為交易仍為開啟狀態而無法立即停止,則處理程序會記錄訊息。不過,如果在長時間執行的未結交易中遇到事件記錄,則不會出現警告訊息,提醒您有交易的未確認狀態。因此,儘管 STOP 事件,處理程序仍可能會持續執行一段時間。
STOP 可與其他 EVENTACTIONS 選項合併,但 ABORT 和 FORCESTOP 除外。
SUSPEND
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
暫停處理作業,使其保留目前執行的作用中相關資訊環境,而且仍然可以回應「管理從屬端」中發出的 SEND 命令。暫停處理時,INFO 命令會將它顯示為 RUNNING,而 RBA 欄位則顯示最後一個檢查點位置。
若要繼續處理,請使用 RESUME 選項發出 SEND 命令。
若要將 CHECKPOINT BEFORE 選項與 SUSPEND 搭配使用,事件記錄必須是交易的開頭,SUSPEND 才能進行。如此一來,如果處理程序在暫停狀態下被終止,則具有 SUSPEND 動作的事件記錄即為重新啟動時要重新處理的第一筆記錄。如果同時指定 CHECKPOINT BERORE 和 SUSPEND,但事件記錄不是交易的開始,則處理會在 SUSPEND 執行之前中止。
若要將 CHECKPOINT AFTER 選項與 SUSPEND 搭配使用,必須先發出 RESUME 命令,才能執行檢查點,且事件記錄必須是 COMMIT 記錄。如果處理作業在 SUSPEND 狀態下終止,處理作業會在重新啟動時從最後檢查點位置重新處理交易。
SUSPEND 無法與 ABORT 結合,但可以與所有其他選項結合使用。
ABORT
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
強制處理程序在遇到指定的事件記錄時立即結束,不論是否有未結異動。未處理事件記錄。嚴重錯誤會寫入日誌,如果同時指定 DISCARD,則事件記錄會寫入捨棄檔。處理作業將在啟動時進行復原。
ABORT 只能與 CHECKPOINT BEFORE、DISCARD、SHELL 和 REPORT 結合。
FORCESTOP
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
強制處理程序在遇到指定的事件記錄時正常停止,但只有在事件記錄為交易中的最後一個作業或交易中的唯一記錄時才強制停止。記錄會正常寫入。
如果在長時間執行的未結交易中遇到事件記錄,則處理程序會將警告訊息寫入日誌並立即結束,如 ABORT 中所示。在此情況下,啟動時可能需要復原。如果在長時間執行的交易中觸發 FORCESTOP 動作,則程序會結束,而不會出現警告訊息。
FORCESTOP 可與其他 EVENTACTIONS 選項合併,但 ABORT、STOP、CHECKPOINT AFTER 和 CHECKPOINT BOTH 除外。如果搭配 ROLLOVER 使用,則只有在處理作業正常停止時才會發生變換。
IGNORE [RECORD |
TRANSACTION [INCLUDEVENT]] |
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
視選取的動作而定,忽略部分或所有交易。
-
RECORD為預設值。它會強制處理程序僅忽略指定的事件記錄,但不會忽略其餘的異動。系統不會將警告或訊息寫入日誌,但會更新 Oracle GoldenGate 統計資料以顯示記錄已被忽略。 -
使用
TRANSACTION可忽略包含觸發事件之記錄的整個交易。如果使用TRANSACTION,則事件記錄必須是交易中的第一個記錄。忽略交易時,依預設也會忽略事件記錄。TRANSACTION可縮短為TRANS。 -
使用
INCLUDEEVENT搭配TRANSACTION,將事件記錄傳輸至歷程檔或目標,但忽略其餘的關聯交易。
IGNORE 可與所有其他 EVENTACTIONS 選項合併,但 ABORT 和 DISCARD 除外。
IGNORE 動作會在處理所有資格、篩選、對應以及使用者結束作業之後處理。最終輸出階段會忽略記錄或交易,並防止記錄或交易寫入輸出目標 (適用於 Extract 或資料庫的歷程檔,適用於 Replicat)。因此,在某些表示式 (例如包含 SQLEXEC 作業的表示式) 中,SQLEXEC 會在處理 IGNORE 之前執行。這表示,當記錄未寫入追蹤或目標資料庫時,透過資格、篩選、對應及使用者退出來處理記錄的所有影響都會發生。
此動作對 DDL 記錄無效。由於 DDL 作業是自主的,因此忽略記錄等同於忽略整個交易。
DISCARD
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
讓處理程序:
-
將指定的事件記錄寫入捨棄檔。
-
更新 Oracle GoldenGate 統計資料以顯示已捨棄記錄。
處理程序會繼續處理追蹤中的下一筆記錄。
DISCARD 可與除 IGNORE 以外的所有其他 EVENTACTIONS 選項合併。
LOG [INFO |
WARNING] |
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
導致處理程序在遇到指定的事件記錄時記錄事件。訊息會寫入報表檔案、Oracle GoldenGate 錯誤日誌,以及系統事件日誌。
使用下列選項來指定訊息的嚴重性:
-
INFO指定低嚴重度資訊訊息。這是預設值。 -
WARNING指定高嚴重性警告訊息。
LOG 可與除 ABORT 以外的所有其他 EVENTACTIONS 選項合併。如果使用 ABORT,則不需要 LOG,因為 ABORT 會在程序結束前記錄嚴重錯誤。
REPORT
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
導致處理程序在遇到指定的事件記錄時產生報告檔案。這與使用 SEND 指令搭配 GGSCI 中的 REPORT 選項相同。
REPORT 訊息會在處理事件記錄之後發生 (除非使用 DISCARD、IGNORE 或 ABORT),所以報表資料將會包含事件記錄。
REPORT 可以與所有其他 EVENTACTIONS 選項合併。
ROLLOVER
適用於 Extract 的 TABLE。
讓 Extract 在遇到指定的事件記錄時,將歷程檔累計至新檔案。在 Extract 將事件記錄寫入歷程檔之前,會發生 ROLLOVER 動作,這會導致記錄成為新檔案中的第一個記錄,除非同時使用 DISCARD、IGNORE 或 ABORT。
ROLLOVER 可與除 ABORT 以外的所有其他 EVENTACTIONS 選項合併。ROLLOVER 無法與 ABORT 結合,因為 ROLLOVER 不會導致程序寫入檢查點,而 ROLLOVER 會在 ABORT 之前進行。
如果沒有 ROLLOVER 檢查點,ABORT 會讓 Extract 在重新啟動時移至其先前的檢查點,這將會位於先前的歷程檔中。實際上,這會取消累計。
SHELL '<command>'
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
使處理在遇到事件記錄時執行指定的 shell 指令。SHELL '<command'> 執行基本 shell 指令。指令字串會採用其文字值,並以此方式傳送至系統。此指令區分大小寫。將命令字串放在單引號內,例如:
EVENTACTIONS (SHELL 'echo hello world! > output.txt')
如果 Shell 命令成功,處理作業會將資訊訊息寫入報表檔案和事件日誌。成功取決於指令的結束狀態,該指令符合 UNIX shell 語言。在該語言中,零表示成功。
如果系統呼叫不成功,處理程序會因嚴重錯誤而中止。在 UNIX shell 語言中,非零等於失敗。請注意,錯誤訊息僅與 SHELL 命令本身的執行相關,而不與任何從屬命令的結束狀態相關。例如,SHELL 可以順利執行命令檔,但該命令檔中的命令可能會失敗。
SHELL 可以與所有其他 EVENTACTIONS 選項合併。
SHELL ('<command>', VAR <variable> = {<column_name> | <expression>} [, ...])
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
使處理在遇到事件記錄時執行指定的 shell 指令,並支援傳遞參數。指令和參數需區分大小寫。
與引數搭配使用 SHELL 時,整個 <command> 和引數字串都必須括在括號內,例如:
EVENTACTIONS (SHELL
('Current timestamp: $1 SQLEXEC result is $2 ',VAR $1 = @GETENV('JULIANTIMESTAMP'),
VAR $2 = mytest.description));
輸入如下:
<command>
指令,其文字會傳送給系統。
VAR
為必要關鍵字,可啟動參數輸入。
<variable>
替代執行時期變數值之預留位置變數的使用者定義名稱。指令中未使用的額外變數會被忽略。請注意,SHELL 指令中任何符合 VAR 變數名稱的文字,都會由替代的 VAR 值取代。這可能會有非預期的後果,因此請先測試您的程式碼,再將其投入生產。
<column_name>
可以是資料欄值的前後 (目前) 影像。
<expression>
可以是下列項目,視正在處理資料欄資料或 DDL 而定。
-
資料欄資料的有效表示式:
-
TABLE敘述句中TOKENS子句的值。 -
任何 Oracle GoldenGate 資料欄轉換函數的傳回值。
-
SQLEXEC查詢或程序的傳回值。
-
-
DDL的有效表示式:-
從
@TOKEN函數傳回值 (僅限 Replicat)。 -
從
@GETENV函數傳回值。 -
傳回未參照資料欄資料之其他函數的值 (例如,
@DATENOW)。 -
從
@DDL函數傳回值。
-
<TRACE[2]file> [TRANSACTION] [DDL[INCLUDE] | DDLONLY] [PURGE | APPEND]
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
在遇到指定的事件記錄時,將處理追蹤資訊寫入追蹤檔案。TRACE 提供逐步處理資訊。TRACE2 可識別處理花費最多時間的代碼區段。
依照預設 (沒有選項),會啟用不含交易界限準則的標準 DML 追蹤,直到程序終止為止。
-
<file>指定追蹤檔的名稱,而且必須緊接在TRACE關鍵字之後。您可以指定唯一的追蹤檔,或使用以獨立TRACE或TRACE2參數指定的預設追蹤檔。在使用
EVENTACTIONSTRACE的不同TABLE或MAP敘述句中,可以使用相同的追蹤檔。如果多個TABLE或MAP陳述式指定相同的追蹤檔案名稱,但不會一致地使用TRACE選項,則會為包含此追蹤檔之最後解析TABLE或MAP中的選項提供偏好設定。 -
使用
TRANSACTION僅在目前交易結束前啟用追蹤功能,而不是在程序終止時啟用追蹤功能。對於 Replicat,交易界限是以來源交易為基礎,而不是以一般 Replicat 群組或批次處理目標交易為基礎。TRANSACTION可縮短為TRANS。此選項只對DML作業有效。 -
DDL[INCLUDE]會追蹤DDL以及DML交易資料處理。DDL或DDLINCLUDE有效。 -
DDLONLY會追蹤DDL,但不會追蹤DML交易資料。這些選項僅適用於 Replicat。預設會停用
DDL追蹤功能。 -
使用
PURGE先截斷追蹤檔案,再寫入其他追蹤記錄,或使用APPEND在現有記錄結尾寫入新的追蹤記錄。APPEND為預設值。
TRACE 可與除 ABORT 以外的所有其他 EVENTACTIONS 選項合併。
若要停用追蹤至指定的追蹤檔,請使用 TRACE OFF <file_name> 選項發出 GGSCI SEND 處理作業命令。
CHECKPOINT [BEFORE |
AFTER |
BOTH] |
適用於 Extract 的 TABLE 和適用於 Replicat 的 MAP。
導致處理在遇到指定的事件記錄時寫入檢查點。檢查點動作提供 TABLE 或 MAP 敘述句中定義之處理的相關資訊環境。此環境定義具有開始點與結束點,因此提供同步點以對應使用 SQLEXEC 與使用者結束程式執行的函數。
BEFORE
Extract 處理作業的 BEFORE 會先寫入檢查點,然後再將事件記錄寫入歷程檔。Replicat 處理作業的 BEFORE 會先寫入檢查點,然後 Replicat 再將記錄中所含的 SQL 作業套用至目標。
BEFORE 要求事件記錄為交易中的第一筆記錄。如果不是第一筆記錄,處理程序將會中止。使用 BEFORE 可確保在事件記錄開頭之前的所有交易都已確認。
針對 DDL 記錄使用 EVENTACTIONS 時,請注意,由於每個 DDL 記錄都是自治式記錄,因此 DDL 記錄保證是交易的開始記錄;因此 DDL 記錄會隱含 CHECKPOINT BEFORE 事件動作。
CHECKPOINT BEFORE 可與所有 EVENTACTIONS 選項合併。
AFTER
Extract 的 AFTER 會在 Extract 將事件記錄寫入歷程檔之後,寫入檢查點。Replicat 的 AFTER 會在 Replicat 將記錄中所含的 SQL 作業套用至目標之後,寫入檢查點。
AFTER 會將檢查點要求標記為建議,表示程序只會發出下一個實際機會的檢查點。例如,如果事件記錄是多重記錄交易之一,則檢查點會在下一個交易界限進行,以與 Oracle GoldenGate 資料完整性模型保持一致。
針對 DDL 記錄使用 EVENTACTIONS 時,請注意,由於每個 DDL 記錄都是自治式記錄,因此 DDL 記錄保證是交易的結束 (界限);因此 DDL 記錄會隱含 CHECKPOINT AFTER 事件動作。
CHECKPOINT AFTER 可與 ABORT. 以外的所有 EVENTACTIONS 選項合併
BOTH
BOTH 結合了 BEFORE 和 AFTER。Extract 或 Replicat 處理作業會在處理事件記錄之前和之後寫入檢查點。
CHECKPOINT BOTH 可與 ABORT. 以外的所有 EVENTACTIONS 選項合併
CHECKPOINT 可縮短為 CP。
範例 1
下列範例顯示如何將程序設定為忽略特定記錄。當 Extract 處理任何含有 name = abc 的歷程檔記錄時,會忽略該記錄。
TABLE fin.cust, &
WHERE (name = 'abc'), &
EVENTACTIONS (ignore);
範例 2
根據 EVENTACTIONS 選項的相容性與優先順序規則,DISCARD 的優先順序高於 ABORT,因此在此範例中,事件記錄會在處理中止之前寫入捨棄檔案。
MAP fin.cust, TARGET fin.cust2, &
WHERE (name = 'abc'), &
EVENTACTIONS (DISCARD, ABORT);
範例 3
下列範例會執行 SHELL 動作。它會取得 SQLEXEC 查詢的結果,並將它與目前的時戳配對。
TABLE src.tab &
SQLEXEC (id mytest, query 'select description from lookup &
where pop = :mycol2', params (mycol2 = col2) ), &
EVENTACTIONS (SHELL ('Current timestamp: $1 SQLEXEC result is $2 ', &
VAR $1 = @GETENV('JULIANTIMESTAMP'), VAR $2 = mytest.description));
此範例產生的 shell <command> 可能與下列類似:
'Current timestamp: 212156002704718000 SQLEXEC result is test passed'
範例 4
下列範例顯示當預留位置名稱與命令字串中的文字文字衝突時,會如何產生無效的結果。在此範例中,名為 $1 的預留位置與資料欄值相關聯,而 SHELL 命令會執行包含 $1 的文字字串。
MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('echo Extra charge for $1 is $1', VAR $1 = COL1));
這是未預期的結果,假設 <column> 值為 gift wrap:
'Extra charge for gift wrap is gift wrap'
將預留位置 <variable> 變更為 $col 會產生正確的輸出:
MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('echo Extra charge for $col is $1', VAR $col = COL1));
'Extra charge for gift wrap is $1'
下列顯示非預期結果的類似潛力:
MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('Timestamp: $1 Price is $13 > out.txt ', &
VAR $1 = @GETENV('JULIANTIMESTAMP')));
重新導向的輸出 <file> 可能包含類似以下的 <string> (請注意,第二個時間戳記包含附加的值 3):
'Timestamp: 212156002704718000 Price is 2121560027047180003'
其結果如下:
'Timestamp: 212156002704718000 Price is $13'
範例 5
這些範例顯示了設定追蹤的不同方式。
MAP tab1, TARGET tab1 EVENTACTIONS (TRACE ./dirrpt/trace
1.txt);
MAP tab2, TARGET tab2 EVENTACTIONS (TRACE ./dirrpt/trace2.txt TRANSACTION);
-
在第一個
MAP陳述式中,trace1.txt追蹤檔案是在將第一個tab1事件記錄套用至目標之前產生。它包含從該點開始到 Replicat 終止為止的所有追蹤資訊,或除非使用 GGSCISEND REPLICAT命令關閉追蹤。 -
由於第二個
MAP陳述式包含TRANSACTION選項,因此trace2.txt檔案只會在將第一個tab2事件記錄套用至目標之前產生,但追蹤會在包含tab2事件記錄的交易結束時自動停止。
範例 6
以下顯示如何使用 SUSPEND 的 EVENTACTIONS。
-
案例 1:您正在複製
DDL,而且想要確保目標資料庫中有足夠的空間可以建立新表格。在對應CREATE TABLE DDL作業的MAP敘述句中使用EVENTACTIONS與SUSPEND,然後在該MAP敘述句中執行 SQL 敘述句來查詢表格空間中剩餘的空間量。如果有足夠的空間,請使用SEND REPLICAT與RESUME來立即繼續處理;如果沒有,請讓 Replicat 暫停,直到 DBA 可以新增空間為止,然後使用SEND REPLICAT與RESUME來繼續處理。 -
案例 2:您要修正發生在任何表格上的唯一索引鍵違規。由於 Replicat 正在處理數千個表格,因此您不想在每次發生違規時停止處理作業,因為這會導致 Replicat 在重新啟動後,花時間重新建立物件快取。透過將
EVENTACTIONS與SUSPEND搭配使用,您可以直接暫停處理,直到問題修正為止。 -
案例 3:在一天結束時,您可以暫停 Replicat 執行每日報表,然後立即繼續處理,無須停止並重新啟動處理。
EXITPARAM '<parameter>'
EXITPARAM 適用於 TABLE 和 MAP。
每當遇到來自 TABLE 或 MAP 陳述式的記錄時,請使用 EXITPARAM 將參數傳送至使用者結束常式的 EXIT_PARAMS 函數。
語法
EXITPARAM '<parameter string>'
<'parameter string'>
為文字字串的參數。將參數放在單引號內。您最多可以為參數字串指定 100 個字元。
提取前篩選
FETCHBEFOREFILTER 適用於 TABLE。
在執行 FILTER 作業之前,使用 FETCHBEFOREFILTER 擷取以 FETCHCOLS 或 FETCHCOLSEXCEPT 指定的資料欄。在篩選之前擷取,可確保篩選所需的值可供使用。如果沒有 FETCHBEFOREFILTER,在執行篩選之後,才會執行以 FETCHCOLS 或 FETCHCOLSEXCEPT 指定的擷取。在參數檔中指定 FETCHBEFOREFILTER 之前的 FILTER。
請勿在資料汲取 Extract 群組以傳遞模式處理的表格使用此選項。
語法
FETCHBEFOREFILTER
範例
TABLE hr.salary, FETCHCOLS (<sal_level>),
FETCHBEFOREFILTER,
FILTER (sal_level >= 8)
;
{FETCHCOLS | FETCHCOLSEXCEPT} (<column_list>)
FETCHCOLS 和 FETCHCOLSEXCEPT 對 TABLE 有效。這些選項僅對主要 Extract 有效。
當交易日誌記錄中沒有值時,請使用 FETCHCOLS 和 FETCHCOLSEXCEPT 從資料庫擷取資料欄值。如果資料庫只記錄更新作業中變更的資料欄值,但您必須確定 FILTER 作業所需的其他資料欄值可供使用,請使用此選項。
-
FETCHCOLS會擷取指定的資料欄。 -
FETCHCOLSEXCEPT會擷取指定資料欄以外的所有資料欄。對於包含多個資料欄的表格,FETCHCOLSEXCEPT可能比以FETCHCOLS列出每個資料欄更有效率。
FETCHCOLS 和 FETCHCOLSEXCEPT 適用於 Oracle GoldenGate 支援的所有資料庫。
若為 Oracle AI Database,Oracle GoldenGate 會透過 Oracle 的「倒溯查詢」機制,從還原表格空間擷取值。查詢提供截至特定時間或 SCN 為止的資料欄讀取一致影像。如需有關 Oracle GoldenGate 如何使用倒溯查詢的詳細資訊。
不使用 FETCHCOLS 或 FETCHCOLSEXCEPT,可以更有效率地啟用所需資料欄的補充記錄日誌。
若要控制擷取,以及在找不到指定要擷取的資料欄時啟用回應,請使用 FETCHOPTIONS 參數。若要在 STATS EXTRACT 命令產生的統計顯示中包含擷取結果,請使用 STATOPTIONS 參數。
如果交易日誌中存在以 FETCHCOLS 或 FETCHCOLSEXCEPT 指定的資料欄值,則不會執行資料庫擷取。這樣可以減少資料庫超載。
語法
{FETCHCOLS | FETCHCOLSEXCEPT} (<column> [, ...])
<column>
可為下列其中之一:
-
欄名稱或以逗號分隔的欄名稱清單,如
(col1, col2)中所示。 -
星號萬用字元,如 (*)。
範例
此範例中的 FETCHCOLS 子句只會擷取資料欄 1 和資料欄 3,而 FETCHCOLSEXCEPT 子句則會擷取資料欄 1 和資料欄 3 以外的所有資料欄。
TABLE hq.acct, FETCHCOLS (col1, col3);
TABLE hq.sales, FETCHCOLSEXCEPT (col1, col3);
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column_list>)
FETCHMODCOLS 和 FETCHMODCOLSEXCEPT 對 TABLE 有效。這些選項僅對主要 Extract 有效。
使用 FETCHMODCOLS 和 FETCHMODCOLSEXCEPT 強制從資料庫擷取資料欄值,即使資料欄存在於交易日誌中。這些視資料庫類型而定,日誌記錄可包含表格的所有資料欄,或只包含指定交易作業中變更的資料欄。
-
FETCHMODCOLS會擷取指定的資料欄。 -
FETCHMODCOLSEXCEPT會擷取交易日誌中存在的所有資料欄 (指定的資料欄除外)。對於包含多個資料欄的表格,FETCHMODCOLSEXCEPT可能比以FETCHMODCOLS列出每個資料欄更有效率。
FETCHMODCOLS 和 FETCHMODCOLSEXCEPT 適用於 Oracle GoldenGate 支援的所有資料庫。
請注意下列使用準則:
- 請勿在索引鍵資料欄使用
FETCHMODCOLS和FETCHMODCOLSEXCEPT。
語法
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column> [, ...])
(<column> [, ...])
可為下列其中之一:
-
欄名稱或以逗號分隔的欄名稱清單,如
(col1, col2)中所示。 -
星號萬用字元,如 (*)。
範例
此範例中的 FETCHMODCOLS 子句只會擷取資料欄 1 和資料欄 3,而 FETCHMODCOLSEXCEPT 子句則會擷取資料欄 1 和資料欄 3 以外的所有資料欄。
TABLE hq.acct, FETCHMODCOLS (col1, col3);
TABLE hq.sales, FETCHMODCOLSEXCEPT (col1, col3);
FILTER (<filter_clause>)
FILTER 適用於 TABLE 和 MAP。
使用 FILTER 可根據數值來選取或排除記錄。篩選表示式可以使用條件運算子、Oracle GoldenGate 資料欄轉換函數或兩者。注意:若要根據字串進行篩選,請使用其中一個 Oracle GoldenGate 字串函數。如需這些函數的詳細資訊,請參閱表格和資料欄對應函數。您也可以使用 WHERE 選項。請參閱 WHERE (子句) 。
請以逗號分隔所有 FILTER 元件。FILTER 子句可以包含下列項目:
-
數字
-
包含數字的資料欄
-
傳回數字的函數
-
算術運算子:
-
(加號)
-
(減號)
-
(乘號)
/ (除)
\ (餘數)
-
-
比較運算元:
(大於)
= (大於或等於)
< (小於)
<= (小於或等於)
= (等於)
<> (不等於)
從比較衍生的結果可以是零 (表示
FALSE) 或非零 (表示TRUE)。 -
括號 (用於在表示式中分組結果)
-
結合運算子:
AND、OR
以單引號括住文字。在儲存於資料庫時指定區分大小寫的資料欄名稱,如果資料庫需要引號來強制區分大小寫 (例如 Oracle),則以雙引號括住它們。
對於具有多位元組字元集的資料欄,Oracle GoldenGate 支援 FILTER。
語法
FILTER (
[, ON INSERT | ON UPDATE| ON DELETE]
[, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE]
, <filter_clause>
[, RAISEERROR <error_number>]
)
<filter_clause>
根據 <expression> 選取記錄,例如:
FILTER ((PRODUCT_PRICE*PRODUCT_AMOUNT) > 10000))
您可以在篩選 <clause> 中使用 Oracle GoldenGate 的資料欄轉換函數,如下所示:
FILTER (@COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)
以單引號括住文字。在儲存於資料庫時指定區分大小寫的資料欄名稱,如果資料庫需要引號來強制區分大小寫 (例如 Oracle),則以雙引號括住它們。
對於具有多位元組字元集或與本機作業系統字元集不相容之字元集的資料欄,Oracle GoldenGate 不支援 FILTER。
篩選子句的大小上限為 5,000 個位元組。
ON INSERT |
ON UPDATE |
ON DELETE |
將記錄篩選限制為指定的作業。以逗號分隔作業,例如:
FILTER (ON UPDATE, ON DELETE,
@COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)
上述範例會執行 UPDATE 和 DELETE 作業的篩選,但不會執行 INSERT 作業。
IGNORE INSERT |
IGNORE UPDATE |
IGNORE DELETE |
不對指定的作業套用篩選。以逗號分隔作業,例如:
FILTER (IGNORE INSERT, @COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)
上述範例會對 UPDATE 和 DELETE 作業執行篩選,但會忽略 INSERT 作業。
RAISEERROR <error>
如果篩選失敗,就會產生使用者定義的錯誤編號。可作為 REPERROR 參數的輸入來呼叫錯誤處理。確定 <error> 的值超出資料庫或 Oracle GoldenGate 所使用的錯誤編號範圍。例如:RAISEERROR 21000。
GETBEFORECOLS (<column_specification>)
GETBEFORECOLS 適用於 TABLE。
在更新或刪除作業時,使用 GETBEFORECOLS 指定要擷取影像並寫入歷程檔之前的資料欄。在雙向或多主控組態中使用「Oracle GoldenGate 衝突偵測與解決 (CDR)」功能時,請使用 GETBEFORECOLS。也可在使用轉換函數或其他需要記錄之前影像的處理功能時使用。
對於更新,無論是否修改任何指定的資料欄,指定資料欄的前面影像都會包含在歷程檔中。除了 GETBEFORECOLS 子句中指定的資料欄之外,Oracle AI Database 也會記錄其他已修改之資料欄的前一個影像。對於其他支援的資料庫,您可以使用 GETUPDATEBEFORES 參數強制包含已修改之其他資料欄的先前值。
注意:如果在相同的參數檔中使用兩者,GETUPDATEBEFORES 會覆寫 GETBEFORECOLS。
若要使用此參數,預設必須對未在值之前記錄的任何資料庫啟用補充日誌記錄。
如果在相同的參數檔中使用 GETBEFORECOLS,會覆寫 COMPRESSUPDATES 和 COMPRESSDELETES。
此參數適用於所有資料庫,但 Db2 z/OS 除外。對於 Oracle GoldenGate 支援之所有平台上的 Db2 z/OS,請使用 GETUPDATEBEFORES 參數而非 GETBEFORECOLS.
語法
GETBEFORECOLS(
{ON UPDATE | ON DELETE}
{ALL | KEY | KEYINCLUDING (<col>[,...]) | KEYANDMOD | | ALLEXCLUDING (<col>[,...]) }
[,...]
)
{ON UPDATE |
ON DELETE} |
指定是否應擷取指定資料欄的先前影像以進行更新或刪除。您只能使用 ON UPDATE、僅 ON DELETE 或兩者。如果同時使用兩者,請在相同的 GETBEFORECOLS 子句內指定兩者。請參閱範例,瞭解如何同時使用兩者。
{ALL | KEY | KEYINCLUDING (<col>[,...]) | KEYANDMOD | ALLEXCLUDING (<col>[,...])}
指定擷取之前影像的資料欄。
ALL
擷取目標表格中所有支援之資料類型資料欄 (包括主索引鍵) 的先前影像;所有不支援的資料欄都會略過,並記錄在 Extract 或 Replicat 參數檔中作為資訊訊息。這會提供 Extract 的最高處理負載,但允許使用所有資料欄進行衝突偵測比較,以獲得最大準確性。
KEY
僅擷取主索引鍵的影像之前。這是最快的選項,但不允許偵測最準確的衝突,因為索引鍵可以相符,但非索引鍵資料欄可能會不同。KEY 為預設值。
KEYINCLUDING
在主索引鍵影像之前擷取,以及指定的資料欄。這是速度與偵測準確度之間的合理妥協。
KEYANDMOD
使用此選項作為 Extract 和 Replicat 之索引鍵選項的擴充功能。對於更新來源的 DML,Extract 會記錄索引鍵和修改的資料欄。在 WHERE 子句中偵測衝突時,目標上的 Replicat 將使用 KEY 和 MODIFIED 資料欄。在 Oracle AI 資料庫中,修改過的資料欄預設一律會用於衝突偵測,而且此參數會明確顯示。
ALLEXCLUDING
擷取指定資料欄以外的所有資料欄影像之前。對於包含多個資料欄的表格,ALLEXCLUDING 可能比 KEYINCLUDING 更有效率。請勿排除索引鍵資料欄。
範例
在下列範例中,索引鍵資料欄加上 name、address 和 salary 的之前影像一律會在更新和刪除作業時寫入歷程檔。
TABLE src,
GETBEFORECOLS (
ON UPDATE KEYINCLUDING (name, address, salary),
ON DELETE KEYINCLUDING (name, address, salary));
HANDLECOLLISIONS | NOHANDLECOLLISIONS
HANDLECOLLISIONS 和 NOHANDLECOLLISIONS 對 MAP 有效。
使用 HANDLECOLLISIONS 和 NOHANDLECOLLISIONS 來控制 Oracle GoldenGate 是否以對相同表格進行的複製交易變更來調節初始載入的結果。當 Oracle GoldenGate 在載入完成後套用複製的變更時,HANDLECOLLISIONS 會讓 Replicat 覆寫目標表格中的重複記錄,並為遺漏的記錄提供替代的錯誤處理。
HANDLECOLLISIONS 和 NOHANDLECOLLISIONS 可全域用於參數檔中的所有 MAP 敘述句,或作為以 MAP 敘述句指定之表格群組的 ON/OFF 交換器,且可在 MAP 敘述句中使用。在 MAP 敘述句中使用時,它們會覆寫全域規格。
如需語法和用法,請參閱 HANDLECOLLISIONS | NOHANDLECOLLISIONS 。
插入所有記錄
INSERTALLRECORDS 對 MAP 有效。
使用 INSERTALLRECORDS 參數將所有對應的作業轉換成目標上的 INSERT 作業。INSERTALLRECORDS 可用於參數檔案的根層次、在 MAP 陳述式內,以及在 MAP 陳述式的 MAPEXCEPTION 子句內。
如需語法和用法,請參閱 INSERTALLRECORDS 。
插入附加 | NOINSERTAPPEND
INSERTAPPEND 對 MAP 有效。
當 Replicat 將 INSERT 作業套用至 Oracle 目標表格時,請使用 INSERTAPPEND 和 NOINSERTAPPEND 參數來控制是否使用 APPEND 提示。這些參數只對 Oracle 資料庫有效。
如需語法和用法,請參閱 INSERTAPPEND | NOINSERTAPPEND 。
KEYCOLS (<columns>)
KEYCOLS 適用於 TABLE 和 MAP。
使用 KEYCOLS 將目標表格的一或多個資料欄定義為唯一的。當表格無法使用主索引鍵或適當的唯一索引時,KEYCOLS 的主要用途是定義替代主索引鍵。您也可以使用 KEYCOLS 來指定要在 Replicat 使用的資料列 ID 中使用的其他資料欄。如果沒有索引鍵或 KEYCOLS 子句的可用性,Replicat 會使用表格的所有資料欄來建立其 WHERE 子句,基本上會執行完整表格掃描。
KEYCOLS 所呈現之索引鍵的資料欄必須唯一識別資料列,而且它們必須與作為來源表格索引鍵的資料欄相符。來源表格必須包含至少一個索引鍵或索引資料欄,作為為目標表格指定的 KEYCOLS 索引鍵。否則,如果更新來源索引鍵或索引資料欄,Replicat 將不會有額外目標 KEYCOL 資料欄的先前影像。
以 KEYCOLS 定義替代索引鍵時,請遵守下列準則:
-
如果來源和目標表格同時缺少索引鍵或唯一索引,請在
TABLE參數和MAP參數中使用KEYCOLS子句,並在每個KEYCOLS子句中指定相符的資料欄集。 -
如果其中一個表格缺少索引鍵或唯一索引,請在該表格使用
KEYCOLS。指定符合其他表格之實際索引鍵或索引資料欄的資料欄。如果無法以KEYCOLS定義相符集,則來源表格 (TABLE參數) 和目標表格 (MAP參數) 必須使用KEYCOLS。指定包含唯一值的相符資料欄集。KEYCOLS會覆寫索引鍵或唯一索引。 -
如果目標表格的索引鍵大於來源表格的索引鍵 (或如果它有多個唯一的索引資料欄),請使用
TABLE敘述句中的KEYCOLS來指定符合額外目標資料欄的來源資料欄。您也必須在此KEYCOLS子句中包含實際的來源索引鍵或索引資料欄。以這種方式使用KEYCOLS,可確保在來源上更新非索引鍵資料欄時,可以使用 Replicat 之前的影像。
使用 KEYCOLS 時,請確定指定的資料欄已設定為記錄日誌,以便 Replicat 可在歷程檔記錄中使用。對於 Oracle AI 資料庫,您可以使用 ADD TRANDATA 命令的 COLS 選項來啟用記錄日誌。
在目標表格上,在 KEYCOLS 定義的索引鍵資料欄上建立唯一的索引。索引可改善 Oracle GoldenGate 找到需要處理之目標資料列的速度。
請勿將 KEYCOLS 用於資料汲取 Extract 群組以傳遞模式處理的表格。
使用平行 Replicat 或整合式 Replicat 時,KEYCOLS 的其他準則:
-
將
KEYCOLS與ALLOWDUPTARGETMAP搭配使用時,每個對應表格的索引鍵資料欄都必須相同。例如,如果您將HR.EMP對應至HR.EMP_TARGET和HR.EMP_BACKUP,且如果您指定KEYCOLS,則HR.EMP_TARGET和HR.EMP_BACKUP的兩者必須相同。 -
使用
KEYCOLS從多個來源表格對應至同一個目標表格時,MAP敘述句必須使用相同的KEYCOLS集。
語法
KEYCOLS (<column> [, ... ])
<column>
定義要作為替代主鍵的資料欄。如果有主索引鍵或唯一索引鍵存在,這些資料欄必須包含在 KEYCOLS 規格中。若要指定多個資料欄,請建立以逗號分隔的清單,如下所示:
KEYCOLS (id, name)
KEYCOLS 不支援下列資料欄類型:
-
KEYCOLS不支援 Oracle 資料欄類型:虛擬資料欄、UDT、以函數為基礎的資料欄,以及明確排除在 Oracle GoldenGate 組態之外的任何資料欄。
-
SQL Server、Db2 LUW、Db2 z/OS、MySQL 和 Teradata:
包含時戳或非具體化計算資料欄的資料欄,以及 Oracle GoldenGate 組態排除的任何資料欄。SQL Server Oracle GoldenGate 會強制目標表格的資料列總長度 (不含主索引鍵) 低於 8000 個位元組。
範例
KEYCOLS
MAPEXCEPTION (<exceptions_mapping>)
MAPEXCEPTIONS 對 MAP 有效。
使用 MAPEXCEPTION 作為用於錯誤處理之 MAP 陳述式例外的一部分。MAPEXCEPTION 會將 REPERROR 參數標記為例外的失敗作業對應至例外表格。Replicat 會將這些作業的值以及其他資訊寫入異常狀況表格。
您可以在包含來源 - 目標表格對應和其他標準 MAP 選項的相同 MAP 敘述句中使用 MAPEXCEPTION。來源和目標表格名稱可以包含萬用字元。
使用 MAPEXCEPTION 時,請在相同的 MAP 敘述句或 Replicat 參數檔的根目錄中,使用含有 EXCEPTION 選項的 REPERROR 敘述句。請參閱 "EXCEPTIONSONLY " 和 "REPERROR "。
語法
MAPEXCEPTION (TARGET <exceptions_table>, INSERTALLRECORDS [, <exception_MAP_options>])
TARGET <exceptions_table>
例外表格的完整名稱。物件名稱的標準 Oracle GoldenGate 規則會套用至異常狀況表格的名稱。
<exception_MAP_options>
您要套用至異常狀況處理之 MAP 參數的任何有效選項。
INSERTALLRECORDS
將所有例外套用至例外表格作為 INSERT 作業。使用 MAPEXCEPTION 時需要此參數。
範例
此範例說明如何使用 MAPEXCEPTION 進行例外對應。MAP 和 TARGET 子句包含萬用字元來源和目標表格名稱。處理名稱為 TRX 開頭的任何表格時,將會使用指定的對應擷取至 fin.trxexceptions 表格。
MAP src.trx*, TARGET trg.*,
MAPEXCEPTION (TARGET fin.trxexceptions,
INSERTALLRECORDS,
COLMAP (USEDEFAULTS,
ACCT_NO = ACCT_NO,
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERR = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG')
)
);
MAPALLCOLUMNS | 命名欄
MAPALLCOLUMNS 和 NOMAPALLCOLUMNS 對 MAP 有效。
使用 MAPALLCOLUMNS 取得未對應的資料欄 (非索引鍵)。指定此選項時,Extract 或 Replicat 會檢查所有來源資料欄是否直接對應至沒有資料欄對應函數的目標。如果未對應任何來源資料欄,則 Extract 和 (或) Replicat 會中止。
請參閱 MAPALLCOLUMNS| NOMAPALLCOLUMNS 。
MAPINVISIBLECOLUMN | NOMAPINVISIBLECOLUMNS
MAPINVISIBLECOLUMNS 和 NOMAPINVISIBLECOLUMNS 對 MAP 有效。
使用 MAPINVISIBLECOLUMNS 和 NOMAPINVISIBLECOLUMNS 來控制 Replicat 是否在預設資料欄對應的 Oracle 目標表格中包含不顯示的資料欄。對於使用明確資料欄對應之 Oracle 目標表格中不顯示的資料欄,一律都會對應它們,因此不需要此選項。
MAPINVISIBLECOLUMNS 和 NOMAPINVISIBLECOLUMNS 有兩種不同的使用方式。在全域層次指定時,所有後續的 MAP 敘述句都會有一個有效的參數,直到指定其他參數為止。在 MAP 敘述句中使用時,它們會覆寫全域規格
如需語法和用法,請參閱 MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS 。
REPERROR (<error>,<response>)
REPERROR 對 MAP 有效。
使用 REPERROR 來指定錯誤和回應,共同控制 Replicat 在執行 MAP 敘述句時如何回應錯誤。您可以在 MAP 層次使用 REPERROR 來覆寫並補充在參數檔根層次使用 REPERROR 參數設定的全域錯誤處理規則。可將多個 REPERROR 陳述式套用至相同的 MAP 陳述式,以自動全面地管理錯誤和無中斷複製處理。
如需語法和說明,請參閱 REPERROR 。
RESOLVECONFLICT (<conflict_resolution_specification>)
RESOLVECONFLICT 對 MAP 有效。
在雙向或多主控組態中使用 RESOLVECONFLICT,以指定 Replicat 如何處理對 MAP 敘述句中表格所進行之作業的衝突。
可以為相同的衝突類型指定多個解析,並依照 RESOLVECONFLICT 中所列的順序執行。多重解析僅限於 INSERTROWEXISTS 和 UPDATEROWEXISTS 衝突。
RESOLVECONFLICT 可在 MAP 敘述句中多次使用,以指定不同衝突類型的不同解析。
以下是 RESOLVECONFLICT 支援的資料類型和平台。
-
RESOLVECONFLICT支援 Oracle GoldenGate for Windows 和 UNIX 支援的所有資料庫。 -
若要使用
RESOLVECONFLICT,資料庫必須位於 Windows、Linux 或 UNIX 系統上 (包括在 NonStop OSS 上執行的系統)。 -
CDR 支援可與簡單 SQL 進行比較且沒有明確轉換的資料類型。如需詳細資訊,請參閱個別參數選項。
-
對於包含 LOB、抽象資料類型 (ADT) 或使用者定義類型 (UDT) 的資料欄,請勿使用
RESOLVECONFLICT。
語法
RESOLVECONFLICT (
{INSERTROWEXISTS | UPDATEROWEXISTS | UPDATEROWMISSING |
DELETEROWEXISTS | DELETEROWMISSING}
( {DEFAULT | <resolution_name>},
{USEMAX (<resolution_column>) | USEMAXEQ (<resolution_column>) | USEMIN (<resolution_column>) | USEMINEQ (<resolution_column>) | USEDELTA |
DISCARD | OVERWRITE | IGNORE}
)
[, COLS (<column>[,...])]
)
INSERTROWEXISTS |
UPDATEROWEXISTS |
UPDATEROWMISSING |
DELETEROWEXISTS |
DELETEROWMISSING |
此解決方式所處理的衝突類型。
INSERTROWEXISTS
插入的資料列違反目標的唯一性限制條件。
UPDATEROWEXISTS
目標上已有更新的資料列,但歷程檔中有一或多個資料欄的先前影像與資料庫中的目前值不同。
UPDATEROWMISSING
目標中沒有更新的資料列。
DELETEROWEXISTS
目標中存在刪除的資料列,但歷程檔中有一或多個資料欄的先前影像與資料庫中的目前值不同。
DELETEROWMISSING
目標中沒有刪除的資料列。
DEFAULT | <resolution_name>
DEFAULT
預設資料欄群組。與 DEFAULT 資料欄群組相關聯的解析會用於未在明確命名的資料欄群組中的所有資料欄。您必須定義 DEFAULT 資料欄群組。
<resolution_name>
連結至特定解析類型的特定資料欄群組名稱。提供識別解析類型的名稱。有效值為英數字元。避免使用空格和特殊字元,但允許使用底線,例如:
delta_res_method
使用具名解析度或 DEFAULT,但不可同時使用兩者。
USEMAX (<resolution_column>) | USEMAXEQ (<resolution_column>) | USEMIN (<resolution_column>) | USEMINEQ (<resolution_column>) | USEDELTA | |
||
DISCARD |
OVERWRITE |
IGNORE |
用來解決衝突的衝突處理常式邏輯。有效的解析為:
USEMAX
如果歷程檔記錄中的 <resolution_column> 值大於資料庫中的資料欄值,則會執行適當的動作。
-
(
INSERTROWEXISTS衝突) 套用歷程檔記錄,但將插入變更為更新,以避免發生唯一性違規,並覆寫現有的值。 -
(
UPDATEROWEXISTS衝突) 將歷程檔記錄套用為更新。
USEMAXEQ
如果歷程檔記錄中的 <resolution_column> 值大於或等於資料庫中的資料欄值,則會執行適當的動作。
-
(
INSERTROWEXISTS衝突) 套用歷程檔記錄,但將插入變更為更新,以避免發生唯一性違規,並覆寫現有的值。 -
(
UPDATEROWEXISTS衝突) 將歷程檔記錄套用為更新。
USEMIN
如果歷程檔記錄中的 <resolution_column> 值小於資料庫中的 <column> 值,則會執行適當的 <action>:
-
(
INSERTROWEXISTS衝突) 套用歷程檔記錄,但將插入變更為更新,以避免發生唯一性違規,並覆寫現有的值。 -
(
UPDATEROWEXISTS衝突) 從歷程檔記錄套用更新。
USEMINEQ
如果歷程檔記錄中的 <resolution_column> 值小於或等於資料庫中 <column> 的值,則會執行適當的 <action>:
-
(
INSERTROWEXISTS衝突) 套用歷程檔記錄,但將插入變更為更新,以避免發生唯一性違規,並覆寫現有的值。 -
(
UPDATEROWEXISTS衝突) 從歷程檔記錄套用更新。
<resolution_column>
作為解析資料欄的 NOT NULL 資料欄名稱。此資料欄必須屬於與此解決方式相關聯的資料欄群組。與目標資料庫中目前值比較的解析資料欄值,決定應如何套用解析。解析資料欄的後圖像會用於比較 (如果有的話);否則會使用之前的圖像值。使用可透過簡單 SQL 進行比較的資料欄:
-
NUMERIC -
DATE -
TIMESTAMP -
CHAR/NCHAR -
VARCHAR/ NVARCHAR
若要使用最新的時戳解析,請使用時戳資料欄作為 <resolution_column>,然後將時戳資料欄設為插入或更新資料列時的目前時間。如果可能,請以支援分數秒數的 SYSTIMESTAMP 資料類型定義解析資料欄。以次秒精細度執行比較時,解決歷程檔和目標中解析資料欄值的情況幾乎不需要決勝方式的衝突處理程式。如果您確定時戳資料欄的值只能增加或只能減少 (視解析而定),USEMAX 和 USEMIN 不會導致資料差異。
備註:
請勿使用主索引鍵資料欄作為 UPDATEROWEXISTS 衝突之 USEMAX 敘述句中的解決資料欄。否則,Replicat 會出現類似以下的錯誤:
2013-04-04 10:18:38 ERROR OGG-01922 Missing RESOLUTION COLUMN NAME while mapping to target table "FIN"."ACCT".
USEDELTA
(僅限 UPDATEROWEXISTS 衝突) 將歷程檔記錄中之前和之後的值之間的差異加到目標資料庫中目前的資料欄值。如果有任何值為 NULL,則會發生錯誤。以包含 NUMERIC 資料類型的資料欄為基礎 USEDELTA。在多個節點上同時更新資料列時,USEDELTA 在多重節點組態中相當有用。它只會將資料欄值中的差異傳輸到其他節點,讓所有節點都同步化。
DISCARD
(適用於所有衝突類型) 保留目標資料庫中的目前值,並將歷程檔記錄中的資料寫入捨棄檔。
請小心使用 DISCARD,因為這可能會導致資料差異。
OVERWRITE
(適用於除 DELETEROWMISSING 以外的所有衝突類型) 套用歷程檔記錄如下:
-
(
INSERTROWEXISTS衝突) 套用歷程檔記錄,但將插入變更為更新,以避免發生唯一性違規,並覆寫現有的值。 -
(
UPDATEROWEXISTS衝突) 從歷程檔記錄套用更新。 -
(
UPDATEROWMISSING衝突) 套用歷程檔記錄,但將遺漏的UPDATE轉換成INSERT,方法是使用之後影像的修改資料欄和前一個影像的未修改資料欄。若要將更新轉換成插入,歷程檔中必須有資料列之所有資料欄的前置影像。如果資料庫預設不會在影像之前記錄,請使用補充記錄日誌,並為 ExtractGETBEFORECOLS參數指定ALL。 -
(
DELETEROWEXISTS衝突) 從歷程檔記錄套用刪除,但只使用WHERE子句中的主索引鍵資料欄。
請小心使用 OVERWRITE,因為這可能會導致資料差異。
IGNORE
(適用於所有衝突類型) 保留目標資料庫中的目前值,並忽略歷程檔記錄:請勿套用至目標表格或捨棄檔。
COLS (<column>[, ...])
非預設資料欄群組。這是目標資料庫 (對應後) 中特定解析類型所連結和操作的資料欄清單。如果未指定衝突的資料欄群組,則所有資料欄都會受到指定衝突的解決方法影響。
或者,您可以指定 DEFAULT 資料欄群組,其中包含其他資料欄群組中未列出的所有資料欄。請參閱 DEFAULT 選項。
您可以指定多個資料欄群組,每個群組都有不同的解析。例如,您可以使用 OVERWRITE 作為 col2 和 col3,也可以使用 USEDELTA 作為 col4。任何群組中的資料欄都不能在任何其他群組中。不同欄群組中的欄衝突會根據指定的解析度和列出的順序個別解析。
資料欄群組運作方式如下:
-
對於
INSERTROWEXISTS和UPDATEROWEXISTS衝突,您可以使用不同的資料欄群組,為每個表格指定多個衝突類型和解析。根據為資料欄群組指定的衝突解決方法,會個別解決不同資料欄群組中的資料欄衝突。 -
對於
UPDATEROWMISSING、DELETEROWEXISTS和DELETEROWMISSING,您只能使用一個資料欄群組,而表格的所有資料欄都必須位於此資料欄群組中 (例如<default>資料欄群組)。
範例
範例 1
此範例示範 USEMAX、OVERWRITE、DISCARD 的所有衝突類型。
MAP fin.src, TARGET fin.tgt,
COMPARECOLS (ON UPDATE ALL, ON DELETE ALL),
RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (last_mod_time)),
RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, USEMAX (last_mod_time)),
RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE)),
RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)),
RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD)),
);
範例 2
此範例示範 UPDATEROWEXISTS 與 USEDELTA 及 USEMAX。
MAP fin.src, TARGET fin.tgt,
COMPARECOLS
(ON UPDATE KEYINCLUDING (address, phone, salary, last_mod_time),
ON DELETE KEYINCLUDING (address, phone, salary, last_mod_time)),
RESOLVECONFLICT (
UPDATEROWEXISTS,
(delta_res_method, USEDELTA, COLS (salary)),
(DEFAULT, USEMAX (last_mod_time)));
範例 3
此範例示範 UPDATEROWEXISTS 與 USEDELTA、USEMAX 及 IGNORE。
MAP fin.src, TARGET fin.tgt,
COMPARECOLS
(ON UPDATE ALLEXCLUDING (comment)),
RESOLVECONFLICT (
UPDATEROWEXISTS,
(delta_res_method, USEDELTA, COLS (salary, balance)),
(max_res_method, USEMAX (last_mod_time), COLS (address, last_mod_time)),
(DEFAULT, IGNORE));
SQLEXEC (<SQL_specification>)
SQLEXEC 適用於 TABLE 和 MAP。
在 Oracle GoldenGate 處理期間,使用 SQLEXEC 從 MAP 敘述句執行 SQL 預存程序或查詢。SQLEXEC 可讓 Oracle GoldenGate 直接與資料庫通訊,以執行資料庫支援的任何工作。此工作可以是同步化程序的一部分,例如擷取資料欄轉換的值,或獨立於擷取或複製資料,例如執行在資料庫中執行動作的預存程序。
如需語法和用法,請參閱 SQLEXEC 。
SQLPREDICATE 'WHERE <where_clause>'
SQLPREDICATE 適用於 Oracle、Db2 LUW、z/OS 上的 Db2、Db2 代表 i、PostgreSQL、MySQL、SQL Server 以及 Sybase 資料庫。請勿將 SQLPREDICATE 用於設定為同步交易變更的 Extract 群組。僅適用於初始載入 Extract,因為它會重新結束從表格直接選取記錄的 SELECT 敘述句。
SQLPREDICATE 可與 TABLE 搭配使用。
使用 SQLPREDICATE 將傳統的 SQL WHERE 子句包含在 Extract 從表格選取資料以準備進行初始載入時所使用的 SELECT 敘述句中。SQLPREDICATE 會強制依索引鍵值排序選取所傳回的記錄。
SQLPREDICATE 是比 WHERE 或 FILTER 選項更快速的初始載入選擇方法。它會直接影響 SQL 陳述式,而且不需要 Extract 先擷取所有記錄,再進行篩選。
對於 Oracle 表格,SQLPREDICATE 會減少儲存在還原區段中的資料量,進而降低發生快照太舊錯誤的情況。這在載入非常大的表格時非常有用。
透過使用 SQLPREDICATE 子句,您可以在兩個以上的平行 Extract 處理作業中分割大型表格的資料列。此組態也可讓您利用平行傳遞負載處理。
SQLPREDICATE 也可讓您根據時戳或其他條件選取資料,以篩選擷取並載入至目標表格的資料列。SQLPREDICATE 可用於 ORDER BY 子句或任何其他類型的選擇子句。
確定 WHERE 子句包含屬於索引鍵或索引的資料欄。否則,Extract 會執行完整的表格掃描,以降低 SELECT 陳述式的效率。
語法
TABLE <source_table>, SQLPREDICATE 'WHERE <where_clause>';
WHERE
此為必要關鍵字。
<where_clause>
從來源表格中選取記錄的有效 SQL WHERE 子句。
範例
TABLE hr.emp, SQLPREDICATE 'WHERE state = 'CO' and city = 'DENVER''
THREAD (<thread_ID>)
THREAD 對 MAP 有效。此選項在 Replicat 處於協調模式時有效。
使用 THREAD 來指定要由指定的 Replicat 繫線處理相同 MAP 敘述句中的所有物件。指定的繫線會處理篩選、操控、傳遞至目標、錯誤處理,以及為這些物件設定的其他工作。使用 THREAD 時,可在 TARGET 子句中使用萬用字元。
在另一個表格之間具有參照相依性的所有表格都必須對應到相同的繫線中。例如,如果表格 scott.cust 與 scott.ord 具有外來索引鍵關係,則下列為可能的對應:
MAP scott.cust, TARGET scott.cust, THREAD (5);
MAP scott.ord, TARGET scott.ord, THREAD (5);
如果省略 THREAD 或 THREADRANGE 選項,執行緒 ID 最小的執行緒一律會處理障礙異動。此外,未明確指派給執行緒的工作會透過此執行緒來處理。例如,如果有 ID 範圍從 1 到 10 的執行緒,則執行緒 1 會執行障礙和未指派的交易。
若要在多個執行緒之間處理 MAP 陳述式,請參閱 THREADRANGE (thread_range、column_list) 。THREAD 和 THREADRANGE 是互斥的選項。請勿在相同的 MAP 敘述句中同時使用它們。
語法
THREAD (<thread_ID>)
<thread_ID>
將處理此 MAP 敘述句之繫線的數值 ID。有效值是 1 到使用建立此群組之 ADD REPLICAT 命令的 MAXTHREADS 選項指定的值。您可以使用 INFO REPLICAT 命令來驗證 Replicat 群組允許的繫線數目上限。指定執行緒 ID 時,下列必須為真:
-
在 Replicat 群組的所有
MAP敘述句中指定的繫線總數不可超過MAXTHREADS的值。 -
Replicat 群組中沒有單一
<thread_ID>值可以高於MAXTHREADS的值。例如,如果MAXTHREADS為 25,則不能有 26 或更高的<thread_ID>。
如果未使用 MAXTHREADS,則預設的執行緒數目上限為 25。
範例
下列範例顯示使用 THREAD 選項的一些方式。
範例 1
在此範例中,繫線 1 處理表格 cust。
MAP scott.cust, TARGET scott.cust, THREAD (1);
範例 2
在此範例中,繫線 1 會處理 scott 綱要中的所有表格。
MAP scott.*, TARGET scott.*, THREAD (1);
範例 3
在此範例中,orders 表格會透過使用 FILTER (filter_clause) 和 @RANGE 函數,在兩個 MAP 陳述式之間進行分割。如需有關 @RANGE 的詳細資訊,請參閱 @RANGE 。
MAP scott.orders, TARGET scott.orders, FILTER (@RANGE (1, 2, OID)), THREAD (1);
MAP scott.orders, TARGET scott.orders, FILTER (@RANGE (2, 2, OID)), THREAD (2);
THREADRANGE (<thread_range>,<column_list>)
THREADRANGE 對 MAP 有效。此選項在 Replicat 處於協調模式時有效。
使用 THREADRANGE 指定目標表格的工作負載,在 Replicat 繫線範圍內平均分割 (根據指定的一或多個資料欄的值)。例如,如果分割是以名為 ID 的資料欄值為基礎,且 THREADRANGE 值為 1-3,則執行緒 1 會處理 ID 值從 1 到 10 的資料列、執行緒 2 會處理 ID 值從 11 到 20 的資料列,而執行緒 3 則會處理 ID 值從 21 到 30 的資料列。視工作負載的初始計算而定,分割可能不是絕對的,而是絕對的,如此一來,相同執行緒就會一律處理相同資料列。每個指定的執行緒都會處理篩選、操控、錯誤處理、傳遞至目標,以及處理其資料列範圍的其他工作。
針對經常會產生長時間執行交易或大量交易的大型表格或表格,分割跨多個執行緒的表格可能會改善套用效能,但也可在其他情況下使用。您可以透過相同範圍的執行緒來處理多個表格。
如果省略選擇性資料欄清單,則可以使用萬用字元 TARGET 子句。使用 THREADRANGE 時。使用資料欄清單時,請針對使用相同繫線範圍的每個表格使用個別的明確 MAP 敘述句。
若要處理具有一個特定執行緒的 MAP 陳述式,請參閱 THREAD (thread_ID) 。THREAD 和 THREADRANGE 是互斥的選項。請勿在相同的 MAP 敘述句中同時使用它們。
請勿指定繫線範圍中彼此之間具有參照相依性的表格。使用 THREAD 選項,並處理所有具有相同執行緒的表格。
請勿使用 THREADRANGE 來分割順序。如果需要協調,例如當序列是 SQLEXEC 作業的一部分時,請使用 THREAD 選項將序列工作分割成一個繫線。
如果省略 THREAD 或 THREADRANGE 選項,繫線 ID 最小的繫線一律會處理屏障交易。此外,未明確指派給執行緒的工作會透過此執行緒來處理。例如,如果有 ID 範圍從 1 到 10 的執行緒,則執行緒 1 會執行障礙和未指派的交易。注意:在資料欄清單中指定的資料欄必須存在於歷程檔中。您可以在「擷取」中使用 KEYCOLS 來控制此資料欄,或者在資料欄的「擷取」中使用 FETCHCOLS,或者確保資料欄是補充日誌群組的一部分,然後使用 LOGALLSUPCOLS。
語法
THREADRANGE (<lowID>-<highID>, [<column>[, <column>][, ...]])
<lowID>
此範圍的最低執行緒識別碼。有效值從 1 到 500。
<highID>
此範圍的最高繫線 ID,必須是大於 <lowID> 的數字。有效值為 <lowID>+1 到 500。範圍中的繫線數目不能超過 ADD REPLICAT 命令的 MAXTHREADS 選項所指定的值。如果未使用 MAXTHREADS,則預設的執行緒數目上限為 25。
[<column>[, <column>][, ...]]
選擇性。指定要作為資料列分割基礎的一或多個唯一資料欄。若要指定多個資料欄,請使用逗號分隔的清單,例如 col1, col2, col3。省略此選項時,預設會根據下列資料欄來分割繫線,依照顯示的偏好設定順序:
-
主索引鍵
-
相同
MAP敘述句中的KEYCOLS子句 -
Oracle GoldenGate 支援作為索引鍵的所有表格資料欄。
範例
下列範例會根據 OID 資料欄的值,將相同兩個繫線之間的 orders 和 order_lines 表格除以。
MAP scott.orders, TARGET scott.orders, THREADRANGE (1-2, OID);
MAP scott.order_lines, TARGET scott.order_lines, THREADRANGE (1-2, OID);
TOKENS (<token_definition>)
TOKENS 適用於 TABLE。
使用 TOKENS 來定義使用者記號,並將其與資料建立關聯。記號可讓您擷取和儲存歷程檔記錄標頭之使用者記號區域中的資料。記號資料可以透過多種方式擷取及使用,以自訂 Oracle GoldenGate 提供資料的方式。例如,您可以在欄對映中使用記號資料、由 SQLEXEC 呼叫的預存程序或巨集。
若要在目標表格中使用定義的記號資料,請使用 Replicat MAP 敘述句之 COLMAP 子句中的 @TOKEN column-conversion 函數。@TOKEN 函數會將記號的名稱對應至目標資料欄。
請勿在資料汲取 Extract 群組以傳遞模式處理的表格使用此選項。
記號資料的字元集未轉換。記號必須位於 Extract 來源資料庫的字元集,以及 Replicat 目標資料庫的字元集。
語法
TOKENS (<token_name> = <token_data> [, ...])
<token_name>
您選擇的權杖名稱。它可以是任意數目的有效字元,且不區分大小寫。不支援多重位元組名稱。
<token_data>
最多 2000 個位元組的任何有效字元字串。資料可以是單引號內括住的文字 (如果使用 NOUSEANSISQLQUOTES,則為雙引號),也可以是 Oracle GoldenGate 資料欄轉換函數的結果。
範例
下列會建立名稱為 TK-OSUSER、TK-GROUP 和 TK-HOST 的記號,並將它們對應至使用 @GETENV 函數取得的記號資料。
TABLE ora.oratest, TOKENS (
TK-OSUSER = @GETENV ('GGENVIRONMENT' , 'OSUSERNAME'),
TK-GROUP = @GETENV ('GGENVIRONMENT' , 'GROUPNAME')
TK-HOST = @GETENV ('GGENVIRONMENT' , 'HOSTNAME'));
刪減區 | NOTRIMSPACES
TRIMSPACES 和 NOTRIMSPACES 適用於 TABLE 和 MAP。
在參數檔的根層次使用 TRIMSPACES 和 NOTRIMSPACES,或者在 TABLE 或 MAP 敘述句內,控制在套用至目標 CHAR 或 VARCHAR 資料欄時,是否會截斷來源 CHAR 資料欄的尾端空格。預設值為 TRIMSPACES。
如需語法和用法,請參閱 TRIMSPACES | NOTRIMSPACES 。
TRIMVARSPACES | NOTRIMVARSPACES
TRIMVARSPACES 和 NOTRIMVARSPACES 適用於 TABLE 和 MAP。
在參數檔的根層次使用 TRIMVARSPACES 和 NOTRIMVARSPACES,或者在 TABLE 或 MAP 敘述句內,控制在套用至目標 CHAR 或 VARCHAR 資料欄時,是否會截斷來源 VARCHAR 資料欄的尾端空格。The default is NOTRIMVARSPACES.
See “TRIMVARSPACES | NOTRIMVARSPACES” for syntax and usage.
WHERE (<clause>)
WHERE is valid for TABLE and MAP.
Use WHERE to select records based on a conditional statement. WHERE does not support the following:
-
Columns that have a multi-byte character set or a character set that is incompatible with the character set of the local operating system.
-
The evaluation of the before image of a primary key column in the conditional statement as part of a primary key update operation.
Enclose literals in single quotes. Specify case-sensitive column names as they are stored in the database, and enclose them in double quotes if the database requires quotes to enforce case-sensitivity (such as Oracle).
Getting More Information about Record Filtering
Syntax
WHERE (<clause>)
<clause>
Selects records based on a condition, such as:
WHERE (branch = 'NY')
Table 2-12 shows permissible WHERE operators.
Table 12 Permissible WHERE Operators
| Operator | Example |
|---|---|
| 資料欄名稱 | PRODUCT_AMT "Product_Amt" |
| Numeric values | -123, 5500.123 |
| Literal strings enclosed in single quotes | 'AUTO', 'Ca' |
| Column tests | @NULL, @PRESENT, @ABSENT (column is null, present or absent in the record). These tests are built into Oracle GoldenGate. |
| Comparison operators | =, <>, >, <,>=, <= < td> ,> |
| 結合運算子 | `AND`, `OR` |
| 將括號分組 | 使用左括弧和右括弧進行多個元素的邏輯分組。 |
範例
下列 WHERE 範例會在 AMOUNT 資料欄超過 10,000 時傳回所有記錄,且在缺少 AMOUNT 時不會捨棄記錄。
WHERE (amount = @PRESENT AND amount > 10000)
分割區物件 ID
適用於整合式擷取。
PARTITIONOBJID 可用來指定要針對分割表格擷取之分割區的物件 ID,並適用於「整合式擷取」。對於 IO 表格 (有或沒有溢位區域),應該使用索引區段物件 ID 來進行分割區層次篩選。在此情況下,MAP 或 TABLE 敘述句中的 PARTITIONOBJID 會指定要擷取之分割區的索引區段物件 ID。
語法
MAP/TABLE [container.]schema.table PARTITIONOBJID ptn_object_ID [, ptn_object_ID]
將套用下列限制:
-
包含
PARTITIONOBJID的MAP/TABLE參數不允許使用萬用字元表格名稱。 -
DDL使用PARTITIONOBJID時不支援擷取和複製。
IO 表格 TABLE 敘述句的語法:
TABLE [container.]schema.table PARTITIONOBJID index_segment_object_ID [, index_segment_object_ID]
IO 表格 MAP 敘述句的語法:
MAP [container.]schema.table PARTITIONOBJID index_segment_object_ID [, index_segment_object_ID]