DDL
有效對象
擷取與 Replicat
注意:只有在 Oracle 與 Oracle 資料庫之間以及 MySQL 到 MySQL 資料庫之間,才支援 DDL 複製。
說明
使用 DDL 參數執行下列作業:
-
啟用
DDL支援 -
篩選
DDL作業 -
根據
DDL記錄設定處理動作
若不使用選項使用,DDL 參數不會執行篩選,而且會傳輸所有 DDL 作業,如下所示:
-
作為 Extract 參數,它會擷取所有支援的資料庫物件上產生的所有支援
DDL作業,然後將它們傳送到歷程檔。 -
作為 Replicat 參數,它會從 Oracle GoldenGate 歷程檔複製所有
DDL作業,並將其套用至目標。這與沒有此參數的預設行為相同。
與選項搭配使用時,DDL 參數會作為篩選代理程式,根據下列項目來包括或排除 DDL 作業:
-
範圍
-
物件類型
-
作業型態
-
物件名
-
DDL指令語法或註釋中的字串,或兩者
參數檔中只能使用一個 DDL 參數,但您可以結合多個內含與排除選項,將 DDL 篩選為必要的層次。
-
DDL參數的篩選選項對從交易來源擷取的主要 Extract 有效,但對於資料汲取 Extract 則無效。 -
結合時,會以邏輯方式將多個篩選選項規格連結為
AND敘述句。 -
必須滿足以多個選項指定的所有篩選條件,才能複製
DDL陳述式。 -
在
DDL參數敘述句中使用複雜篩選準則時,建議您先在測試環境中測試您的組態,再於生產環境中使用。 -
請參閱範例 1:範例瞭解詳細資訊。
注意:請勿將 DDL 參數用於 Extract 資料汲取。這些處理類型不允許對應或轉換 DDL,且會自動以傳遞模式傳輸 DDL 記錄。在來源表格上執行的 DDL (例如 ALTER TABLE TableA...) 將由 Replicat 以相同的表格名稱 (ALTER TABLE TableA) 套用。無法將它對應為 ALTER TABLE TableB。
如需有關如何使用 Oracle GoldenGate DDL 支援的其他資訊,請參閱 Oracle GoldenGate Microservices Documentation 中的 Oracle:DDL Replication 和 MySQL:DDL Replication 。
語法
DDL [
{AUTOSCHEMA}
{INCLUDE | EXCLUDE}
[, ALLOWEMPTYOBJECT]
[, ALLOWEMPTYOWNER]
[, MAPPED | UNMAPPED | OTHER | ALL]
[, OPTYPE <type>]
[, OBJTYPE '<type>']
[, OBJNAME <name>]
[, INSTR '<string>']
[, INSTRWORDS '<word_list>']
[, INSTRCOMMENTS '<comment_string>']
[, INSTRCOMMENTSWORDS '<word_list>']
[, SOURCECATALOG <catalog> | ALLCATALOGS]
[, STAYMETADATA]
[, EVENTACTIONS (<action>)]
]
[...]
AUTOSCHEMA
適用於將 MySQL 中的 Replicat 複製到 Oracle、Oracle 至 MySQL,以及將 MySQL 複製到 MySQL 資料。
DDL AUTOSCHEMA 參數選項可用來啟用自動綱要發展功能。依預設,會停用此選項。
語法
DDL AUTOSCHEMA
只有 MAPPED DDL 作業與「自動綱要發展」相關。因此,在包含 / 排除條件中指定為 OBJNAME 子句一部分的物件名稱應與目標表格名稱 (而非來源表格名稱) 對應。
在 Replicat 參數檔中使用 OBJNAME 與 MAPPED 時,OBJNAME 的值必須參照 MAP 敘述句之 TARGET 子句所指定的名稱。
如需詳細資訊,請參閱使用自動綱要發展。
INCLUDE | EXCLUDE
DDL 篩選選項
下列語法選項允許篩選並操作 Oracle GoldenGate 所複製的 DDL。這些選項適用於 DDL 參數的 INCLUDE 和 EXCLUDE 子句,以及其他支援 DDL 複製的參數。
使用 INCLUDE 或 EXCLUDE 來識別包含或排除子句的開頭。
-
包含條款包含可識別此參數將影響之
DDL的篩選準則。 -
排除子句包含從此參數排除特定
DDL的篩選準則。
包含或排除子句必須包含 INCLUDE 或 EXCLUDE 關鍵字,後面接著 DDL 參數之其他篩選選項的任何有效組合。
如果使用 EXCLUDE,則必須建立對應的 INCLUDE 子句。例如,下列項目無效:
DDL EXCLUDE OBJNAME "hr".*
不過,您可以使用下列其中一種方法:
DDL INCLUDE ALL, EXCLUDE OBJNAME "hr"."*"
DDL INCLUDE OBJNAME fin.* EXCLUDE OBJNAME "fin.ss"
EXCLUDE 的優先順序高於任何包含相同準則的 INCLUDEs。您可使用多個包含與排除條款。
請勿在 DDL 參數、TABLE 參數或 MAP 參數中,或 TABLEEXCLUDE 或 MAPEXCLUDE 參數中包含任何安裝 DDL 物件的 Oracle GoldenGate。確定這些參數中的萬用字元設定不包括 Oracle GoldenGate 安裝的 DDL 物件。這些物件不能是 Oracle GoldenGate 組態的一部分,但 Extract 處理作業必須瞭解它們的作業,因此您不能在 EXCLUDE、TABLEEXCLUDE 或 MAPEXCLUDE 參數敘述句的組態中明確排除這些物件。
ALLOWEMPTYOBJECT
使用 ALLOWEMPTYOBJECT 可允許 OBJNAME 規格處理不含物件名稱的 DDL。舉例而言:
DDL INCLUDE OBJNAME sch.* ALLOWEMPTYOBJECT
ALLOWEMPTYOWNER
使用 ALLOWEMPTYOWNER 可允許 OBJNAME 規格處理不含擁有者名稱的 DDL。舉例而言:
DDL INCLUDE OBJNAME pdb.sch.* ALLOWEMPTYOWNER
EVENTACTIONS (action)
造成 Extract 或 Replicat 處理作業會根據交易日誌或歷程檔 (亦稱為事件記錄) 中的 DDL 記錄,採取定義的動作。如果 DDL 記錄適合由 Extract 或資料汲取寫入歷程檔,或由 Replicat 執行 (由 DDL 參數的其他篩選選項決定),則會觸發 DDL 事件。您可以使用此系統,根據資料庫事件來自訂處理。
如需 <action>,請參閱 MAP 和 TABLE 參數底下的 EVENTACTIONS。
在 DDL 記錄上使用 EVENTACTIONS 的準則:
-
CHECKPOINTBEFORE:由於每個DDL記錄都是自治式記錄,因此保證DDL記錄是交易的開始記錄;因此,DDL記錄會隱含CHECKPOINT BEFORE事件動作。 -
IGNORE:此選項對DDL記錄無效。由於DDL作業是自主的,因此忽略記錄等同於忽略整個交易。
EVENTACTIONS 不支援下列 DDL 物件,因為它們是衍生的物件:
-
索引
-
觸發器
-
同義字
-
表格和
ALTER TABLE RENAME上的RENAME
MAPPED | UNMAPPED | OTHER | ALL
使用 MAPPED、UNMAPPED、OTHER 和 ALL,根據 DDL 作業範圍套用 INCLUDE 或 EXCLUDE。
-
MAPPED會將INCLUDE或EXCLUDE套用到MAPPED範圍的DDL作業。在使用其他DDL參數選項指定的篩選之前,會先執行MAPPED篩選。 -
UNMAPPED會將INCLUDE或EXCLUDE套用到UNMAPPED範圍的DDL作業。 -
OTHER會將INCLUDE或EXCLUDE套用到OTHER範圍的DDL作業。 -
ALL會將INCLUDE或EXCLUDE套用至所有領域的DDL作業。
DDL EXCLUDE ALL 是特殊的處理選項,可維護 Oracle GoldenGate 的最新物件描述資料,同時封鎖 DDL 作業本身的複製。使用 Oracle GoldenGate 以外的方法將 DDL 套用至目標時,可以使用 DDL EXCLUDE ALL,但您希望 Oracle GoldenGate 將資料變更複製到目標物件。它會在物件變更時提供目前的描述資料給 Oracle GoldenGate,因此不需要停止和啟動 Oracle GoldenGate 處理作業。下列特殊條件適用於 DDL EXCLUDE ALL:
-
DDL EXCLUDE ALL不需要使用INCLUDE子句。 -
使用
DDL EXCLUDE ALL時,您可以視需要將WILDCARDRESOLVE參數設為IMMEDIATE,以允許立即解析DML。
OBJNAME name
使用 OBJNAME 將 INCLUDE 或 EXCLUDE 套用至物件的完整名稱。若要正確指定兩部分的物件名稱和萬用字元,請參閱在命令引數中使用萬用字元。
將區分大小寫的物件名稱放在雙引號內。
不區分大小寫的範例:
DDL INCLUDE OBJNAME accounts.*
區分大小寫的範例:
DDL INCLUDE OBJNAME accounts."cust"
請勿在 Oracle USER 物件使用 OBJNAME,因為 OBJNAME 預期為 <owner.object> 或 <container.owner.object>,而 USER 則只包含綱要。
在 Replicat 參數檔中使用 OBJNAME 與 MAPPED 時,OBJNAME 的值必須參照 MAP 敘述句之 TARGET 子句所指定的名稱。例如,提供下列 MAP 陳述式時,正確的值為 OBJNAME fin2.*。
MAP fin.exp_*, TARGET fin2.*;
在下列範例中,CREATE TABLE 敘述句的執行方式如下 <source>:
CREATE TABLE fin.exp_phone;
該相同敘述句的執行方式如下:
CREATE TABLE fin2.exp_phone;
如果未在 MAP 敘述句中指定目標擁有者,Replicat 會將其對應至使用 USERIDALIAS 參數指定的資料庫使用者。
對於建立衍生物件 (例如觸發程式) 的 DDL,OBJNAME 的值必須是基礎物件的名稱,而不是衍生物件的名稱。
例如,若要包含下列 DDL 陳述式,正確的值為 hr.accounts,而非 hr.insert_trig。
CREATE TRIGGER hr.insert_trig ON hr.accounts;
對於 RENAME 作業,OBJNAME 的值必須是新的表格名稱。例如,若要包含下列 DDL 陳述式,正確的值為 hr.acct。
ALTER TABLE hr.accounts RENAME TO acct;
OBJTYPE <type>
使用 OBJTYPE,將 INCLUDE 或 EXCLUDE 套用至特定類型的資料庫物件。對於 <type>,請使用任何對資料庫有效的物件類型,例如 TABLE、INDEX 和 TRIGGER。對於 Oracle 具體化視觀表和具體化視觀表日誌,正確的類型分別是 snapshot 和 snapshot log。將物件類型名稱放在單引號內。舉例而言:
DDL INCLUDE OBJTYPE 'INDEX'
DDL INCLUDE OBJTYPE 'SNAPSHOT'
對於 Oracle 物件類型 USER,請勿使用 OBJNAME 選項,因為 OBJNAME 預期為 owner.object 或 <container.owner.object>,而 USER 僅有綱要。
OPTYPE <type>
使用 OPTYPE 將 INCLUDE 或 EXCLUDE 套用至特定類型的 DDL 作業,例如 CREATE、ALTER 和 RENAME。對於 <type>,請使用任何對資料庫有效的 DDL 命令。例如,若要包含 ALTER 作業,正確的語法為:
DDL INCLUDE OPTYPE ALTER
INSTR string
使用 INSTR 將 INCLUDE 或 EXCLUDE 套用至指令語法本身內包含特定字元字串的 DDL 敘述句,但不在註解內。例如,下列排除可建立索引的 DDL。
DDL INCLUDE ALL EXCLUDE INSTR 'CREATE INDEX'
將字串放在單引號內。這種搜尋並不區分大小寫。
INSTR 不支援字串中的單引號 (' '),也不支援 NULL 值。
INSTRCOMMENTS comment_string
(適用於 Oracle) 使用 INSTRCOMMENTS 將 INCLUDE 或 EXCLUDE 套用至註解內包含特定字元字串,但不在 DDL 命令本身內的 DDL 敘述句。透過使用 INSTRCOMMENTS,您可以使用註解作為篩選代理程式。
例如,下列排除註解中包含字串 'source only' 的 DDL 敘述句。
DDL INCLUDE ALL EXCLUDE INSTRCOMMENTS 'SOURCE ONLY'
在本範例中,不會複製以下的 DDL 陳述式。
CREATE USER john IDENTIFIED BY john /<source only>/;
將字串放在單引號內。這種搜尋並不區分大小寫。您可以結合 INSTR 和 INSTRCOMMENTS 來篩選命令語法中的字串,以及在同一個 DDL 敘述句的註解中。
INSTRCOMMENTS 不支援字串中的單引號 (' '),也不支援 NULL 值。
INSTRWORDS word_list
使用 INSTRWORDS 將 INCLUDE 或 EXCLUDE 套用至包含指定文字的 DDL 敘述句。
若為 <word_list>,請在單引號內以任何順序提供字詞。若要包含空格,請在雙引號中加上空格 (和文字,如果適用)。雙引號也可用於括住句子。
所有指定的文字都必須出現在 DDL 中,INSTRWORDS 才會生效。
範例:
DDL INCLUDE OPTYPE ALTER OBJTEYP 'TABLE' INSTRWORDS 'ALTER CONSTRAINT " xyz"'
此範例符合下列 DDL 陳述式:
ALTER TABLE ADD CONSTRAINT xyz CHECK
ALTER TABLE DROP CONSTRAINT xyz
INSTRWORDS 不支援字串中的單引號 (' '),也不支援 NULL 值。
INSTRCOMMENTSWORDS word_list
(適用於 Oracle) 的運作方式與 INSTRWORDS 相同,但僅適用於 DDL 敘述句內的註解,而非 DDL 語法本身。透過使用 INSTRCOMMENTS,您可以使用註解作為篩選代理程式。
INSTRCOMMENTSWORDS 不支援字串中的單引號 (' '),也不支援 NULL 值。
您可以結合 INSTRWORDS 和 INSTRCOMMENTSWORDS 來篩選命令語法中的字串,以及在同一個 DDL 敘述句的註解中。
SOURCECATALOG catalog | ALLCATALOGS
您可以使用這些選項來指定 OBJNAME 子句中不合格的物件名稱如何解析成正確的容器。當來源資料庫是 Oracle 容器資料庫時,請使用這些選項。
SOURCECATALOG 會指定相同 INCLUDE 或 EXCLUDE 子句中指定之所有物件名稱的預設容器。若要生效,必須先指定 SOURCECATALOG,再指定 OBJNAME 規格。請參閱 "SOURCECATALOG " 以瞭解詳細資訊,包括使用包含兩部分名稱的敘述句,其中需要三部分物件名稱才能完全識別物件。
ALLCATALOGS 指定解析相同 INCLUDE 或 EXCLUDE 子句中指定的物件名稱時,應考慮資料庫的所有容器。ALLCATALOGS 可以放在 OBJNAME 規格之前或之後。
以下為當參數檔中有不同的目錄規格時,所指定的優先順序:
-
INCLUDE或EXCLUDE子句中的ALLCATALOGS會覆寫INCLUDE或EXCLUDE子句中的所有SOURCECATALOG規格,並在參數檔的根目錄覆寫OBJNAME子句中完整物件名稱的容器規格。 -
OBJNAME子句中的明確目錄設定會覆寫SOURCECATALOG的所有執行處理 (但不覆寫ALLCATALOGS)。 -
INCLUDE或EXCLUDE子句中的SOURCECATALOG會覆寫在TABLE或MAP敘述句的根目錄中指定的全域SOURCECATALOG參數。 -
如果
INCLUDE或EXCLUDE子句未指定SOURCECATALOG或ALLCATALOGS,則全域SOURCECATALOG參數會對OBJNAME子句中任何不合格的物件名稱生效。 -
如果沒有上述任何參數,則會考慮所有型錄。
STAYMETADATA
(適用於 Oracle)。防止 Extract 擷取描述資料或由 Replicat 套用描述資料。
Extract 在表格上第一次遇到 DML 時,會擷取該表格的描述資料。在該表格上遇到 DDL 時,舊的描述資料就會變成無效。該表格的下一個 DML 會與新的描述資料相符,讓目標表格結構永遠與來源的結構保持在最新狀態。
不過,如果您知道特定的 DDL 作業不會影響表格的中繼資料,可以使用 STAYMETADATA,讓目前的中繼資料不會被擷取或複製。這是一項效能改進,對於匯入和匯出等作業有益,其中通常會執行截斷和停用限制條件的 DDL。這些作業不會影響表格結構,因為它與後續資料複製的完整性相關,因此在這類情況下可以忽略這些作業。例如,ALTER TABLE ADD FOREIGN KEY 不會影響表格描述資料。
以下是選擇性套用此項目的範例:
DDL INCLUDE ALL INCLUDE STAYMETADATA OBJNAME xyz
此範例說明複製時會包含所有 DDL,但只有在物件 xyz 上運作的 DDL 才會受限於 STAYMETADATA。
STAYMETADATA 也可在 EXCLUDE 子句中使用相同的方式。
STAYMETADATA 在來源和目標上必須使用相同的方式,以確保中繼資料完整性。
使用 STAYMETADATA 時,會將訊息新增至報表檔案。DDL 報表是由 DDLOPTIONS 參數與 REPORT 選項控制。
您可以使用 @ddl_staymetadata 命令檔,將相同的功能全域套用至來源上發生的所有 DDL:
-
@ddl_staymetadata_on全域關閉中繼資料版本控制。 -
@ddl_staymetadata_off全域可再次啟用描述資料版本控制。
此選項應與 Oracle GoldenGate 技術支援人員的協助搭配使用,因為 DDL 可能不一定會影響物件描述資料。如果未正確使用,可能會危害複製環境的完整性。
範例
以下是一些不同使用案例的範例:
範例 1:使用 DDL AUTOSCHEMA
-
範例 A:
若要在來源綱要
atssrc和目標綱要atstgt中的所有表格上啟用AUTOSCHEMA,請執行下列動作:DDL AUTOSCHEMA INCLUDE ALL MAP atssrc.*, TARGET atstgt.*; -
範例 B:
使用 DDL AUTOSCHEMA INCLUDE/EXCLUDE OPTYPE 子句也可以根據 DDL 類型啟用篩選 (類似於「範例 1」中顯示的篩選)。
例如,若要啟用 hr 綱要的 AUTOSCHEMA,但排除 finance 綱要,請使用下列命令檔:
DDL AUTOSCHEMA &
INCLUDE OBJNAME hr.* &
EXCLUDE OBJNAME finance.*
MAP hr.*, TARGET hr.*;
MAP finance.*, TARGET finance.*;
-
範例 C:
若要啟用所有表格的
AUTOSCHEMA,並使用自訂TYPEMAP在目標表格上針對所有表格適用的所有來源int類型資料欄使用bigint。DDL AUTOSCHEMA INCLUDE ALL AUTOSCHEMAOPTIONS TYPEMAP 'int'= 'bigint' MAP atssrc.*, TARGET atstgt.tgt_* -
範例 D:
若要為所有表格啟用
AUTOSCHEMA,並使用自訂TYPEMAP在目標表格上針對所有表格適用的所有來源int類型資料欄使用bigint,但若要使用smallint作為來源int的目標資料欄類型,請在財務綱要下輸入所有表格。DDL AUTOSCHEMA INCLUDE ALL AUTOSCHEMAOPTIONS TYPEMAP 'int'= 'bigint' MAP hr.*, TARGET hr.*; MAP finance.*, TARGET finance.*, AUTOSCHEMAOPTIONS (TYPEMAP 'smallint'='bigint');<–>
範例 2:結合 DDL 參數選項
以下為如何結合 DDL 參數選項的範例。
DDL &
INCLUDE UNMAPPED &
OPTYPE alter &
OBJTYPE 'table' &
OBJNAME users.tab* &
INCLUDE MAPPED OBJNAME * &
EXCLUDE MAPPED OBJNAME temporary.tab
此陳述式中的合併篩選條件指定下列項目:
-
INCLUDE未與TABLE或MAP敘述句 (UNMAPPED範圍) 對應之表格的所有ALTER TABLE敘述句,但只有在這些表格由users擁有,且其名稱以tab為開頭時, -
INCLUDE所有以TABLE或MAP敘述句 (MAPPED範圍) 對應之表格的所有DDL作業類型 -
EXCLUDE範圍中為MAPPED之所有表格的所有DDL作業類型,但只有在這些表格是由temporary所擁有,且名稱開頭為tab時才會有這些表格。
範例 3:包含事件動作
下列範例會為所有 DDL 記錄指定 REPORT 的事件動作。
DDL INCLUDE ALL EVENTACTIONS (REPORT)
範例 4:在 DDL 的子集上使用事件動作
下列範例顯示如何在 DDL 的子集上使用 EVENTACTIONS。將複製所有 DDL,但只有在明確命名的物件上執行的 DDL 符合觸發 REPORT 和 LOG 事件動作的條件。
DDL INCLUDE ALL &
INCLUDE OBJNAME sales.t* EVENTACTIONS (REPORT) &
INCLUDE OBJNAME fin.my_tab EVENTACTIONS (LOG INFO)
範例 5:指定在 <source> Oracle 容器資料庫的物件上發出之 DDL 的 <catalog> 名稱的不同方法
下列範例示範指定來源 Oracle 容器資料庫中物件所發出之 DDL 目錄名稱的不同方式。
- 以下為
DDL處理的pdb1.sch1.obj1和pdb2.sch2.obj2。
SOURCECATALOG pdb1
DDL INCLUDE OBJNAME sch1.obj1 INCLUDE SOURCECATALOG pdb2 OBJNAME sch2.obj2
- 下列項目包括任何目錄中名稱為
sch.obj的所有物件,以進行DDL處理。
DDL INCLUDE ALLCATALOGS OBJNAME sch.obj
- 下列項目包括
DDL處理之任何目錄中名稱為sch.obj的所有物件,因為ALLCATALOGS會覆寫任何其他目錄規格。
DDL INCLUDE ALLCATALOGS OBJNAME pdb.sch.obj
範例 6:顯示 ALLOWEMPTYOBJECT 和 ALLOWEMPTYOWNER 的結合使用
以下顯示 ALLOWEMPTYOBJECT 和 ALLOWEMPTYOWNER 的合併使用。
DDL INCLUDE pdb.*.* ALLOWEMPTYOWNER ALLOWEMPTYOBJECT