大家好,又见面了,我是你们的朋友全栈君。
OGG简介(GoldenGate) OGG 是一种基于日志的结构化数据复制软件 OGG 能够实现大量交易数据的实时捕捉,变换和投递,实现源数据库与目标数据库的数据同步,保持最少10ms的数据延迟。
OGG安装
1. 使用Oracle用户,且加入oinstall用户组,GoldenGate安装在Oracle用户所在/home/oracle/app/OGG_linux/ggs目录下。 2. 源端:修改oracle日志模式: 查看日志模式:SQL>select log_mode,supplemental_log_data_min,force_logging from v$database; 修改归档模式: 1)关闭数据库:shutdown immediate; 2)启动数据库实例到mount状态:startup mount; 3)切换数据库日志模式: alter database archivelog;(设置数据库为归档日志模式) alter database noarchivelog;(设置数据库为非归档日志模式) 4)打开数据库:alter database open; 5)确认数据库处于归档模式:archive log list; 打开最小附加日志:alter database add supplemental log data; 打开强制日志:alter database force logging; 3. 创建ogg用户 源端: 1)、/**创建表空间**/ create tablespace goldengate datafile ‘/home/oracle/app/oradata/orcl/goldengate01.dbf’ size 100m autoextend on; 2)、/**OGG专属用户goldengate,必须为goldengate用户指定表空间并分配空间**/ create user goldengate identified by goldengate default tablespace goldengate temporary tablespace temp quota unlimited on goldengate; 3)、/**ogg数据库用户权限,sqlplus下执行**/
代码语言:javascript复制 grant create session to goldengate;
grant alter session,alter system to goldengate;
grant connect,resource to goldengate;
grant select any dictionary,select any table,select any transaction to goldengate;
grant flashback any table to goldengate;
grant insert any table,update any table,drop any table,create table to goldengate;
grant select on dba_clusters to goldengate;
grant select on V_$DATABASE to goldengate;
grant select on sys.logmnr_buildlog to ogg_role;
grant execute on utl_file to goldengate;
grant unlimited tablespace to goldengate;
grant create table,create sequence to goldengate;//否则安装ogg @ddl_setup.sql时会报错
目标端: 1)、/**创建表空间**/ create tablespace ogg datafile ‘/home/oracle/app/oradata/orcl/ogg01.dbf’ size 100m autoextend on; 2)、/**创建OGG专属用户ogg,必须为ogg用户指定表空间并分配空间**/ create user ogg identified by ogg default tablespace ogg temporary tablespace temp quota unlimited on ogg; 3)、授予ogg用户源端goldengate用户相同权限 4. GoldenGate软件安装(源端和目标端) 1)、上传安装文件至任意目录,解压 2)、./runinstall 3)、在ggs目录下新建一个终端:输入 ./ggsci 进入ogg管理控制台,如下图表示安装成功 4)、配置源端和目标端的管理进程: GGSCI(localhost.localdomain 2)>create subdirs 该命令会在ggs安装目录下建立若干子目录,其中几个主要目录说明如下: (1)dirprm:存放GG的参数文件,这些参数文件可以通过文本编辑器直接编辑,也可以在ggsci命令下edit params 文件名来编辑,用于保存启动相关manager、extract、replicat等进程时读取的参数; (2)dirrpt:存放各个进程的报告文件,内容为manager、extract、replicat进程相关的统计报告信息,当进程出现ABENDED挂起或STOPED意外终止时,可以查看相关错误信息; (3)dirchk:存放由extract抽取进程和replicat复制进程创建的checkpoint文件,checkpoint文件保存当前读写时间戳信息,通过这些信息保证了数据的准确性和数据容错性功能; (4)dirpcs:存放各个进程的状态信息; (5)dirdat:存放GG跟踪文件和有extract抽取进程创建的抽取文件,这些文件将被replicat复制进程进一步使用。文件名为人为指定两位字符,加上系统自动生成的六位序列号; (6)dirdef:存放由defgen组件创建的定义文件,包含在异构环境同步中的源或者目标端的数据定义; (7)dirtmp:用于执行大事务处理过程,不要对此文件下的内容进行编辑; (8)dirout:废弃,不再使用。 5)、为新创建的OGG用户goldengate(源端)、ogg(目标端)执行配置脚本: sqlplus / as sysdba SQL>@marker_setup.sql; 提示输入schema name SQL>@ddl_setup.sql; 提示输入schema name SQL>@role_setup.sql; 提示输入schema name;提示为<logged user>授予权限 grant GGS_GGSUSER_ROLE to goldengate;–源端 grant GGS_GGSUSER_ROLE to ogg;–目标端 SQL>@ddl_enable.sql; –启动ddl触发器 6)、测试用户是否创建成功: 源端:GGSCI(localhost.localdomain 3)>dblogin userid goldengate,password goldengate; 目标端:GGSCI(localhost.localdomain 3)>dblogin userid ogg,password ogg; 5. GoldenGate进程配置-manager管理进程配置(源端和目标端) 以oracle用户登录,在goldengate软件安装目录ggs下,执行./ggsci进入ogg管理控制台为manager进程配置参数,可以直接在dirdat目录下新建mgr参数文件。 (1) 通过命令方式: GGSCI(localhost.localdomain 4)>edit param mgr;进行编辑,默认保存在dirdat目录下,文件名为mgr,在打开的编辑窗口中,根据需要输入以下内容:
代码语言:javascript复制 port 7809 --本例中源端port指定7809,目标端指定7839
DYNAMICPORTLIST 7840-7850
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints,minkeepdays 7
MANAGER进程参数说明: port:指定服务监听端口,默认端口7809。 DYNAMICPORTLIST:动态端口列表,最大可指定256个动态端口,当指定port不可用时,管理进程会从列表中选择一个可用的端口。 AUTORESTART:由于网络等原因造成抽取进程中止,每3分钟尝试重启所有extract进程,共尝试5次,建议配置。 PURGEOLDEXTRACTS:自动删除过期队列,凡超过7天且已完成同步的所有./dirdat文件下的文件将被删除,建议配置。 (2) 保存退出 GGSCI(localhost.localdomain 5)>start mgr; GGSCI(localhost.localdomain 6)>info mgr;
表示manager管理进程正常运行了。如果是stop状态可以去dirrpt文件夹下找到相应的MGR.rpt为最近一次启动的状态报告,一般检查参数关键词是否拼写错误。
6. GoldenGate进程配置-extract抽取进程配置(源端) (1) 在源端为要复制的数据表添加附加日志(此处以同步scott用户下两张表数据为例): GGSCI(localhost.localdomain 7)>dblogin userid goldendate,password goldengate; GGSCI(localhost.localdomain 8)>add trandata scott.emp; GGSCI(localhost.localdomain 9)>add trandata scott.dept; (2) 添加抽取进程: GGSCI(localhost.localdomain 10)>add extract extra,tranlog,begin now; 参数说明: extra为添加的extract进程名,tranlog为要抽取数据库的日志,从当前时间开始抽取 (3) 添加到配置队列: GGSCI(localhost.localdomain 11)>add exttrail ./dirdat/ra, extract extra; 参数说明: 将抽取到的trail文件添加到extra进程中。 (4) 编辑extra进程对应的extra.prm参数文件(–后为注释): GGSCI(localhost.localdomain 12)>edit param extra;//会在dirrpm文件下自动生成配置文件
代码语言:javascript复制EXTRACT extra
SETENV (ORACLE_SID="orcl")
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8) --与数据库字符集一致
USERID goldengate,PASSWORD goldengate
REPORT AT 01:59 --定义自动定时报告
REPORTROLLOVER AT 02:00 --防止report文件写满,每天2:00做一次文件过期设定
exttrail ./dirdat/ra --指定写入本地哪个队列
--NUMFILES 3000 --控制OGG给多少张table和map进行初始化内存分配,默认1000
GETTRUNCATES --复制truncate操作
TRANLOGOPTIONS DBLOGREADER
DYNAMICRESOLUTION --动态解析表名
NOCOMPRESSDELETES
WARNLONGTRANS 3H,CHECKINTERVAL 3M --每隔3分钟检查,对于超过2小时的警告
--TABLEEXCLUDE scott.BONUS; --如果在下面table参数中使用了*通配符,此处可以--使用该参数单独指定不需要同步的表
table scott.emp; --必须以;结尾
table scott.dept; --必须以;结尾
(4) 保存退出 GGSCI(localhost.localdomain 13)>start extra; GGSCI(localhost.localdomain 14)>info extra;
表示extract抽取进程正常运行了。如果是stop状态可以去dirrpt文件夹下找到相应的extra.rpt为最近一次启动的状态报告。 datapump投递进程配置 7. GoldenGate进程配置-datapump投递进程配置(源端) pump进程是extract进程的特殊形式,用于异地复制或网络不稳定的环境下,一般先通过extract将数据库增量数据抽取到本地,再单独配一个进程传输到目标端,建议使用。 (1) 添加投递进程: GGSCI(localhost.localdomain 15)>add extract dpea, exttrailsource ./dirdat/ra; (2) 配置远程队列: GGSCI(localhost.localdomain 16)>add rmttrail ./dirdat/ra, extract dpea; 参数说明: 这里的ra是投递到目标端的trail文件名,不是源端的trail文件名。 (3) 编辑dpea进程对应的dpea.prm参数文件(–后为注释): GGSCI(localhost.localdomain 17)>edit param dpea;//会在dirrpm文件下自动生成配置文件
代码语言:javascript复制EXTRACT dpea
SETENV (ORACLE_SID="orcl")
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8) --与数据库字符集一致
REPORT AT 01:59 --定义自动定时报告
REPORTROLLOVER AT 02:00 --防止report文件写满,每天2:00做一次文件过期设定
RMTHOST 192.168.203.134,mgrport 7839 --端口号要与目标端得mgr定义的port对应
RMTTRAIL ./dirdat/ra
GETTRUNCATES --复制truncate操作
TRANLOGOPTIONS DBLOGREADER
DYNAMICRESOLUTION --动态解析表名
NOCOMPRESSDELETES
PASSTHRU --表示本进程是一个投递进程,无需跟数据库交互
table scott.emp;
table scott.dept;
(4) 保存退出 GGSCI(localhost.localdomain 18)>start dpea; GGSCI(localhost.localdomain 19)>info dpea; 表示extract投递进程正常运行了。如果是stop状态可以去dirrpt文件夹下找到相应的dpea.rpt为最近一次启动的状态报告。 以上源端的GoldenGate进程基本配置完成了,如果有什么错误,可以在ggs安装目录下查看ggserror.log日志文件。 8. GoldenGate进程配置-replicat复制进程配置(目标端) (1) 为replicat进程创建checkpoint表: GGSCI(localhost.localdomain 20)>edit param ./GLOBAL; 在参数文件中输入: GGSCHEMA ogg CHECKPOINTTABLE ogg.checkpoint 保存退出。 GGSCI(localhost.localdomain 21)>dblogin userid ogg,password ogg; GGSCI(localhost.localdomain 22)>add checkpointtable ogg.checkpoint; 复制进程需要用到checkpoint表,通过ggsic控制平台下的add checkpointtable命令会自动在ogg用户下创建checkpoint表,用于异常中止的数据恢复。 (2) 添加复制进程: GGSCI(localhost.localdomain 23)>add replicat repa, exttrail ./dirdat/ra,checkpointtable ogg.checkpoint; (3) 投递进程参数配置: 编辑repa进程对应的repa.prm参数文件(–后为注释): GGSCI(localhost.localdomain 24)>edit param repa;//会在dirrpm文件下自动生成配置文件
代码语言:javascript复制REPLICAT repa
SETENV (ORACLE_SID="orcl")
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8) --与数据库字符集一致
REPORT AT 01:59 --定义自动定时报告
REPORTROLLOVER AT 02:00 --防止report文件写满,每天2:00做一次文件过期设定
USERID ogg,PASSWORD ogg
REPERROR DEFAULT,ABEND --出现错误后的处理模式
DISCARDFILE ./dirrpt/repa.dsc,append,megabytes 1024
ASSUMETARGETDEFS
ALLOWNOOPUPDATES
GETTRUNCATES --复制truncate操作
DYNAMICRESOLUTION --动态解析表名
NOCOMPRESSDELETES
MAP scott.emp, TARGET scott.emp; --源表和目标表的映射,target前要有空格
MAP scott.dept, TARGET scott.dept;
(4) 保存退出 GGSCI(localhost.localdomain 25)>start mgr; GGSCI(localhost.localdomain 27)>start repa; GGSCI(localhost.localdomain 28)>info all;
发现源端的manager和replicat进程都启动了,如果是stop或abended状态可以去dirrpt文件夹下找到相应的报告文件查看原因。 9. 验证数据同步 更改源端 scott用户下的dept和emp表中的数据,commit后查看目标端 scott用户下的表,发现数据已同步过来。
同步到Kafka
安装big data for ogg
添加环境变量
export OGG_HOME=/app/ogg export 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:OGG_HOME/lib export PATH=OGG_HOME:
源端配置define文件
Oracle与MySQL,Hadoop集群(HDFS,Hive,kafka等)等之间数据传输可以定义为异构数据类型的传输,故需要定义表之间的关系映射,在OGG命令行执行:
代码语言:javascript复制edit param kafka
defsfile /app/ogg/dirdef/ogg.emp_dept
userid ggs,password ggs
table scott.emp;
table scott.dept;
执行./defgen paramfile dirprm/kafka.prm
然后scp /app/ogg/dirdef/ogg.emp_dept 目标端:/app/ogg/dirdef/ogg.emp_dept
目标端
代码语言:javascript复制目标端复制进程
REPLICAT rekafka
sourcedefs /app/ogg/dirdef/ogg.test_ogg
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10000
MAP scott.emp, TARGET ogg.emp;
MAP scott.dept, TARGET ogg.dept;
vi dirprm/kafka.props
gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties
gg.handler.kafkahandler.topicMappingTemplate=test_ogg
gg.handler.kafkahandler.format=json
gg.handler.kafkahandler.mode=op
gg.classpath=dirprm/:/opt/kafka_2.11-0.11.0.0/libs/*:/app/ogg/:/app/ogg/lib/*
vi dirprm/custom_kafka_producer.properties
bootstrap.servers=hadoop-senior03.zhangbk.com:9092
acks=1
compression.type=gzip
reconnect.backoff.ms=1000
value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
batch.size=102400
linger.ms=10000
add replicat rekafka,exttrail /app/ogg/dirdat/ra,checkpointtable ogg.checkpoint
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/213650.html原文链接:https://javaforall.cn