Oracle GoldenGate(OGG) | 您所在的位置:网站首页 › oracle线程有哪些 › Oracle GoldenGate(OGG) |
1. OGG简介 OGG 是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化(数据量只有日志的四分之一左右) OGG 能够实现大量交易数据的实时捕捉,变换和投递,实现源数据库与目标数据库的数据同步,保持最少10ms的数据延迟。![]() 2. 应用场景 高可用容灾 数据库迁移、升级(支持跨版本、异构数据库、零宕机时间、亚秒级恢复) 实时数据集成(支持异构数据库、多源数据库)![]() 3. 基本原理
![]()
基于日志捕获技术的实时增量数据集成 4. 基本架构 Oracle GoldenGate主要由如下组件组成 组件说明 Manager 不管是源端还是目标端必须并且只能有一个Manager进程,可以启动、关闭、监控其他进程的健康状态,报告错误事件、分配数据存储空间,发布阀值报告等,其作用:1:监控与启动 GoldenGate 的其它进程2:管理 trail 文件及 Reporting Extract Extract 进程运行在数据库源端上,它是Golden Gate的捕获机制,可以配置Extract 进程来做如下工作:1:初始数据装载:对于初始数据装载,Extract 进程直接从源对象中提取数据2:同步变化捕获:保持源数据与其它数据集的同步。初始数据同步完成后,Extract 进程捕获源数据的变化;如DML变化、 DDL变化等 Replicat Replicat 进程是运行在目标端系统的一个进程,负责读取 Extract 进程提取到的数据(变更的事务或 DDL 变化)并应用到目标数据库,就像 Extract 进程一样,也可以配置 Replicat 进程来完成如下工作:1:初始化数据装载:对于初始化数据装载,Replicat 进程应用数据到目标对象或者路由它们到一个高速的 Bulk-load 工具上;2:数据同步,将 Extract 进程捕获到的提交了的事务应用到目标数据库中; Collector Collector 是运行在目标端的一个后台进程,接收从 TCP/IP 网络传输过来的数据库变化,并写到 Trail 文件里 Trails 为了持续地提取与复制数据库变化,GoldenGate 将捕获到的数据变化临时存放在磁盘上的一系列文件中,这些文件就叫做 Trail 文件 Data Pumps Data Pump 是一个配置在源端的辅助的 Extract 机制,Data Pump 是一个可选组件,如果不配置 Data Pump,那么由 Extract 主进程将数据发送到目标端的 Remote Trail 文件中;如果配置了 Data Pump,会由 Data Pump将Extract 主进程写好的本地 Trail 文件通过网络发送到目标端的 Remote Trail 文件中5. 常用的拓扑结构 由此可见,GoldenGate TDM的复制模式非常灵活,用户可以根据自己的需求选择特定的复制方式,并根据系统扩展对复制进行扩展。 6. 支持的环境 源和目标的操作系统和数据库可以进行任意的组合 7. OGG安装部署 注:在Docker环境下,整合Oracle, 主机名IPOGG node1 192.168.88.10 源端 node2 192.168.88.20 目标端 7.1 配置Oracle11gR2数据库 7.1.1 Oracle11gR2打开归档模式
需要切换到oracle用户操作: 1 su - oracle因为配置数据库需要在sqlplus中执行,所以使用sysdba用户登录: 1 sqlplus / as sysdba 验证数据库是否开启自动归档执行归档查询命令: 1 archive log list
Automatic archival是Disabled状态,因为Oracle默认是不开启自动归档的 开启自动归档以DBA的身份连接数据库,执行命令: 1 conn /as sysdba
启动并装载数据库,但没有打开数据文件,该命令常用来修改数据库运行模式或恢复数据库。执行命令: 1 startup mount
执行打开数据库命令: 1 alter database open;执行自动归档命令: 1 alter system archive log start;Automatic archival变成了Enabled状态,表示已经开启自动归档成功 7.1.2 Oracle开启辅助日志和补充日志 验证数据库是否开启辅助日志和补充日志执行SQL语句验证: 1 select force_logging,supplemental_log_data_min from v$database;
开启全列附加日志命令: 1 alter database add supplemental log data (all) columns; 检查数据库是否成功开启辅助日志和补充日志执行SQL语句验证: 1 select force_logging,supplemental_log_data_min from v$database;
vim ~/.bash_profileexport OGG_SRC_HOME=/u01/app/ogg/srcexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib source ~/.bash_profile# 退出oracle用户shell命令:exit 创建src文件夹是用来存放解压后的OGG源端软件 1 mkdir /export/softwares/oracle/ogg/src/解压OGG源端软件到src文件夹下 1 unzip /export/softwares/oracle/ogg/V34339-01.zip -d /export/softwares/oracle/ogg/src/
可以看到/u01/app/ogg/目录下的src属于oracle用户和oinstall组 可以看到/u01/app/ogg/src目录下的所有文件都属于oracle用户和oinstall组 7.2.2 在Oracle中创建OGG相关的用户和表空间创建表空间在磁盘中的物理路径(需要到root用户操作) 12 mkdir -p /u01/app/oracle/oggdata/orcl/chown -R oracle:oinstall /u01/app/oracle/oggdata/orcl进入sqlplus切换到oracle用户: 1 su - oracle登录sqlplus:sqlplus “/as sysdba”创建oggtbs表空间 1 create tablespace oggtbs datafile '/u01/app/oracle/oggdata/orcl/oggtbs.dbf' size 500M autoextend on;
赋予ogg用户dba权限 1 grant dba to ogg;使用oracle用户登录源端OGG的命令行中 123 su – oraclecd $OGG_SRC_HOME./ggsci
oggschema ogg 然后跟使用vi一样,在新窗口中添加oggschema ogg后保存退出编辑 7.3.3 配置管理器MGR进程 进入源端OGG命令行 1 ./ggsci
创建mgr进程: 1 edit param mgrPORT 7809DYNAMICPORTLIST 7810-7909AUTORESTART EXTRACT ,RETRIES 5,WAITMINUTES 3PURGEOLDEXTRACTS ./dirdat/,usecheckpoints, minkeepdays 3 add trandata test_ogg.test_ogginfo trandata test_ogg.test_ogg 配置Extract进程: 1 edit param extkafka新增内容: 1 extract extkafkadynamicresolutionSETENV (ORACLE_SID = “orcl”)SETENV (NLS_LANG = “american_america.AL32UTF8”)userid ogg,password oggexttrail /u01/app/ogg/src/dirdat/totable test_ogg.test_ogg; 添加Extract进程: 1 add extract extkafka,tranlog,begin now将trail文件配置与extract进程绑定: 1 add exttrail /u01/app/ogg/src/dirdat/to,extract extkafka配置Pump进程: 1 edit param pukafka新增内容: extract pukafkapassthrudynamicresolutionuserid ogg,password oggrmthost localhost mgrport 7809rmttrail /u01/app/ogg/tgr/dirdat/totable test_ogg.test_ogg;
将源端trail文件绑定到Extract进程: 1 add extract pukafka,exttrailsource /u01/app/ogg/src/dirdat/to
?注意:该文件用来在异构数据源之间传输时,需明确知道表之间的映射关系,比如:Oracle与MySQL,Hadoop集群(HDFS,Hive,kafka等)等之间数据传输可以定义为异构数据类型的传输,故需要定义表之间的关系映射,在OGG命令行执行: 配置define文件: 1 edit param test_oggdefsfile /u01/app/ogg/src/dirdef/test_ogg.test_ogguserid ogg,password oggtable test_ogg.test_ogg;
因为目标端目录还没有创建,因此发送文件可能会失败,所以执行完目标端配置后发送即可 7.4 配置OGG目标端 7.4.1 解压和安装OGG目标端软件包 创建OGG目标端的目录使用root用户创建: 1 mkdir /u01/app/ogg/tgr 添加OGG目标端的目录到oracle用户的环境变量中从root用户切换到oracle用户: 1 su oracle注意【非常重要】:在这里,需要调整oracle用户的.bash_profile,主要是更新LD_LIBRARY_PATH的值,来确保源端和目标端的ggsci命令都可以正常使用。如果不更新的话,目标端ggsci命令可以使用,但源端的ggsci命令无法使用,会报错./ggsci: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory export OGG_TGR_HOME=/u01/app/ogg/tgrexport LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server:$JAVA_HOME/jre/lib/amd64/libjsig.so:$JAVA_HOME/jre/lib/amd64/server/libjvm.so:$ORACLE_HOME/lib:/usr/lib source ~/.bash_profile #退出oracle用户shell命令:exit 创建tgr文件夹是用来存放解压后的OGG目标端软件 1 mkdir -p /export/softwares/oracle/ogg/tgr/解压OGG目标端软件到tgr文件夹下 1 unzip /export/softwares/oracle/ogg/V971332-01.zip -d /export/softwares/oracle/ogg/tgr/
![]()
切换oracle用户时需要重新加载环境变量: 123 source ~/.bash_profilecd $OGG_TGR_HOME./ggsci
将生成的/u01/app/ogg/src/dirdef/test_ogg.test_ogg发送的目标端ogg目录下的dirdef里: 1 scp -r $OGG_SRC_HOME/dirdef/test_ogg.test_ogg $OGG_TGR_HOME/dirdef/ 7.4.4 安装zookeeper和Kafka 安装ZooKeeper(使用root用户操作)解压: 1 tar -zxf /export/softwares/zookeeper-3.4.14.tar.gz -C /export/services/创建软连接: 1 ln -s /export/services/zookeeper-3.4.14 /export/services/zookeeper创建zoo.cfg: 1 cp /export/services/zookeeper/conf/zoo_sample.cfg /export/services/zookeeper/conf/zoo.cfg配置zoo.cfg: 1 vim /export/services/zookeeper/conf/zoo.cfgtickTime=2000initLimit=10syncLimit=5dataDir=/export/datas/zookeeper/datadataLogDir=/export/datas/zookeeper/logclientPort=2181 创建ZooKeeper的数据路径: 12 mkdir -p /export/datas/zookeeper/datamkdir -p /export/datas/zookeeper/log添加到环境变量: 1 vim /etc/profileexport ZOOKEEPER_HOME=/export/services/zookeeperexport PATH=.: Z O O K E E P E R H O M E / b i n : ZOOKEEPER_HOME/bin: ZOOKEEPERH?OME/bin:JAVA_HOME/bin: J A V A H O M E / j r e / b i n : JAVA_HOME/jre/bin: JAVAH?OME/jre/bin:PATH 1 source /etc/profile启动ZooKeeper: 12 zkServer.sh startzkServer.sh status 安装kafka(使用root用户操作)解压: 1 tar -zxf /export/softwares/kafka_2.11-2.2.0.tgz -C /export/services/创建软连接: 1 ln -s /export/services/kafka_2.11-2.2.0 /export/services/kafka配置server.prperties: 1 vim /export/services/kafka/config/server.propertieslisteners=PLAINTEXT://server01:9092broker.id=0zookeeper.connect=server01:2181 添加环境变量: 1 vim /etc/profile 12 export KAFKA_HOME=/export/services/kafkaexport PATH=.:\$KAFKA_HOME/bin:\$ZOOKEEPER_HOME/bin:\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin:\$PATH 1 source /etc/profile启动Kafka: 1 kafka-server-start.sh -daemon /export/services/kafka/config/server.properties创建主题: 1 kafka-topics.sh --create --zookeeper server01:2181 --replication-factor 1 --partitions 1 --topic test_ogg查看主题: 1 kafka-topics.sh --list --zookeeper server01:2181 7.4.5 配置管理器MRG进程使用oracle用户进入OGG_SRC_HOME目录下切换到oracle用户下: 1 su – oracle打印目标端OGG_TGR_HOME: 1 echo $OGG_TGR_HOME进入OGG_TGR_HOME: 1 cd $OGG_TGR_HOME启动ggsci: 1 ./ggsci配置目标端MRG进程配置MGR进程: 1 edit param mgr新增内容: PORT 7810DYNAMICPORTLIST 7810-7909AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3 新增内容: CHECKPOINTTABLE test_ogg.checkpoint 配置目标端Replicate进程配置replicate进程: 1 edit param rekafkaREPLICAT rekafkasourcedefs /u01/app/ogg/tgr/dirdef/test_ogg.test_oggTARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.propsREPORTCOUNT EVERY 1 MINUTES, RATEGROUPTRANSOPS 10000MAP test_ogg.test_ogg, TARGET test_ogg.test_ogg; 添加trail文件到Replicate进程 1 add replicat rekafka exttrail /u01/app/ogg/tgr/dirdat/to,checkpointtable test_ogg.checkpoint新增内容: gg.handlerlist=kafkahandlergg.handler.kafkahandler.type=kafkagg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.propertiesgg.handler.kafkahandler.topicMappingTemplate=test_ogggg.handler.kafkahandler.format=jsongg.handler.kafkahandler.mode=opgg.classpath=dirprm/:/export/services/kafka/libs/*:/u01/app/ogg/tgr/:/u01/app/ogg/tgr/lib/* 新增内容: 12345678 bootstrap.servers=server01:9092acks=1compression.type=gzipreconnect.backoff.ms=1000value.serializer=org.apache.kafka.common.serialization.ByteArraySerializerkey.serializer=org.apache.kafka.common.serialization.ByteArraySerializerbatch.size=102400linger.ms=10000在目标端,主要做了4个操作,共包括2个进程,分别是MANAGER和REPLICAT。 前提:切换到 oracle 账号且启动了 Oracle注意:要严格按照启动顺序执行: 第一步:启动源端mgr进程 第二步:启动目标端mgr进程 第三步:启动源端extract进程 第四步:启动源端pump进程 第五步:启动目标端replicate进程 启动源端mgr进程 12345678 cd $OGG_SRC_HOME./ggsci#查看所有进程状态:info all#启动MANAGER进程:start mgr#检查所有进程状态:info all#启动MANAGER进程:start mgr#查看所有进程状态:info all
查看所有进程状态: 1 info all启动replicat进程: 1 start rekafka查看所有进程状态: 1 info all![]() ![]()
再查看kafka的test_ogg主题下是否有了数据:
源端错误日志路径 /u01/app/ogg/src/ggserr.log 目标端错误日志路径 /u01/app/ogg/tgr/ggserr.log |
CopyRight 2018-2019 实验室设备网 版权所有 |