ADD TRANDATA
使用 ADD TRANDATA,讓 Oracle GoldenGate 從交易記錄取得所需的交易資訊。
使用此命令之前,請使用 DBLOGIN 命令來建立資料庫連線。
ADD TRANDATA 對下列資料庫有效:
-
Db2 for i
-
Db2 LUW
-
Db2 z/OS
-
Oracle
-
PostgreSQL
-
SQL Server
-
Sybase
對於其他支援的資料庫,此功能可能已經可以使用或必須從資料庫介面設定。
使用 ADD TRANDATA 時,請參閱下表以瞭解不同資料庫使用萬用字元的方法:
| 資料庫 | 使用萬用字元 |
|---|---|
| Db2 LUW、Db2 z/OS | 萬用字元只能與表格名稱一起使用。不能與綱要名稱一起使用。 |
| Oracle | 萬用字元可以與綱要名稱和表格名稱一起使用。不能與 PDB 名稱一起使用。 |
| PostgreSQL 和 SQL Server | 萬用字元可以與綱要名稱和表格名稱一起使用。 |
Db2 for i
使用 ADD TRANDATA 啟動資料的日誌記錄。ADD TRANDATA 命令會呼叫 STRJRNPF,這是開始記錄表格的建議方法,因為它可確保在 STRJRNPF 命令上設定 Record Images (IMAGES): *BOTH 的必要日誌影像屬性。
Db2 LUW
請使用 ADD TRANDATA 在指定的表格上啟用 DATA CAPTURE CHANGES。依照預設,ADD TRANDATA 會對資料庫發出下列命令:
ALTER TABLE name DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;
您可以將 ADD TRANDATA 與 EXCLUDELONG 選項一起使用來排除 LONGVAR 子句。
Db2 z/OS
請使用 ADD TRANDATA 在指定的表格上啟用 DATA CAPTURE CHANGES。依照預設,ADD TRANDATA 會對資料庫發出下列命令:
ALTER TABLE name DATA CAPTURE CHANGES;
Oracle Database
Oracle GoldenGate 26ai for Oracle AI Database 26ai,以及更高版本的 JSON Relational Duality Views 和 JSON Collection Table 支援複寫。ADD TRANDATA 命令可啟用 JSON Relational Duality Views 和 JSON Collection Tables 的補充日誌記錄。不過,ADD TRANDATA 不會影響 JSON 雙重性檢視基礎表格,而且不會新增基礎表格的牽引資料。如需詳細資訊,請參閱 Oracle GoldenGate Microservices Documentation 中的 Setting Up Replication for JSON DV and JSON Collection Tables 。
請注意,使用與下列類似的命令僅適用於表格,並不適用於 JSON 關聯式雙重性視觀表和 JSON 集合表格:
ADD TRANDATA HR.*
若要從 JSON Duality 視觀表和 JSON 集合表格擷取,您需要對每個需要複製的 JSON Duality 視觀表和 JSON 集合表格執行 ADD TRANDATA 命令。這樣可確保您知道正在設定要複製的 JSON 雙重性視觀表和 JSON 集合表格,以避免系統超載。
注意:使用 ADD TRANDATA 啟用 JSON 雙重性視觀表的邏輯複製時,不支援萬用字元。不過,JSON 集合表格支援萬用字元,就像一般表格一樣,因此 TABLE/MAP 敘述句也允許使用萬用字元。
從 21c 版本開始,此命令也會對 Oracle Database 啟用可供自動擷取的表格。
依照預設,Oracle 的 ADD TRANDATA 會啟用指定表格之所有唯一索引鍵和外來索引鍵的無條件記錄,以及條件補充記錄日誌,請參閱確保來源和目標表格中的資料列唯一性,瞭解 Oracle GoldenGate 如何處理 Oracle AI Database 補充記錄日誌的詳細資訊。
若有可能,請使用 ADD SCHEMATRANDATA 指令,而非 ADD TRANDATA 指令。ADD SCHEMATRANDATA 指令確保複製連續性應該在剛執行 DDL 的物件上出現 DML。您可以使用排除參數,將物件自綱要設定排除。
若要使用 Oracle GoldenGate DDL 複製功能,您必須使用 ADD SCHEMATRANDATA 命令來記錄必要的補充資料。
使用 ADD SCHEMATRANDATA 時,您可以搭配使用 ADD TRANDATA 與 COLS 選項來記錄任何非主要資料欄,例如 FILTER 敘述句所需的資料欄,以及 TABLE 與 MAP 參數中的 KEYCOLS 子句。
注意:您可以使用 `ADD
TRANDATA` for Oracle when DDL support is enabled, but only if you can stop DML on all tables before DDL is performed on them or, if that is not possible, you can guarantee that no users or applications will issue DDL that adds new tables whose names satisfy an object specification in a `TABLE` or `MAP` statement. There must be no possibility that users or applications will issue DDL that changes the key definitions of any tables that are already in the Oracle GoldenGate configuration.
{: .infoboxnote}
使用 Oracle GoldenGate 時,Oracle 建議將來源資料庫設為強制日誌記錄模式,並且在資料庫層級啟用最低層級補充日誌記錄。這會將資料列鏈結資訊 (若有的話) 記錄到重做日誌以供更新作業使用。
針對 Oracle AI Database 使用 ADD TRANDATA 時,請考慮下列事項:
-
Oracle GoldenGate 開始擷取資料後若有任何日誌記錄詳細資訊變更,您必須在任何資料變更前先停止然後啟動讀取受影響表格的 Extract 處理作業。
-
使用
ADD TRANDATA建立補充日誌群組時,Oracle GoldenGate 會將物件 ID 附加至GGS_的前置碼,例如GGS_18342。
PostgreSQL
使用 ADD TRANDATA 命令時,會更改表格的 REPLICA IDENTITY 設定。REPLICA IDENTITY 設定會先控制表格資料欄的影像,然後再記錄至 UPDATE 與 DELETE 作業的交易日誌。
SQL Server
使用 ADD TRANDATA 提供 Oracle GoldenGate 需要重新建構 SQL 作業的延伸記錄日誌資訊。SQL Server 異動日誌預設並未提供足夠的資訊。
透過啟用 TRANDATA,Oracle GoldenGate 會為資料庫啟用 SQL Server Change Data Capture 功能,並為每個啟用 TRANDATA 的執行處理建立 Change Data Capture 表格。
語法
ADD TRANDATA container.owner.table]
[, FILEGROUP filegroup-name]
[, NOSCHEDULINGCOLS | ALLCOLS]
[, ALLOWNONVALIDATEKEYS]
[, PARTIALJSON]
[, PREPARECSN {WAIT | LOCK | NOWAIT | NONE}]
[container.]owner.table
適用於 Db2 LUW、Db2 z/OS、Oracle、PostgreSQL 及 SQL Server。
兩部分或三部分的名稱設定。除了 Oracle 多用戶容器資料庫以外,所有支援的資料庫均使用兩部分名稱 owner.table。
若為 Oracle 多用戶容器資料庫,請使用 container.owner.table 的三部分名稱。所有元件均可使用萬用字元。與萬用字元配合使用,ADD TRANDATA 會篩選出符合系統物件名稱的名稱。若要對非系統物件但名稱與萬用字元樣式中系統物件的名稱相符的物件使用 ADD TRANDATA,請對不使用萬用字元的物件發出 ADD TRANDATA。
如果您從 cdb$root 執行命令,請確定同時在資料庫端設定下列使用者權限:
ALTER USER userID SET CONTAINER_DATA = ALL CONTAINER = CURRENT;
schema.table [JOURNAL library/journal] | library/file [JOURNAL library/journal]
適用於 Db2 for i。
指定 SQL 綱要和表格名稱,或原生程式庫和檔案名稱。如果使用 DEFAULTJOURNAL 命令設定預設日誌,您可以省略 JOURNAL 選項;否則為必要項目。
FILEGROUP filegroup-name
適用於 SQL Server。
(選擇性) 您可以使用 FILEGROUP 選項搭配現有的檔案群組名稱,來指定要放置 SQL Server Change Data Capture 暫存表格的檔案群組。
ADD TRANDATA owner.table FILEGROUP cdctables
啟用 TRANDATA 時,如果每個表格都需要使用相同的 FILEGROUP,也可以使用 GLOBALS 檔案中的 FILEGROUP 選項。
下列範例顯示設定 GLOBALS 檔案中的 FILEGROUP myFileGroup:
FILEGROUP myFileGroup
輸出為:
Logging of supplemental log data is enabled for table dbo.test1 in filegroup
myFileGroup
在此情況下,ADD TRANDATA 命令會將 myFileGroup 用於所有表格。
若同時使用 FILEGROUP 參數與 ADD TRANDATA,則命令會覆寫 GLOBALS 檔案中定義的檔案群組名稱。
例如,如果您在 GLOBALS 檔案中設定 FILEGROUP myFileGroup,然後執行下列 ADD TRANDATA 命令:
ADD TRANDATA dbo.* FILEGROUP yourFileGroup
輸出會是:
Logging of supplemental log data is enabled for table dbo.test1 in filegroup
yourFileGroup
在此情況下,ADD TRANDATA 會將 yourFileGroup 而非 myFileGroup 用於所有表格。
如果未在 GLOBALS 或 ADD TRANDATA 中指定 FILEGROUP,則在新增表格的 TRANDATA 時,命令行會考量資料庫的預設 FILEGROUP。例如,如果您執行 ADD TRANDATA dbo.*,則輸出為:
Logging of supplemental log data is enabled for table dbo.test1 in filegroup
PRIMARY
在此情況下,預設的 FILEGROUP 為 Primary。如果您執行 INFO TRANDATA 命令,FILEGROUP 名稱會顯示為 PRIMARY。
NOSCHEDULINGCOLS | ALLCOLS
適用於 Oracle 和 PostgreSQL。
從 Oracle GoldenGate 21c 開始,如果執行中的資料庫支援自動擷取功能,Oracle 資料庫 21c 和更新版本將不再使用 NOSCHEDULINGCOLS。
這些選項符合整合式 Replicat 的記錄日誌需求,這些資料將處理您以 ADD TRANDATA 指定的表格。
NOSCHEDULINGCOLS
僅適用於 Oracle。
停用排程資料欄的日誌記錄。依照預設,ADD TRANDATA 會啟用主索引鍵的無條件記錄,以及指定表格之所有唯一索引鍵和外來索引鍵的條件性補充記錄日誌。無論是否在目前作業中變更主索引鍵,無條件性日誌記錄都會強制使用日誌的主索引鍵值。如果在目前作業中至少變更外來或唯一索引鍵其中之一,則條件性日誌記錄會記錄外來或唯一索引鍵的所有資料欄值。主索引鍵、唯一索引鍵以及外來索引鍵必須皆可供內送伺服器使用以運算相依性。
ALLCOLS
對表格的所有索引鍵和非索引鍵資料欄啟用無條件補充日誌記錄。此選項會對運算相依性所需的索引鍵,外加用於篩選、衝突解決或其他用途的所有其他資料欄啟用日誌記錄。
若為 PostgreSQL,ALLCOLS 會將資料表的 REPLICA IDENTITY 設定為 FULL。ALLCOLS 指定為 ADD TRANDATA 命令的一部分,以啟用 UPDATE 和 DELETE 作業之所有資料欄的記錄,即使這些資料欄尚未修改。
對於沒有「主索引鍵」或「唯一索引」的表格,ALLCOLS 選項是多餘的。語法如下:
ADD TRANDATA table_name ALLCOLS
COLS (columns)
適用於 Oracle。
使用 COLS 選項來記錄特定的非索引鍵資料欄。可以用來記錄 KEYCOLS 子句中指定的資料欄,以及記錄篩選或操控所需的資料列,這可能會比使用 TABLE 敘述句中的 FETCHCOLS 子句擷取這些值更有效率。使用逗號分隔多個欄,例如 NAME、ID、DOB。
INCLUDELONG | EXCLUDELONG
適用於 Db2 LUW。
控制 ADD TRANDATA 所發出的 ALTER TABLE 是否包含 INCLUDE LONGVAR COLUMNS 屬性。INCLUDELONG 為預設值。如果使用此選項發出 ADD TRANDATA,Oracle GoldenGate 會發出下列敘述句:
ALTER TABLE name DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;
使用 EXCLUDELONG 時,指令如下:
ALTER TABLE name DATA CAPTURE CHANGES;
使用 EXCLUDELONG 時,Oracle GoldenGate 不支援包含 LONGVAR 資料欄之表格影像之前的必要功能。例如,GETUPDATEBEFORES 參數。若要支援此功能,異動日誌中對 LONGVAR 資料欄的變更必須包含資料欄值的前後影像。
NOKEY
適用於 Db2 for i、Db2 LUW、Db2 z/OS、Oracle。
從 Oracle GoldenGate 21c 開始,如果執行中的資料庫支援自動擷取功能,Oracle Database 21c 和更新版本將不再使用 NOKEY。
隱藏主索引鍵資料欄的補充日誌記錄。如果使用 NOKEY,請使用 COLS 選項來記錄可作為索引鍵的替代資料欄,然後使用 TABLE 或 MAP 參數的 KEYCOLS 選項,將這些資料欄指定為替代索引鍵。
NOVALIDATE
適用於 Db2 for i、Db2 LUW、Db2 z/OS、Oracle。
隱藏 ADD TRANDATA 正在處理之表格的其他資訊。此選項預設為啟用。處理其他資訊會導致命令回應延遲,因此這個選項可用來增加回應時間。
ALLOWNONVALIDATEDKEYS
適用於 Db2 for i、Db2 LUW、Db2 z/OS、Oracle。
它包含補充日誌記錄中的 NON VALIDATED 和 NOT VALID 主索引鍵。這些索引鍵會覆寫 Oracle GoldenGate 所使用的一般索引鍵選擇條件。如果正在使用 GLOBALS 參數 ALLOWNONVALIDATEDKEYS,ADD SCHEMATRANDATA 會以 ALLOWNONVALIDATEDKEYS 執行,無論是否已指定該參數。依預設,不會記錄 NON VALIDATED 和 NOT VALID 主鍵。
PARTIALJSON
適用於 Oracle。
在表格層級擷取局部 JSON 更新。若啟用,重做將會包含局部 JSON 記錄。
另請參閱 TRANLOGOPTIONS FETCHPARTIALJSON 參數。
PREPARECSN {WAIT | LOCK | NOWAIT | NONE}
適用於 Oracle DML 與 DDL。自動準備來源表格,讓 Oracle 資料汲取匯出傾印檔能夠包括實例 CSN。Replicat 會使用 Oracle 資料汲取 (在匯入時)所設定的每個表格實例 CSN,來篩除歷程檔記錄。在目標上,資料汲取匯入會使用 DBOPTIONS ENABLE_INSTANTIATION_FILTERING 參數填入具有建立 SCN 的系統表格與檢視,以啟用表格層次的建立篩選。
WAIT
等待所有進行中異動並準備表格實例。
LOCK
鎖定表格 (以準備表格實例)。
NOWAIT
預設行為,實例會立即準備完成。
NONE
不會準備實例。
範例
下列範例會產生以下其中一項結果:記錄 Oracle 表格的主索引鍵;記錄 SQL Server 或 DB2 表格的補充資料。這也會對表格啟用自動擷取。
ADD TRANDATA hr.employees
下列範例會啟用名為 acct 之表格的所有索引鍵與非關鍵碼資料欄的無條件補充記錄。這也會對表格啟用自動擷取。
ADD TRANDATA hr.employees ALLCOLS
下列 Oracle AI Database 範例會記錄主索引鍵加上非主要資料欄名稱與地址。這也會對表格啟用自動擷取。
ADD TRANDATA hr.employees, COLS (name, address)
下列 Oracle AI Database 範例會防止記錄主索引鍵,但會改為記錄非索引鍵資料欄 name 和 pid 。這也會對表格啟用自動擷取。
ADD TRANDATA hr.employees, NOKEY, COLS (name, pid)
下列範例新增日誌記錄,但未預備表格實例。這也會對表格啟用自動擷取。
ADD TRANDATA hr.employees PREPARECSN NONE
下列範例會隱藏其他的表格資訊處理作業。這也會對表格啟用自動擷取。
ADD TRANDATA hr.employees.*name NOVALIDATE