1.Goldengate是如何实现对DDL的复制?
OGG的DDL复制本质是基于数据库全局Trigger的复制。在源库建立一个Oracle全库级的Trigger捕捉DDL操作到中间表,Extract读取中间表DDL语句并与DML语句根据SCN排序,Pump投递到目标端,目标端的Replicat再重现该DDL语句。
2.OGG 实现DDL与DML复制的区别?
DDL复制与DM复制的复制机理是全完不同的,DDL复制基于Trigger,而DML复制是基于日志,其数据捕捉是没有联系的,只是在主Extract进程中通过SCN号按照发生的顺序进行组装,保证DDL操作和DML操作按照其原来的顺序执行。
3.说出几种OOG对DDL类型的限制。
OGG 10G DDL不支持ORACLE回收站功能。
OGG支持不超过2M长度的DDL语句。
OGG只支持单向的DDL复制,不支持双向的DDL复制。
配置DML双向复制:
1.环境介绍:ogg 版本11.2.0.1 数据库版本11.2.0.4.0 OS redhat 6.3
主机orcl1《=========》主机orcl2(GG安装过程略)
2.配置orcl1到orcl2的复制:
A.配置mgr主进程组
edit params mgr
port 7809 /* mgr所用端口号*/
dynamicportlist 7800-8000 /* mgr可用的端口范围*/
autostart extract * /* 自动启动抽取进程 */
autorestart extract *, waitminutes 2, resetminutes 5 /* 自动重启抽取进程 */
lagreporthours 1 /* 每隔1小时检查延迟报告*/
laginfominutes 3 /* 每隔3分钟检查延迟,如果超过延迟阈值,将写入错误日志*/
lagcriticalminutes 5 /*延迟阈值5分钟*/
purgeoldextracts /u01/ggate/dirdat/rt*, usecheckpoints, minkeepdays 3
/* 队列传递结束后,依然保留本地队列3天*/
配置完成后启动mgr进程
start mgr
B. 配置Extract进程组
配置抓取进程eora
edit params eora
extract eora
dynamicresolution
setenv (ORACLE_SID=CPP)
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ggate,password ggate
exttrail /u01/ggate/dirdat/et
tranlogoptions excludeuser ggate --/避免出现死循环复制,extract进程需要进行此项设置
ddl include all
ddloptions addtrandata, report
table hr.*;
添加抽取进程
add extract eora, tranlog,begin now
添加本地trail文件
add exttrail /u01/ggate/dirdat/et,extract eora
启动服务
start extract eore
C. 配置pump进程组
edit params pump_so
extract pump_so
dynamicresolution
passthru
rmthost 192.168.1.176,mgrport 7809,compress
rmttrail /u01/ggate/dirdat/pt
table hr.*;
添加pump进程
add extract pump_so,exttrailsource /u01/ggate/dirdat/et ---本地
添加远程trail文件
add rmttrail /u01/ggate/dirdat/pt,extract pump_so
说明: 指定远程trail文件
启动pump进程
start extract pump_so
D. 添加检查表(目标主机orcl2)
编辑全局配置文件
edit params ./GLOBALS
CHECKPOINTTABLE ogg.checkpoint
exit
./ggsci
GGSCI (slave) 1> dblogin userid ggate,password ogg
Successfully logged into database.
GGSCI (slave) 2> add checkpointtable ggate.checkpoint
Successfully created checkpoint table GGATE.CHECKPOINT.
E. 配置replicat进程组
edit params repl
replicat repl
userid ggate,password ggate
assumetargetdefs
reperror default,discard
discardfile /u01/ggate/dirrpt/repl.dsc,append,megabytes 50
dynamicresolution
map hr.*, target hr.*;
2) 添加复制进程
add replicat repl,exttrail /u01/ggate/dirdat/pt, CHECKPOINTTABLE ggate.checkpoint
3) 启动进程
start repl
主机orcl1到orcl2配置完毕,检查各进程的状态:
GGSCI (orcl1) 26> info mgr
Manager is running (IP port orcl1.7809).
GGSCI (orcl1) 24> info eora
EXTRACT EORA Last Started 2014-10-22 15:20 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:02 ago)
Log Read Checkpoint Oracle Redo Logs
2014-10-22 17:46:46 Seqno 29, RBA 16979968
SCN 0.1096522 (1096522)
GGSCI (orcl1) 25> info pump_so
EXTRACT PUMP_SO Last Started 2014-10-22 15:30 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:06 ago)
Log Read Checkpoint File /u01/ggate/dirdat/et000000
2014-10-22 16:56:33.000000 RBA 58771
Manager is running (IP port orcl2.7809).
GGSCI (orcl2) 9> info repl
REPLICAT REPL Last Started 2014-10-22 15:38 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:06 ago)
Log Read Checkpoint File /u01/ggate/dirdat/pt000000
2014-10-22 16:56:32.832793 RBA 58801
验证同步:SQL> !hostname
orcl1
SQL> select count(1) from t;
COUNT(1)
----------
107
SQL> insert into t select * from t;
107 rows created.
SQL> commit;
Commit complete;
SQL> select count(1) from t
COUNT(1)
----------
214
SQL> !hostname
orcl2
SQL> select count(1) from t;
COUNT(1)
----------
214 ============>同步成功
从orcl2到orcl1复制,同样的操作,注意修改PUMP进程的远程主机IP:
GGSCI (orcl2) 13> view params pump_1
extract pump_1
dynamicresolution
passthru
rmthost 192.168.1.175,mgrport 7809,compress
rmttrail /u01/ggate/dirdat/pt
table hr.*;
配置完成如下:
GGSCI (orcl1) 27> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EORA 00:00:00 00:00:03
EXTRACT RUNNING PUMP_SO 00:00:00 00:00:10
REPLICAT RUNNING REPL_1 00:00:00 00:00:09
GGSCI (orcl2) 14> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EORA_1 00:00:00 00:00:08
EXTRACT RUNNING PUMP_1 00:00:00 00:00:02
REPLICAT RUNNING REPL 00:00:00 00:00:01
验证DML双向同步:
SQL> !hostname
orcl2
SQL> insert into t select * from t;
214 rows created.
SQL> commit;
Commit complete.
SQL> select count(1) from t;
COUNT(1)
----------
428
SQL> !hostname
orcl1
SQL> select count(1) from t;
COUNT(1)
---------
428
--THE END--