参考: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/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_SID=orcl
export 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=11g
SOFTWARE_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=11g
SOFTWARE_LOCATION=/opt/ogg
UNIX_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 ggmgr
Successfully logged intodatabase.
GGSCI (OGGTEST) 3> add trandata scott.dept
Logging 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 mgr
PORT 7839
DYNAMICPORTLIST 7840-7939
--AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
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 配置抽取进程
GGSCI(OGGTEST) 12> add extract e_m157,tranlog,begin now #指定从log抽取,抽取时间是noe
EXTRACTadded.
GGSCI(OGGTEST) 14> add exttrail ./dirdat/em,extract e_m157,megabytes 50 #添加trail文件,
Megabytes:指定队列大小,本处设置表示50M。
- GGSCI(OGGTEST) 14> edit param e_m157
extract
e_m157SETENV(ORACLE_SID="orcl")
SETENV(NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ggmgr, password
ggmgrEXTTRAIL /opt/ogg/dirdat/em
table 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 dpend
SETENV(NLS_LANG = "AMERICAN_AMERICA.UTF8")
USERID ggmgr, PASSWORD ggmgr
PASSTHRU
RMTHOST 10.81.2.108, MGRPORT 7839, compress
RMTTRAIL
/opt/ogg/dirdat/emTABLE Scott.dept
3.7 创建定义文件
3.7.1 创建定义文件参数
[oracle@OGGTEST ogg]$ vi /opt/ogg/dirdef/scott.def.prm
defsfile ./dirdef/scott.def , purge
userid ggmgr,password ggmgr
table 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 mgr
port
7839dynamicportlist 7809-7909
lagreportminutes 10
laginfoseconds 1
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
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.props
gg.handlerlist=hdfs --handler名称
gg.handler.hdfs.type=hdfs --handler的类型
#gg.handler.hdfs.includeTokens=true
gg.handler.hdfs.maxFileSize=1g
gg.handler.hdfs.rootFilePath=/user/oracle/gg --HDFS上的存储目录
gg.handler.hdfs.fileRollInterval=0
gg.handler.hdfs.inactivityRollInterval=0
gg.handler.hdfs.fileSuffix=.txt
gg.handler.hdfs.partitionByTable=true
gg.handler.hdfs.rollOnMetadataChange=true
gg.handler.hdfs.authType=none
gg.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=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=DEBUG --日志级别,可设5个级别,默认为INFO
gg.report.time=30sec
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/*
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.prm
REPLICAT rhdfs --复制进程名
setenv HADOOP_COMMON_LIB_NATIVE_DIR=/opt/cloudera/parcels/CDH/lib/hadoop/lib/native
TARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.props --使用的hdfs handler配置文件
SOURCEDEFS ./dirdef/scott.def --使用定义文件
HANDLECOLLISIONS
reperror default ,discard
discardfile ./dirrpt/r_hive00000.dsc, append, megabytes 50 --错误数据写这里
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 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.properties
client.type = default
hosts = bfht5
hosts.bfht5 = 10.80.2.108:1111
batch-size = 100
connect-timeout = 20000
request-timeout = 20000
编辑 flume.props:
[root@BFHT5 dirprm]# vi flume.props
gg.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 Kb
gg.handler.flumehandler.EventMapsTo=tx
gg.handler.flumehandler.PropagateSchema=true
gg.handler.flumehandler.includeTokens=false
gg.handler.flumehandler.format.fieldDelimiter=,
gg.handler.flumehandler.format.lineDelimiter=;
gg.handler.flumehandler.format.includeColumnNames=true
goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec
gg.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.prm
REPLICAT rflume
TARGETDB LIBFILE libggjava.so SET property=dirprm/flume.props
SOURCEDEFS ./dirdef/scott.def
HANDLECOLLISIONS
ALLOWNOOPUPDATES
discardfile ./dirrpt/r_hive00000.dsc, append, megabytes 50
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10
MAPEXCLUDE 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 #使用scn
3173410 时的trail文件start fscott NOFILTERDUPTRANSACTIONS, aftercsn 3173410 #启动复制进程