DDL復(fù)制的配置 - 目前只支持oracle和teradata的ddl復(fù)制
- oracle能復(fù)制除了系統(tǒng)對(duì)象之外的所有對(duì)象
- 兩種配置方法:
- 基于trigger的DDL:對(duì)于生產(chǎn)庫(kù)有一定影響,。
- 原理:
- 源庫(kù)建立一個(gè)oracle全庫(kù)級(jí)別的trigger捕捉DDL操作到中間表。
- extract讀取中間表的DDL語(yǔ)句并且與DML語(yǔ)句根據(jù)csn排序,。
- 目標(biāo)端重現(xiàn)該DDL操作sql語(yǔ)句,。
- 特點(diǎn):
- DDL和DML復(fù)制原理不同:
- DDL復(fù)制基于Trigger,DML復(fù)制基于日志,,兩者復(fù)制機(jī)理不同,,它們之間的數(shù)據(jù)捕捉是沒(méi)有聯(lián)系的,只是在主extract進(jìn)程中通過(guò)scn號(hào)按照發(fā)生的順序進(jìn)行組裝,,保證DDL操作和DML操作按照其原來(lái)的順序執(zhí)行,。
- DDL和DML復(fù)制互相獨(dú)立:DDL的復(fù)制Trigger建立之后,無(wú)論DML復(fù)制是否運(yùn)行,,該Trigger一直在發(fā)生作用,,捕捉DDL的sql語(yǔ)句到中間表。因此,,DML復(fù)制的啟停并不影響DDL的捕獲,;DDL Trigger的啟用和停止并不影響DML的復(fù)制,只是該Trigger被禁止后不再抓取DDL操作,;DDL和DML之間除了在extract組裝時(shí)靠scn排序產(chǎn)生次序關(guān)系,,沒(méi)有其它任何聯(lián)系。
- DDL復(fù)制只是簡(jiǎn)單的sql復(fù)制,。抓取sql扔到目標(biāo)端重新執(zhí)行一遍而已,。
- 打開(kāi)DDL復(fù)制能夠自動(dòng)創(chuàng)建每次補(bǔ)丁新建和修改的對(duì)象,并自動(dòng)維護(hù)對(duì)于的附加日志,,無(wú)需人工介入,,減少人工工作量。
- 使用原則:
- 兩端必須是oracle數(shù)據(jù)庫(kù):不支持standby db的ddl抽取,。
- 支持雙向復(fù)制DDL (只是支持2個(gè)節(jié)點(diǎn))
- 兩端表結(jié)構(gòu)保持一致;(replicat:ASSUMETARGETDEFS)
- 不支持DDL transform(map和filter支持)
- DDL語(yǔ)句小于2M大?。?
- pump進(jìn)程不負(fù)責(zé)任任何map和filter,,使用passthru
- 數(shù)據(jù)庫(kù)每天的日子量不宜過(guò)大:100g以下,;過(guò)大會(huì)影響性能,。
- 應(yīng)用系統(tǒng)在數(shù)據(jù)庫(kù)中不能有頻繁的DDL操作,在erp系統(tǒng)里面,,如頻繁建立中間表等操作,,這個(gè)時(shí)候性能也被極大影響。
- 默認(rèn):
- 默認(rèn)情況下:extract是關(guān)閉DDL的,,而data pump進(jìn)程和replicat默認(rèn)是打開(kāi)的,。所以只需要在extract進(jìn)程中配置DDL復(fù)制就可以了。但是建議在replicat中配置DDL相關(guān)屬性,;
- replicat進(jìn)程默認(rèn)是所有DDL都做復(fù)制,,如果有多個(gè)replicat進(jìn)程在跑,那必須在每個(gè)replicat進(jìn)行配置,,否則會(huì)引起重復(fù)復(fù)制,。
- goldengate用戶(hù)和oracle數(shù)據(jù)庫(kù)自帶的用戶(hù)的DDL操作不會(huì)被復(fù)制。
- 當(dāng)開(kāi)啟full ddl(all scope)支持時(shí),,不需要在參數(shù)文件中使用gettruncates參數(shù),。
- DDL復(fù)制范圍界定:
- ALL:表示復(fù)制所有的DDL操作,所有源庫(kù)產(chǎn)生的ddl都會(huì)被放到隊(duì)列當(dāng)中,。
- MAPPED:表示只復(fù)制在后面所有table參數(shù)指定的表,,所相關(guān)聯(lián)的對(duì)象,如索引,,列的變化等,,如果要復(fù)制新建的表,那么這些表必須顯示列在table語(yǔ)句里,,或者符合table中使用匹配的條件,。
- unmapped:表示只復(fù)制不在table范圍內(nèi)的表的相關(guān)的DDL。
- Other:該范圍表示無(wú)關(guān)的DDL操作:例如對(duì)數(shù)據(jù)庫(kù)本身,,用戶(hù),,表空間,數(shù)據(jù)文件的操作,。一般實(shí)際中不使用,。
- OPTYPE:操作類(lèi)型:比如:create,alter
- OBJTYPE:對(duì)象范圍:如table或index
- OBJNAME:對(duì)象名:
- INSTR:關(guān)鍵字的范圍
- 實(shí)際例子
DDL &
INCLUDE MAPPED OBJTYPE 'table' & --$符號(hào)是轉(zhuǎn)行符號(hào),,可以降低出錯(cuò)率,。
INCLUDE MAPPED OBJTYPE 'index'
ddloptions addtrandata, nocrossrename
table abc.*
--為了降低出錯(cuò)率,建議只復(fù)制map范圍內(nèi)的表和索引等主要對(duì)象,;
--如果要復(fù)制新建表,,該表必須在后面table指定范圍內(nèi)(一般用×)
--trandata:自動(dòng)更新附加日志,也可以用add schematrandata
DDL [{INCLUDE | EXCLUDE}]
[, MAPPED | UNMAPPED | OTHER | ALL]
[, OPTYPE <type>]
[, OBJNAME "<name>" ]
[, INSTR '<string>' ]
- 基于trigger的幾個(gè)小問(wèn)題:
- 數(shù)據(jù)庫(kù)(源庫(kù))如果是10g,,一定需要關(guān)閉recycle bin,。避免隱形的ddl的抽取,,可能會(huì)出現(xiàn)兩次的操作,,11g以后不需要,,原理改變。
- goldengate需要獨(dú)立的表空間:不能共享,。
- 執(zhí)行ddl_setup.sql之前,,需要明確授權(quán):create table, create sequence,即使有DBA權(quán)限也不行。
- 大致步驟:marker_setup -- DDL setup -- role setup -- enable DDL trigger
- 幾個(gè)特例說(shuō)明:
- 和目標(biāo)數(shù)據(jù)庫(kù)一致性有關(guān)的測(cè)試:
- create job不支持
- create trigger是可以復(fù)制的,,且enable狀態(tài),,所以必須手工設(shè)置為disable或者replicat參數(shù);
- create tablespace是可以復(fù)制的,,可以支持復(fù)制到不同文件目錄,;
- CTAS語(yǔ)句的復(fù)制:最終結(jié)果按照本地的數(shù)據(jù)來(lái)(如:create table xx as select * from dba_objects;)
- rename t1 to t2 會(huì)被轉(zhuǎn)換成alter table t1 rename to t2 (view report rep1)
- flashback table to scn ---可以支持復(fù)制
- flashback table to before drop --不支持復(fù)制
- Native DLL(通過(guò)logminer server進(jìn)行日志解析 – ogg12c + integrated extract +db11204及以上):從日志里面進(jìn)行解析。
- 版本要求:OGG12c, db11204,以上,;compatible設(shè)置11.2.0.4或以上,;downstream模式下,sourcedb也要滿(mǎn)足以上要求,。
- 集成抽取模式
- 參數(shù)不變
12c復(fù)制的新特性
truncate復(fù)制
sequence復(fù)制的配置
壓縮配置
加密配置
TDE透明技術(shù)加密的列的抽取
|