goldengate配置DDL複製

myownstars發表於2013-06-01

需額外安裝元件,主要如下

1

建立新使用者DDLuser並執行grant execute on utl_file to schema

為其專門分配一個表空間且autoextend=on,用於儲存ggs_ddl_hist/ggs_marker表;

編輯globals檔案edit params ./globals,新增GGSCHEMA DDLuser

2

初始化指令碼

位於OGG安裝目錄

sysdba登陸oracle,執行marker_setup.sql/ddl_setup.sql/role_setup.sql,如果表空間被其他使用者共享第2個指令碼會失敗,第3個指令碼執行完將新建的role賦給DDLuser, grant ggs_ggsuser_role to DDLuser

執行ddl_enable.sql啟動DDL trigger

可選:執行ddl_pin.sql,將trigger用到的PL/SQLpin到記憶體

3

預設extract不支援而replicat支援DDL,因此需要為Extract配置DDL引數

4

開啟schema supplemental log:用於DDL replication,執行add schematrandata schema

 

 

限制

1

DDL可以被對映或過濾,但不能由datapump處理;

Datapump—對使用DDL的物件的DML操作配置passthru模式,將PASSTHRU引數放在候選表之前;不可對datapump使用DDL引數;

 

2

Rename table會被轉換成alter table  rename,後者支援schema字首,但rename view/sequence不能被轉換,即source/target必須為同一object

 

3

對於lob欄位,redo只記錄被更改的部分內容,可透過閃回查詢從基表讀取整個行;

DDL會導致閃回查詢失敗,因此執行DDL前需注意以下幾點

暫停該表所有的DML

等待extract讀完剩餘的redoreplicat將其應用,info replicat group

執行DDL

恢復DML

 

4

DDL只能用於like-to-like配置,故replicat必須指定assumetargetdefs引數,如果使用sourcedefs引數replicatabend

 

5

Initial load期間須禁用ddl extract/replicat,完成後須將所有source sequence均執行一次nextval

 

6

按位元組衡量DDL語句的長度,最大約為2M,超過則會跳過並將其存入marker表;

可透過ddl_ddl2file.sql DDL以文字檔案儲存於user_dump_dest

 

引數

DDL

不可用於datapump程式

[

{INCLUDE | EXCLUDE}

[, MAPPED | UNMAPPED | OTHER | ALL]

[, OPTYPE ]

[, OBJTYPE ‘’]

[, OBJNAME ]

[, INSTR ‘’]

[, INSTRCOMMENTS ‘’]

[, STAYMETADATA]

[, EVENTACTIONS ()

]

 

DDLERROR

extract

DDLERROR [RESTARTSKIP ] [SKIPTRIGGERERROR ]

 

replicat

DDLERROR

{ | DEFAULT} {}—response包括abend/discard/ignore/retryop maxretries

{INCLUDE | EXCLUDE }

[IGNOREMISSINGOBJECTS | ABENDONMISSINGOBJECTS]

 

DDLOPTIONS

DDLOPTIONS

[, ADDTRANDATA [ABEND | RETRYOP MAXRETRIES ]

[, DEFAULTUSERPASSWORDPASSWORD

[ENCRYPTKEY DEFAULT | ENCRYPTKEY ]]

[, GETAPPLOPS | IGNOREAPPLOPS]

[, GETREPLICATES | IGNOREREPLICATES]

[, IGNOREMAPPING]

[, MAPDERIVED | NOMAPDERIVED]

[, MAPSCHEMAS]

[, MAPSESSIONSCHEMA] TARGET

[, PASSWORD ENCRYPTKEY [DEFAULT | ENCRYPTKEY ]

[, REMOVECOMMENTS {BEFORE | AFTER}]

[, REPLICATEPASSWORD | NOREPLICATEPASSWORD]

[, REPORT | NOREPORT]

[, UPDATEMETADATA]

[, USEOWNERFORSESSION]

 

DDLTABLE

指定DDL歷史表名,預設為GGS_DDL_HIST

 

 

alter table move  OGG DDL support of ALTER TABLE MOVE or DBMS_REDEFINITION [ID 1265554.1]

OGG不支援線上重定義,V11.2.1.0.3之前不支援

如果source db需要執行相應操作,應採用如下方法:

1 停止基表上的所有操作

2 確保extract/replicat沒有lag然後stop

3 extract新增tranlogoptions excludeuser

4 啟動extract/replicat

注:該方法過濾使用者下的所有DDL/DML

 

 

針對DDL object操作引發 ORA-01502 [ID 1358765.1]

DDL字典表執行DDL時須先disable DDL trigger,相當拗口的一句話

比如

SQL> connect ggs/ggs
SQL> alter table ggs_marker move tablespace test;
Table altered.

SQL> connect hr/hr
SQL> create table x (a number);
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01502: index 'GGS.SYS_C0011956' or partition of such index is in unusable state
ORA-06512: at line 993

解決方案

先禁止DDL trigger,重建失效索引;

具體步驟

1 停止extract程式,確保沒有其他會話正在執行DDL,禁止DDL trigger

SQL> @ddl_disable.sql

2 重建索引

3 啟用DDL trigger

SQL> @ddl_enable.sql

4 重啟extract

 

資料庫升級前最好先禁止ddl trigger,完成後再開啟ID 971222.1

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-762694/,如需轉載,請註明出處,否則將追究法律責任。

相關文章