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下执行**/
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,在打开的编辑窗口中,根据需要输入以下内容:
port 7809 --本例中源端port指定7809,目标端指定7839DYNAMICPORTLIST 7840-7850AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3PURGEOLDEXTRACTS ./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文件下自动生成配置文件
EXTRACT extraSETENV (ORACLE_SID="orcl")SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8) --与数据库字符集一致USERID goldengate,PASSWORD goldengateREPORT AT 01:59 --定义自动定时报告REPORTROLLOVER AT 02:00 --防止report文件写满,每天2:00做一次文件过期设定exttrail ./dirdat/ra --指定写入本地哪个队列--NUMFILES 3000 --控制OGG给多少张table和map进行初始化内存分配,默认1000GETTRUNCATES --复制truncate操作TRANLOGOPTIONS DBLOGREADERDYNAMICRESOLUTION --动态解析表名NOCOMPRESSDELETESWARNLONGTRANS 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文件下自动生成配置文件
EXTRACT dpeaSETENV (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/raGETTRUNCATES --复制truncate操作TRANLOGOPTIONS DBLOGREADERDYNAMICRESOLUTION --动态解析表名NOCOMPRESSDELETESPASSTHRU --表示本进程是一个投递进程,无需跟数据库交互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文件下自动生成配置文件
REPLICAT repaSETENV (ORACLE_SID="orcl")SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8) --与数据库字符集一致REPORT AT 01:59 --定义自动定时报告REPORTROLLOVER AT 02:00 --防止report文件写满,每天2:00做一次文件过期设定USERID ogg,PASSWORD oggREPERROR DEFAULT,ABEND --出现错误后的处理模式DISCARDFILE ./dirrpt/repa.dsc,append,megabytes 1024ASSUMETARGETDEFSALLOWNOOPUPDATESGETTRUNCATES --复制truncate操作DYNAMICRESOLUTION --动态解析表名NOCOMPRESSDELETESMAP 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:$PATH
源端配置define文件
Oracle与MySQL,Hadoop集群(HDFS,Hive,kafka等)等之间数据传输可以定义为异构数据类型的传输,故需要定义表之间的关系映射,在OGG命令行执行:
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
目标端
目标端复制进程
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=10000add replicat rekafka,exttrail /app/ogg/dirdat/ra,checkpointtable ogg.checkpoint