参考: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用户并授权
create user ggmgr identified by ggmgr defaulttablespace DATA_OL;grant connect,resource,unlimited tablespace to ggmgr;- grant execute on utl_file to ggmgr;
grant select any dictionary,select any table to ggmgr;grant alter any table to ggmgr;grant flashback any table to ggmgr;grant execute on DBMS_FLASHBACK to ggmgr;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 开启附件日志
检查补充日志是否开启,检查强制日志模式:
SQL> SELECT supplemental_log_data_min, force_logging FROM v$database;SUPPLEMENTAL_LOG_DATA_MIN FORCE_LOGGING------------------------- -------------YES NO
开始补充日志和强制日志
alter database add supplemental log data(Minimal,all,primary key,unique,foreign key);
为了使用OGG for bigdata,至少要开启primary key级别:
alter database add supplemental log data;ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;ALTER DATABASE FORCE LOGGING;
1.2.3 设置允许OGG复制
该参数从这个参数在11.2.0.4和12.1.0.2以后才出现.
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
三、配置抽取端OGG
3.1 设置环境变量
编辑.bash_profile,加入ORACLE_HOME和ORACLE_SID及LD_LIBRARY_PATH:
export ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1export LD_LIBRARY_PATH=$ORACLE_HOME/libexport ORACLE_SID=orclexport PATH=$PATH:$ORACLE_HOME/bin:$LD_LIBRARY_PATH
或者在抽取进程配置文件中标明:
setenv(NLS_LANG = "AMERICAN_AMERICA.UTF8")SETENV(ORACLE_HOME = "/u01/app/oracle/product/11.2.0.4/dbhome_1")SETENV(ORACLE_SID = "orcl")
3.2 安装OGG
使用OUI安装OGG或下载安装包解压到/u01/ogg.1)用OUI安装OGG用ORACLE用户执行runInstaller即可2)用OUI静默安装在解压目录下找到response/oggcore.rsp,修改:- #如果机器上已经安装了ORACLE,则只添加以下几行即可.如果没有安装ORACLE,请先安装ORACLE或者ORACEL LIENT
INSTALL_OPTION=11gSOFTWARE_LOCATION=/opt/ogg
UNIX_GROUP_NAME=oinstall
然后执行./runInstaller -silent -nowait -responseFile /opt/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp
- #如果机器上已经安装了ORACLE,则只添加以下几行即可.如果没有安装ORACLE,请先安装ORACLE或者ORACEL LIENT
INSTALL_OPTION=11gSOFTWARE_LOCATION=/opt/oggUNIX_GROUP_NAME=oinstall
然后执行
./runInstaller -silent -nowait -responseFile /opt/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp
3.2 创建子目录
进入ogg的解压目录,执行./ggsci进入命令台,执行命令创建工作目录:
GGSCI (OGGTEST) 1> create subdirs
3.3 添加表级别附加日志
GGSCI (OGGTEST) 2>dblogin userid ggmgr,password ggmgrSuccessfully logged intodatabase.GGSCI (OGGTEST) 3> add trandata scott.deptLogging of supplemental redo dataenabled for table SCOTT.DEPT.
如果表没有主键,需要这样:
GGSCI (OGGTEST) 3> add trandata scott.bouns,cols(ename),nokey
cols指定ename做为keycols,nokey表示忽略表上的主键,这样就能用keycols来匹配和过滤
3.4 配置mgr进程
配置管理进程mgr:
GGSCI(OGGTEST) 1> edit param mgrPORT 7839DYNAMICPORTLIST 7840-7939--AUTOSTART ER *AUTORESTART EXTRACT *,RETRIES5,WAITMINUTES 3PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3LAGREPORTHOURS 1LAGINFOMINUTES 30LAGCRITICALMINUTES 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 配置抽取进程
GGSCI(OGGTEST) 12> add extract e_m157,tranlog,begin now #指定从log抽取,抽取时间是noeEXTRACTadded.GGSCI(OGGTEST) 14> add exttrail ./dirdat/em,extract e_m157,megabytes 50 #添加trail文件,Megabytes:指定队列大小,本处设置表示50M。- GGSCI(OGGTEST) 14> edit param e_m157
extracte_m157SETENV(ORACLE_SID="orcl")SETENV(NLS_LANG=AMERICAN_AMERICA.AL32UTF8)userid ggmgr, passwordggmgrEXTTRAIL /opt/ogg/dirdat/emtable ogg_owner.togg;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 配置传输进程
GGSCI(OGGTEST) 2> add extract dpend,exttrailsource ./dirdat/em #添加 传输进程EXTRACT added.GGSCI(OGGTEST) 3> add rmttrail /opt/ogg/dirdat/em, EXTRACT DPEND #添加远程trail文件,即目标机tail文件位置RMTTRAIL added.GGSCI(OGGTEST) 4> edit params dpend #编辑传输进程配置文件EXTRACT dpendSETENV(NLS_LANG = "AMERICAN_AMERICA.UTF8")USERID ggmgr, PASSWORD ggmgrPASSTHRURMTHOST 10.81.2.108, MGRPORT 7839, compressRMTTRAIL/opt/ogg/dirdat/emTABLE Scott.dept
3.7 创建定义文件
3.7.1 创建定义文件参数
[oracle@OGGTEST ogg]$ vi /opt/ogg/dirdef/scott.def.prmdefsfile ./dirdef/scott.def , purgeuserid ggmgr,password ggmgrtable scott.*;
3.7.2 创建定义文件
./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
ggsci>create subdirs
4.1.2 设置环境变量
ggsci>create subdirs
添加环境变量:
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进程参数
GGSCI(OGGTEST) 1> edit param mgrport7839dynamicportlist 7809-7909lagreportminutes 10laginfoseconds 1purgeoldextracts ./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
ggsci>start mgr
4.3 配置HDFS handler
复制/opt/ogg/AdapterExamples/big-data/hdfs下的hdfs.props和rhdfs.prm到/opt/ogg/dirprm下
cp /opt/ogg/AdapterExamples/big-data/hdfs/* /opt/ogg/dirprm
4.3.1 配置hdfs handler
编辑hdfs.props:
[root@BFHT5 ogg]# vi dirprm/hdfs.propsgg.handlerlist=hdfs --handler名称gg.handler.hdfs.type=hdfs --handler的类型#gg.handler.hdfs.includeTokens=truegg.handler.hdfs.maxFileSize=1ggg.handler.hdfs.rootFilePath=/user/oracle/gg --HDFS上的存储目录gg.handler.hdfs.fileRollInterval=0gg.handler.hdfs.inactivityRollInterval=0gg.handler.hdfs.fileSuffix=.txtgg.handler.hdfs.partitionByTable=truegg.handler.hdfs.rollOnMetadataChange=truegg.handler.hdfs.authType=nonegg.handler.hdfs.format=delimitedtext --hdfs文件类型gg.handler.hdfs.format.includeColumnNames=true --包括列名gg.handler.hdfs.format.fieldDelimiter=CDATA[|] --字段分隔符gg.handler.hdfs.mode=tx --工作模式tx 事务 op操作goldengate.userexit.timestamp=utcgoldengate.userexit.writers=javawriterjavawriter.stats.display=TRUEjavawriter.stats.full=TRUEgg.log=log4jgg.log.level=DEBUG --日志级别,可设5个级别,默认为INFOgg.report.time=30secgg.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/*javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar
注意:gg.classpath要包括hdfs的库文件和core-site.xml路径
4.3.2 配置复制进程
编辑hdfs.prm
[root@BFHT5 ogg]# vi dirprm/rhdfs.prmREPLICAT rhdfs --复制进程名setenv HADOOP_COMMON_LIB_NATIVE_DIR=/opt/cloudera/parcels/CDH/lib/hadoop/lib/nativeTARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.props --使用的hdfs handler配置文件SOURCEDEFS ./dirdef/scott.def --使用定义文件HANDLECOLLISIONSreperror default ,discarddiscardfile ./dirrpt/r_hive00000.dsc, append, megabytes 50 --错误数据写这里REPORTCOUNT EVERY 1 MINUTES, RATEGROUPTRANSOPS 10 --组提交MAP scott.*, TARGET scott.*;
4.3.3 添加复制进程
ggsci>ADD REPLICAT rhdfs, EXTTRAIL /opt/ogg/dirdat/em
相关语法:
ADD REPLICAT <group_name>[, INTEGRATED | COORDINATED [MAXTHREADS <number>]]{, SPECIALRUN |, EXTFILE <filename> |, EXTTRAIL <filename>}[, BEGIN {NOW | yyyy-mm-dd:hh:mm[:ss[.cccccc]]} |, EXTSEQNO <seqno>, EXTRBA <rba>][, CHECKPOINTTABLE <owner.table> | NODBCHECKPOINT][, PARAMS <parameter file>][, REPORT <report file>][, DESC "<description>"][, CPU number][, PRI number][, HOMETERM device_name][, PROCESSNAME process_name]
4.3.4 启动复制进程
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
[root@BFHT5 dirprm]# vi custom-flume-rpc.propertiesclient.type = defaulthosts = bfht5hosts.bfht5 = 10.80.2.108:1111batch-size = 100connect-timeout = 20000request-timeout = 20000
编辑 flume.props:
[root@BFHT5 dirprm]# vi flume.propsgg.handlerlist = flumehandler --handler 名称gg.handler.flumehandler.type=flume --handler类型gg.handler.flumehandler.RpcClientPropertiesFile=custom-flume-rpc.properties --指定flume代理的配置文件gg.handler.flumehandler.mode=tx#gg.handler.flumehandler.maxGroupSize=100, 1Mb#gg.handler.flumehandler.minGroupSize=50, 500 Kbgg.handler.flumehandler.EventMapsTo=txgg.handler.flumehandler.PropagateSchema=truegg.handler.flumehandler.includeTokens=falsegg.handler.flumehandler.format.fieldDelimiter=,gg.handler.flumehandler.format.lineDelimiter=;gg.handler.flumehandler.format.includeColumnNames=truegoldengate.userexit.timestamp=utcgoldengate.userexit.writers=javawriterjavawriter.stats.display=TRUEjavawriter.stats.full=TRUEgg.log=log4jgg.log.level=INFOgg.report.time=30secgg.classpath=dirprm/:/opt/cloudera/parcels/CDH/lib/flume-ng/lib/* --要包含flume的库javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar
编辑rflume.prm:
[root@BFHT5 dirprm]# vi rflume.prmREPLICAT rflumeTARGETDB LIBFILE libggjava.so SET property=dirprm/flume.propsSOURCEDEFS ./dirdef/scott.defHANDLECOLLISIONSALLOWNOOPUPDATESdiscardfile ./dirrpt/r_hive00000.dsc, append, megabytes 50REPORTCOUNT EVERY 1 MINUTES, RATEGROUPTRANSOPS 10MAPEXCLUDE uatxdgl.USER_INFO;MAPEXCLUDE uatxdgl.BACKDETAILS_INFO;MAPEXCLUDE UATXDGL.ASSISTINVESTIGATE;MAP scott.dept, TARGET scott.dept;
4.4.2 添加复制进程
ggsci>ADD REPLICAT rflume, EXTTRAIL /opt/ogg/dirdat/em
4.4.3 启动复制
GGSCI>start rflume
五、初始化数据
5.1 停止复制进程
GGSCI>stop rflume
5.2 源库查询当前SCN
SQL> select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------3173410
5.3 sqoop从SCN 3173410开始抽取数据到HDFS
sqoop --import -e 'select * from scott.dept as of scn 3173410' ....
5.4 设置复制端使用的文件和SCN,启动复制
alter replicat fscott,extseqno 2,extrba 0 #使用scn3173410 时的trail文件start fscott NOFILTERDUPTRANSACTIONS, aftercsn 3173410 #启动复制进程