设为首页 收藏本站
查看: 425|回复: 0

[经验分享] Oracle GoldenGate (以下简称ogg)在异种os上同种db之间的数据同步。

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-18 08:51:08 | 显示全部楼层 |阅读模式
Oracle GoldenGate (以下简称ogg)在异种os上同种db之间的数据同步。
ogg能实现的功能:
可以细化到单表同步,符合特定where条件的rows同步,指定column的同步。
ogg 的竞争对手:ibm cdc;dell shareplex;dsg;dds等等
环境描述:
源头:windows 2003x64bit, oracle db 11.2.0.3 x64bit
目的端:suse linux ,oracle db 11.2.0.3
预先准备:
1.Microsoft Visual C ++ 2005 SP1 Redistributable Package
  注意点:第一:该c++的package 区分bit数,并且一定要下载sp1版本的package。
          第二:只要是在windows上使用ogg,这个c++的package就一定得装,
           不管db是不是oracle ,sqlserver,不管ogg用于源头数据库还是用于目的端数据库。
2.ogg for windows x64bit 下的 oracle db 11.2.0.3 x64bit介质。--p18794252_1121023_MSWIN-x86-64.zip
3.ogg for linux  x64bit 下的 oracle db 11.2.0.3 x64bit介质。--p18794252_1121023_Linux-x86-64.zip
  注意点:
  第一:ogg介质,除了基础版(比如说11.2.1.0.1,最后的这个.1就是基础版本)可以从www.oracle.com下载,
ogg的后续补丁只能从mos上下载。
  第二:ogg的介质区分os类型,db类型,db 版本,db bit数。
但是对于如下的情况是同一个ogg介质:oracle db 11.2.0.3 x64bit 安装在suse11下和安装在suse 10下。
实施过程:
1.上传介质到源头和目的端。
2.在源头的实施过程:
2.1 创建goldengate系统用户并授权
  Sql> create tablespace GGTBS datafile 'd:\相关路径\ggtbs01.dbf'size 1024M auextend on;
  Sql> Create user Goldengate default tablespace ggtbs identified by oracle;(目标数据库也创建这一个goldengate用户)
  Sql> grant dba to goldengate;
2.2 将数据库设置为归档模式--一般的生产库都处于归档模式。
2.3 打开源端数据库的附加日志
   Sql>alter databse add supplemental log data;
    切换日志使附加日志生效:
   Sql>alter system archive log current;
2.4 检查源端数据库的附加日志
   Sql>select supplemental_log_data_min from v$database;
   --返回yes表示附加日志已经打开。
2.5 打开源头数据库的force logging:
   sql> alter database force logging;
2.6 对 主库 执行检查脚本,确认如下情况是否存在:找出唯一索引的索引列的列定义允许为null的
select dic.table_owner, dic.table_name, dic.index_name, di.uniqueness,dic.column_name
from dba_ind_columns  dic , dba_indexes di,dba_tab_columns dtc
where dic.table_owner=’自行添加用户’and dtc.OWNER='自行添加用户’
AND dic.table_owner=di.table_owner and dic.TABLE_NAME=di.table_name
and dic.index_name=di.index_name
and di.uniqueness='UNIQUE'     and dtc.owner=di.table_owner  
and dtc.TABLE_NAME=di.table_name and dic.column_name=dtc.COLUMN_NAME  and dtc.nullable='Y'
and dic.TABLE_NAME=dtc.TABLE_NAME
--->自行添加用户请用需要同步的user来代替。
对于查询出来的表和唯一索引名,请修改:要么变为非唯一索引,要么在保留唯一索引的情况下,将列的定义置为not null。
2.7 假设将ogg软件放在d:\ggs目录下,cmd界面下进入d:\ggs
    ggsci>create subdirs   -->该命令的作用是在d:\ggs下建立dirprm、dirdat、dirrpt等下级目录。
2.8 ggsci>edit params ./GLOBALS
    添加如下的字符,之后保存退出
    MGRSERVNAME GGSSERVICE
2.9 建立ogg的 windows service
   D:\ggs>install addservice autostart

2.10 为表添加补充日志
    ggsci>dblogin userid goldengate password oracle
    ggsci> add trandata USER1.*    --->注意:*后别加分号。
    ggsci> add trandata USER2.*    --->注意:*后别加分号。
    ggsci> add trandata USER3.*    --->注意:*后别加分号。   
    确认表的补充日志是否已经添加:
    select table_name from all_tables
    where owner='USER1' and table_name not in (select distinct table_name from dba_log_groups where owner='USER1');
2.11 配置DDL复制
SQL> GRANT EXECUTE ON UTL_FILE TO goldengate;
ggsci>edit params ./GLOBALS  添加如下的字符,之后保存退出
GGSCHEMA goldengate
cmd下 cd 到d:\ggs目录
退出所有的oracle session
sqlplus / as sysdba
SQL> @marker_setup.sql
SQL> @ddl_setup.sql
SQL> @role_setup.sql
SQL> grant ggs_ggsuser_role to goldengate;
SQL> @ddl_enable.sql
2.12 配置sequence的同步(若是备库是报表查询需求,请忽略此步)
cmd下 cd 到d:\ggs目录
sqlplus / as sysdba
SQL> @sequence.sql
--->源头执行:SQL> GRANT EXECUTE on goldengate.updateSequence TO goldengate;
--->目的端执行:SQL> GRANT EXECUTE on goldengate.replicateSequence TO goldengate;
2.13 源端配置参数文件
ggsci > edit params mgr
添加如下参数,之后保存退出。
port 7809
autostart extract *
autorestart extract *, waitminutes 1, retries 60, RESETMINUTES 60
PURGEOLDEXTRACTS d:\ggs\dirdat\st*, USECHECKPOINTS, MINKEEPHOURS 2

ggsci> add  extract  extfull, tranlog, Threads 2, begin now
--->以上命令是针对主库是rac2个节点的情况,若是单机,请忽略Threads 2
ggsci >edit  params  extfull
添加如下参数,之后保存退出
extract extfull
setenv ( NLS_LANG = " AMERICAN_AMERICA.ZHS16GBK " )
--TRANLOGOPTIONS ASMUSER SYS@ASM1, ASMPASSWORD oracle
--THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 80000 IOLATENCY 160000
DBOPTIONS ALLOWUNUSEDCOLUMN
userid goldengate, password oracle
ddl include mapped
ddloptions addtrandata RETRYOP MAXRETRIES 1000 RETRYDELAY 10, REPORT
WARNLONGTRANS 1h, CHECKINTERVAL 5m
exttrail d:\ggs\dirdat\st
gettruncates
dynamicresolution
tableexclude 'USER.cncdata';
tableexclude 'USER.sb_czm_pyDD';
table USER1.*;
table USER2.*;
table USER3.*;
sequence USER1.*;
sequence USER2.*;
sequence USER3.*;
2.14 添加trail文件,文件名为d:\ggs\dirdat\st,是由extfull抽取进程来写这个trail文件,每个trail文件的最大大小为50M
ggsci> add exttrail  d:\ggs\dirdat\st, extract extfull, MEGABYTES 50
--->注意:
注意:源头的trail文件名一定要与目的端的trail文件名用不同的名称,比如:
源头的trail文件名/u02/ggs/dirdat/sd
目的端的trail文件名/u02/ggs/dirdat/td
原因是:ogg trail文件的删除机制(检查点机制)是以一整套复制环境(源头和目的端)为标准判断的:
这样就有可能造成这么一个后果:源头的trail文件号到了1000,目的端trail文件号到了100,并且源头和目的端trail文件名同名,由于存在
100,所以,源头能删除的trail文件号是<100的。这样会导致源头trail 不能及时删除,进而造成源头$GG_HOME的文件系统使用率100%,进而造
成ext进程抽取形成的trail文件无处存放而导致ext进程 abend。
2.15 在源端添加传输进程dpfull,此传输进程传输的是源端形成的d:\ggs\dirdat\st这个trail文件
ggsci> add extract dpfull exttrailsource d:\ggs\dirdat\st
2.16 创建远程队列文件(文件名为/u02/ggs/dirdat/tt)并将其指定给传输进程,同样可以指定大小为50M
ggsci> add rmttrail /u02/ggs/dirdat/tt, extract dpfull, MEGABYTES 50
2.17 编辑dpfull进程的参数:
ggsci> edit params dpfull
添加如下参数,之后保存退出
extract dpfull
passthru
rmthost 目的端IP, mgrport 7809
rmttrail /u02/ggs/dirdat/tt
gettruncates
table USER1.*;
table USER2.*;
table USER3.*;
sequence USER1.*;
sequence USER2.*;
sequence USER3.*;

2.18 源端数据库查询出一个scn号:
select current_scn from v$database;
--12754579013479
请牢记这个scn号,在目的端第一次启动rep进程时,会用到这个scn号
源端开始按照此scn号开始导出数据
expdp  sys/****** directory=exp dumpfile=trff_app%U.dmp logfile=trff_app_exp.log schemas=trff_app  parallel=4
flashback_scn=12754579013479

3.在目的端的实施过程:
3.1 配置环境变量信息:
备库是Linux os时:
vi .bash_profile
export PATH=$PATH:$ORACLE_HOME/bin:/u02/ggs
export LD_LIBRARY_PATH=/u02/ggs:$ORACLE_HOME/lib
3.2 创建goldengate系统用户并授权
  Sql> create tablespace GGTBS datafile '/u02/相关路径/ggtbs01.dbf'size 1024M auextend on;
  Sql> Create user Goldengate default tablespace ggtbs identified by oracle;(目标数据库也创建这一个goldengate用户)
  Sql> grant dba to goldengate;
3.3配置mgr参数文件:
ggsci > edit params mgr
port 7809
--autostart replicat *
--autorestart replicat *, waitminutes 1, retries 60, RESETMINUTES 60
--PURGEOLDEXTRACTS /u02/ggs/dirdat/tt*, USECHECKPOINTS, MINKEEPHOURS 2
3.4 在目的端添加checkpointtable
ggsci> dblogin  userid goldengate, password oracleoracle
ggsci> ADD CHECKPOINTTABLE goldengate.ckptfull
ggsci> add replicat repfull, exttrail /u02/ggs/dirdat/tt, CHECKPOINTTABLE goldengate.ckptfull
ggsci> edit params repfull
replicat repfull
setenv ( NLS_LANG =  " AMERICAN_AMERICA.ZHS16GBK " )
assumetargetdefs
userid goldengate, password oracle
DBOPTIONS DEFERREFCONST, SUPPRESSTRIGGERS
gettruncates
ALLOWNOOPUPDATES
ddl include mapped
discardfile ./dirrpt/repfull.dsc, append, megabytes 5000
map USER1.*, target USER1.*;
map USER2.*, target USER2.*;
map USER3.*, target USER3.*;
配置完毕:
注意:以上repfull进程请不要启动,repfull进程在impdp导入完数据之后再启动。
在目的库执行impdp执行数据导入,完成导入后,再执行下面的步骤。
启动目的端rep进程之前, 请务必确认如下的事项已经完成:
第一, 在rep参数文件中有参数DEFERREFCONST禁用级联删除
第二, 在rep参数文件中有参数SUPPRESSTRIGGERS 在rep进程运行时抑制目的端数据库的触发器生效。
注意:SUPPRESSTRIGGERS此参数仅仅对10.2.0.5 及以后,11.2.0.2及以后的oracle 数据库版本才有效,所以,若是目的端数据库是10.2.0.4,还需要在目的端数据库中手工禁用触发器(用plsql dev就可以禁用)
第三, Impdp已经导入完成,这是必须的,这一点我不用再多解释了。
第一次启动repfull进程时,请使用如下的命令来启动:
start repfull, aftercsn 12754579013479


参考资料:
docs.oracle.com
support.oracle.com




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-22218-1-1.html 上篇帖子: 如何利用JDBC启动Oracle 自动追踪(auto trace) 下篇帖子: Oracle中判断字段是否包含中文
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表