首页 / 数据库 / MySQL / Oracle GoldenGate在异种OS上同种DB之间的数据同步
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下。--------------------------------------------------------------------------------Linux-6-64下安装Oracle 12C笔记 http://www.linuxidc.com/Linux/2013-07/86805.htm在CentOS 6.4下安装Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htmOracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htmDebian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htm-------------------------------------------------------------------------------- 实施过程 : 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:ggsdirdatst*, 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:ggsdirdatst 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:ggsdirdatst,是由extfull抽取进程来写这个trail文件,每个trail文件的最大大小为50M ggsci> add exttrail d:ggsdirdatst, 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:ggsdirdatst这个trail文件 ggsci> add extract dpfull exttrailsource d:ggsdirdatst 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/lib3.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更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址
收藏该网址