OGG FOR BIGDATA 安装(修正)

Posted 月饼馅饺子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OGG FOR BIGDATA 安装(修正)相关的知识,希望对你有一定的参考价值。

参考:http://docs.oracle.com/goldengate/bd1221/gg-bd/GADBD/toc.htm

一、环境介绍

源:centos6.5 oracl
e 11.20.4   OGG版本:12.2.0.1.1
目标:OGG 版本Version 12.2.0.1

二、配置源端数据库

1.1 创建OGG用户并授权
  1. create user ggmgr identified by ggmgr defaulttablespace DATA_OL;
  2. grant connect,resource,unlimited tablespace to ggmgr;
  3. grant execute on utl_file to ggmgr;
  4. grant select any dictionary,select any table to ggmgr;
  5. grant alter any table to ggmgr;
  6. grant flashback any table to ggmgr;
  7. grant execute on DBMS_FLASHBACK to ggmgr;
  8. GRANT execute on DBMS_CAPTURE_ADM to ggmgr ;

1.2 开启附加日志

1.2.1 日志简介
ORALCE支持三种附加日志:
  • 数据库级别:包括最小(Minimal)、支持所有字段(all)、支持主键(primary key)、支持唯一键(unique)、支持外键(foreign               key)。使用OGG,至要开启最小级别。是用户级别附加日志和表级别附加日志的基础。
  • 用户级别:使用OGG DDL抽取功能时需要开启.
  • 表级别  :必须开启表级别附加日志,除非启用了用户级别附加日志。
1.2.2 开启附件日志
检查补充日志是否开启,检查强制日志模式:
  1. SQL> SELECT supplemental_log_data_min, force_logging FROM v$database;
  2. SUPPLEMENTAL_LOG_DATA_MIN FORCE_LOGGING
  3. ------------------------- -------------
  4. YES NO
开始补充日志和强制日志
alter database add supplemental log data(Minimal,all,primary key,unique,foreign key);
为了使用OGG for bigdata,至少要开启primary key级别:
  1. alter database add supplemental log data;
  2. ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
  3. ALTER DATABASE FORCE LOGGING;
1.2.3 设置允许OGG复制
该参数从这个参数在11.2.0.4和12.1.0.2以后才出现.
  1. ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;

三、配置抽取端OGG

3.1 设置环境变量

    编辑.bash_profile,加入ORACLE_HOME和ORACLE_SID及LD_LIBRARY_PATH:
  1. export ORACLE_BASE=/u01/app/oracle
  2. export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
  3. export LD_LIBRARY_PATH=$ORACLE_HOME/lib
  4. export ORACLE_SID=orcl
  5. export PATH=$PATH:$ORACLE_HOME/bin:$LD_LIBRARY_PATH
或者在抽取进程配置文件中标明:
  1. setenv(NLS_LANG = "AMERICAN_AMERICA.UTF8")
  2. SETENV(ORACLE_HOME = "/u01/app/oracle/product/11.2.0.4/dbhome_1")
  3. SETENV(ORACLE_SID = "orcl")

3.2 安装OGG

    使用OUI安装OGG或下载安装包解压到/u01/ogg.
1)用OUI安装OGG
用ORACLE用户执行runInstaller即可
2)用OUI静默安装
在解压目录下找到response/oggcore.rsp,修改:
  1. #如果机器上已经安装了ORACLE,则只添加以下几行即可.如果没有安装ORACLE,请先安装ORACLE或者ORACEL LIENT
  2. INSTALL_OPTION=11g
  3. SOFTWARE_LOCATION=/opt/ogg
  4. UNIX_GROUP_NAME=oinstall
然后执行
  1. ./runInstaller -silent -nowait -responseFile /opt/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp

3.2 创建子目录

    进入ogg的解压目录,执行./ggsci进入命令台,执行命令创建工作目录:
  1. GGSCI (OGGTEST) 1> create subdirs

3.3 添加表级别附加日志

  1. GGSCI (OGGTEST) 2>dblogin userid ggmgr,password ggmgr
  2. Successfully logged intodatabase.
  3. GGSCI (OGGTEST) 3> add trandata scott.dept
  4. Logging of supplemental redo dataenabled for table SCOTT.DEPT.
如果表没有主键,需要这样:
  1. GGSCI (OGGTEST) 3> add trandata scott.bouns,cols(ename),nokey
cols指定ename做为keycols,nokey表示忽略表上的主键,这样就能用keycols来匹配和过滤

3.4 配置mgr进程

配置管理进程mgr:
  1. GGSCI(OGGTEST) 1> edit param mgr
  2. PORT 7839
  3. DYNAMICPORTLIST 7840-7939
  4. --AUTOSTART ER *
  5. AUTORESTART EXTRACT *,RETRIES5,WAITMINUTES 3
  6. PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
  7. LAGREPORTHOURS 1
  8. LAGINFOMINUTES 30
  9. LAGCRITICALMINUTES 45
MANAGER进程参数配置说明:
PORT:指定服务监听端口;这里以7839为例,默认端口为7809
DYNAMICPORTLIST:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的Collector、Replicat、GGSCI进程通信也会使用这些端口;
COMMENT:注释行,也可以用--来代替;
AUTOSTART:指定在管理进程启动时自动启动哪些进程;
AUTORESTART:自动重启参数设置:本处设置表示每3分钟尝试重新启动所有EXTRACT进程,共尝试5次;
PURGEOLDEXTRACTS:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除。
LAGREPORT、LAGINFO、LAGCRITICAL:
定义数据延迟的预警机制:本处设置表示MGR进程每隔1小时检查EXTRACT的延迟情况,如果超过了30分钟就把延迟作为信息记录到错误日志中,如果延迟超过了45分钟,则把它作为警告写到错误日志中。

启动mgr进程:starg mgr
查看mgr状态:info mgr

3.5 配置抽取进程

  1. GGSCI(OGGTEST) 12> add extract e_m157,tranlog,begin now #指定从log抽取,抽取时间是noe
  2. EXTRACTadded.
  3. GGSCI(OGGTEST) 14> add exttrail ./dirdat/em,extract e_m157,megabytes 50 #添加trail文件,
  4. Megabytes:指定队列大小,本处设置表示50M。
  5. GGSCI(OGGTEST) 14> edit param e_m157

  6. extract e_m157
  7. SETENV(ORACLE_SID="orcl")
  8. SETENV(NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
  9. userid ggmgr, password ggmgr
  10. EXTTRAIL /opt/ogg/dirdat/em
  11. table ogg_owner.togg;
  12. TABLE scott.dept;#可以用scott.*
添加进程时,进程名要注意大小定

相关的语法:
ADD EXTRACT group name 
{, TRANLOG | , INTEGRATED TRANLOG}
{, BEGIN {NOW | yyyy-mm-dd[ hh:mi:[ss[.cccccc]]]} | SCN value} 
[, THREADS n]
TRANLOG:指定把日志做为输入源
INTERRATED TRANLOG:指定把logming server的LCR作为输入源
BEGIN :NOW现在、时间、SCN
TRRADS N:RAC中指定节点
示例:
ADD EXTRACT finance, TRANLOG, BEGIN 2011-01-01 12:00:00.000000

3.6 配置传输进程

  1. GGSCI(OGGTEST) 2> add extract dpend,exttrailsource ./dirdat/em #添加 传输进程
  2. EXTRACT added.
  3. GGSCI(OGGTEST) 3> add rmttrail /opt/ogg/dirdat/em, EXTRACT DPEND #添加远程trail文件,即目标机tail文件位置
  4. RMTTRAIL added.
  5. GGSCI(OGGTEST) 4> edit params dpend #编辑传输进程配置文件

  6. EXTRACT dpend
  7. SETENV(NLS_LANG = "AMERICAN_AMERICA.UTF8")
  8. USERID ggmgr, PASSWORD ggmgr
  9. PASSTHRU
  10. RMTHOST 10.81.2.108, MGRPORT 7839, compress
  11. RMTTRAIL /opt/ogg/dirdat/em
  12. TABLE Scott.dept

3.7 创建定义文件

3.7.1 创建定义文件参数
  1. [[email protected] ogg]$ vi /opt/ogg/dirdef/scott.def.prm
  2. defsfile ./dirdef/scott.def , purge
  3. userid ggmgr,password ggmgr
  4. table scott.*;
3.7.2 创建定义文件
  1. ./defgen PARAMFILE /opt/ogg/dirdef/scott.def.prm
然后把/opt/ogg/dirdef/scott.def这个文件复制到目标机的/opt/ogg/dirdef下


四、配置目标端OGG

4.1 安装ogg for bigdata

4.1.1 安装ogg for bigdata
解压OGG FOR BIGDATA 到/opt/ogg
然后创建工作目录:
./ggsci 
  1. ggsci>create subdirs

4.1.2 设置环境变量
添加环境变量:
  1. export LD_LIBRARY_PATH=/usr/java/jdk1.8.0_60/jre/lib/amd64/server/
路径是JRE中libjvm.so 和libjsig.so 所在的目录.

4.2 配置mgr进程

4.2.1 编辑mgr进程参数
  1. GGSCI(OGGTEST) 1> edit param mgr
  2. port 7839
  3. dynamicportlist 7809-7909
  4. lagreportminutes 10
  5. laginfoseconds 1
  6. purgeoldextracts ./dirdat/*, usecheckpoints, minkeephours 192
配置复制进程
REPLICAT进程参数配置说明:
ASSUMETARGETDEFS:假定两端数据结构一致使用此参数;
SOURCEDEFS:假定两端数据结构不一致,使用此参数指定源端的数据结构定义文件,该文件需要由GlodenGate工具产生。
MAP:用于指定源端与目标端表的映射关系;
MAPEXCLUDE:用于使用在MAP中使用*匹配时排除掉指定的表;
REPERROR:定义出错以后进程的响应,一般可以定义为两种:
ABEND,即一旦出现错误即停止复制,此为缺省配置;
DISCARD,出现错误后继续复制,只是把错误的数据放到discard文件中。
DISCARDFILE:定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;
SQLEXEC:在进程运行时首先运行一个SQL语句;
GROUPTRANSOPS:将小交易合并成一个大的交易进行提交,减少提交次数,降低系统IO消耗。
MAXTRANSOPS:将大交易拆分,每XX条记录提交一次。
4.2.2 启动mgr
  1. ggsci>start mgr

4.3 配置HDFS handler

复制/opt/ogg/AdapterExamples/big-data/hdfs下的hdfs.props和rhdfs.prm到/opt/ogg/dirprm下
  1. cp /opt/ogg/AdapterExamples/big-data/hdfs/* /opt/ogg/dirprm
4.3.1 配置hdfs handler
编辑hdfs.props:
  1. [[email protected] ogg]# vi dirprm/hdfs.props
  2. gg.handlerlist=hdfs --handler名称
  3. gg.handler.hdfs.type=hdfs --handler的类型
  4. #gg.handler.hdfs.includeTokens=true
  5. gg.handler.hdfs.maxFileSize=1g
  6. gg.handler.hdfs.rootFilePath=/user/oracle/gg --HDFS上的存储目录
  7. gg.handler.hdfs.fileRollInterval=0
  8. gg.handler.hdfs.inactivityRollInterval=0
  9. gg.handler.hdfs.fileSuffix=.txt
  10. gg.handler.hdfs.partitionByTable=true
  11. gg.handler.hdfs.rollOnMetadataChange=true
  12. gg.handler.hdfs.authType=none
  13. gg.handler.hdfs.format=delimitedtext --hdfs文件类型
  14. gg.handler.hdfs.format.includeColumnNames=true --包括列名
  15. gg.handler.hdfs.format.fieldDelimiter=CDATA[|] --字段分隔符
  16. gg.handler.hdfs.mode=tx --工作模式tx 事务 op操作
  17. goldengate.userexit.timestamp=utc
  18. goldengate.userexit.writers=javawriter
  19. javawriter.stats.display=TRUE
  20. javawriter.stats.full=TRUE
  21. gg.log=log4j
  22. gg.log.level=DEBUG --日志级别,可设5个级别,默认为INFO
  23. gg.report.time=30sec
  24. gg.classpath=/opt/cloudera/parcels/CDH/lib/hadoop/*:/opt/cloudera/parcels/CDH/lib/hadoop/lib/*:/opt/cloudera/parcels/CDH/lib/hadoop-hdfs/*:/etc/hadoop/conf/:/opt/cloudera/parcels/CDH/lib/hadoop/lib/native/*
  25. javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar
注意:gg.classpath要包括hdfs的库文件和core-site.xml路径

4.3.2 配置复制进程
编辑hdfs.prm
  1. [[email protected] ogg]# vi dirprm/rhdfs.prm
  2. REPLICAT rhdfs --复制进程名
  3. setenv HADOOP_COMMON_LIB_NATIVE_DIR=/opt/cloudera/parcels/CDH/lib/hadoop/lib/native
  4. TARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.props --使用的hdfs handler配置文件
  5. SOURCEDEFS ./dirdef/scott.def --使用定义文件
  6. HANDLECOLLISIONS
  7. reperror default ,discard
  8. discardfile ./dirrpt/r_hive00000.dsc, append, megabytes 50 --错误数据写这里
  9. REPORTCOUNT EVERY 1 MINUTES, RATE
  10. GROUPTRANSOPS 10 --组提交
  11. MAP scott.*, TARGET scott.*;

4.3.3 添加复制进程
  1. ggsci>ADD REPLICAT rhdfs, EXTTRAIL /opt/ogg/dirdat/em
相关语法:
  1. ADD REPLICAT <group_name>
  2. [, INTEGRATED | COORDINATED [MAXTHREADS <number>]]
  3. {
  4. , SPECIALRUN |
  5. , EXTFILE <filename> |
  6. , EXTTRAIL <filename>
  7. }
  8. [, BEGIN {NOW | yyyy-mm-dd:hh:mm[:ss[.cccccc]]} |
  9. , EXTSEQNO <seqno>, EXTRBA <rba>]
  10. [, CHECKPOINTTABLE <owner.table> | NODBCHECKPOINT]
  11. [, PARAMS <parameter file>]
  12. [, REPORT <report file>]
  13. [, DESC "<description>"]
  14. [, CPU number]
  15. [, PRI number]
  16. [, HOMETERM device_name]
  17. [, PROCESSNAME process_name]
4.3.4 启动复制进程
  1. ggsci>start rhdfs
ggserr.log 和 dirrpt/R_HDFS_debug_log4j.log 分别可以看到ogg和hdfs的日志信息

4.3.5 检查抽取情况
    如果日志中没有报错,检查hdfs上相关目录,数据是否抽取过来:
hdfs dfs -ls /user/oracle/gg/scott.dept

4.4 配置 flume handler

4.4.1 配置flume handler 
复制 /opt/ogg/AdapterExamples/big-data/flume下的 custom-flume-rpc.properties  flume.props  rflume.prm 到/opt/ogg/dirprm/下

编辑custom-flume-rpc.properties,改flume代理使用的主机\端口\IP
  1. [[email protected] dirprm]# vi custom-flume-rpc.properties
  2. client.type = default
  3. hosts = bfht5
  4. hosts.bfht5 = 10.80.2.108:1111
  5. batch-size = 100
  6. connect-timeout = 20000
  7. request-timeout = 20000
编辑 flume.props:
  1. [[email protected] dirprm]# vi flume.props
  2. gg.handlerlist = flumehandler --handler 名称
  3. gg.handler.flumehandler.type=flume --handler类型
  4. gg.handler.flumehandler.RpcClientPropertiesFile=custom-flume-rpc.properties --指定flume代理的配置文件
  5. gg.handler.flumehandler.mode=tx
  6. #gg.handler.flumehandler.maxGroupSize=100, 1Mb
  7. #gg.handler.flumehandler.minGroupSize=50, 500 Kb
  8. gg.handler.flumehandler.EventMapsTo=tx
  9. gg.handler.flumehandler.PropagateSchema=true
  10. gg.handler.flumehandler.includeTokens=false
  11. gg.handler.flumehandler.format.fieldDelimiter=,
  12. gg.handler.flumehandler.format.lineDelimiter=;
  13. gg.handler.flumehandler.format.includeColumnNames=true
  14. goldengate.userexit.timestamp=utc
  15. goldengate.userexit.writers=javawriter
  16. javawriter.stats.display=TRUE
  17. javawriter.stats.full=TRUE
  18. gg.log=log4j
  19. gg.log.level=INFO
  20. gg.report.time=30sec
  21. gg.classpath=dirprm/:/opt/cloudera/parcels/CDH/lib/flume-ng/lib/* --要包含flume的库
  22. javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar

编辑rflume.prm:
  1. [[email protected] dirprm]# vi rflume.prm
  2. REPLICAT rflume
  3. TARGETDB LIBFILE libggjava.so SET property=dirprm/flume.props
  4. SOURCEDEFS ./dirdef/scott.def
  5. HANDLECOLLISIONS
  6. ALLOWNOOPUPDATES
  7. discardfile ./dirrpt/r_hive00000.dsc, append, megabytes 50
  8. REPORTCOUNT EVERY 1 MINUTES, RATE
  9. GROUPTRANSOPS 10
  10. MAPEXCLUDE uatxdgl.USER_INFO;
  11. MAPEXCLUDE uatxdgl.BACKDETAILS_INFO;
  12. MAPEXCLUDE UATXDGL.ASSISTINVESTIGATE;
  13. MAP scott.dept, TARGET scott.dept;
4.4.2 添加复制进程
  1. ggsci>ADD REPLICAT rflume, EXTTRAIL /opt/ogg/dirdat/em
4.4.3 启动复制
  1. GGSCI>start rflume

五、初始化数据

5.1 停止复制进程

GGSCI>stop rflume

5.2 源库查询当前SCN

  1. SQL> select dbms_flashback.get_system_change_number from dual;
  2. GET_SYSTEM_CHANGE_NUMBER
  3. ------------------------
  4. 3173410

5.3 sqoop从SCN 3173410开始抽取数据到HDFS

sqoop --import -e ‘select * from scott.dept as of scn 3173410‘ ....

5.4 设置复制端使用的文件和SCN,启动复制

  1. alter replicat fscott,extseqno 2,extrba 0 #使用scn 3173410 时的trail文件
  2. start fscott NOFILTERDUPTRANSACTIONS, aftercsn 3173410 #启动复制进程
















以上是关于OGG FOR BIGDATA 安装(修正)的主要内容,如果未能解决你的问题,请参考以下文章

问题:使用ogg for bigdata实现数据传输到kafka,在做update操做时出现问题

GoldenGate for bigdata 12.3.2.1版本新特性

ogg 12.3 for sqlserver 2016 CDC模式配置

Oracle案例13—— OGG-01163 Oracle GoldenGate Delivery for Oracle, reprpt01.prm

Ogg for Hbase 参数文件中gg.classpath的配置

ERROR   OGG-01161 Bad column index (15) specified for table