ORACLE GOLDENGATE安装配置手册

ORACLE GOLDENGATE安装使用手册


1 总体说明

1.1 环境配置

源端ORACLE
HPUXB.11.31
ORACLE11.2.0.3.0
JAVA1.8.0
OGG12.3.0.1 for oracle
目标端异构目标端
LINUXRedhat 6.7
JAVA1.8.0
OGG12.3.0.1 for bigdata
HADOOP2.6.0
SPARK1.6.3
KAFKA2.11-0.11.0.0
目标端同构目标端ORACLE
LINUXRedhat 6.7
ORACLE12.2.0.1
JAVA1.8.0
OGGOGG-12.3.0.1 for oracle

  目标端支持同构ORACLE目标端或者异构目标端,根据不同的目标端类型,选择对应的配置和中间件。
 本文中使用的异构目标端为某大数据搜索引擎,目标端配置也与之对应。

1.2 实施前准备

1.2.1 异构环境

Hadoop安装。
某大数据检索引擎安装。
kafka安装(单机即可),新建一个topic,名字叫 oggtopic(使用默认参数即可)。

1.2.2 ORACLE环境

Oracle安装(建议11.2.0.4版本以上)

2 OGG安装

2.1 需要sysdba设置数据库

  1. 开启数据库归档模式
SQL>alter database archivelog;       `
  1. 开启数据库force logging
SQL>alter database force logging;         
  1. 开启数据库补全日志
SQL>alter database add supplemental log data (all) columns;  
  1. 设置数据库goldengate参数
SQL>alter system set enable_goldengate_replication=true scope=both;  
  1. 设置数据库undo_retention和undo空间大小(防止快照过旧,具体视情况定
SQL>alter system set undo_retention=1800 scope=both;     
  1. 创建OGG运行管理用户(不启用DDL功能)
SQL>create tablespace DT_OGG datafile ‘…’ size 3G reuse autoextend on;   
SQL>create user ggs identified by ggs default tablespace DT_OGG; 
--datafile 填入指定路径的文件
--tablespace和user 可自定义名称,注意前后保持一致
  1. OGG用户授予以下权限:
grant create session to ggs;                                              
grant connect,resource,unlimited tablespace to ggs;                     
grant select any dictionary to ggs;                                       
grant select any table to ggs;                                            
grant select on sys.logmnr_buildlog to ggs;	 
grant execute on dbms_logmnr_d to ggs;	 
grant execute on dbms_flashback to ggs;	 
grant execute on utl_file to ggs;  	 
grant flashback any table to ggs;	 
grant alter any table to ggs;	 
exec dbms_goldengate_auth.grant_admin_privilege(grantee => ggs,grant_select_privileges=>true);

2.2 安装OGG

  1. 设置环境变量
su - oracle
vim ~/.bash_profile

export ORACLE_HOME=/oracle/ora12c/db
export ORACLE_SID=ora11g
export JAVA_HOME=/home/oracle/jdk1.8.0_144
export GG_HOME=/opt/ogg12/ogg			    ##ogg安装目录
export PATH=$JAVA_HOME/bin:$ORACLE_HOME/bin:$GG_HOME:$PATH
export LD_LIBRARY_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib/amd64/server:
$ORACLE_HOME/lib:$GG_HOME:$LD_LIBRARY_PATH
##依实际情况填入对应环境变量值
  1. 解压安装
  • 1.解压

环境中选择解压目录/opt/ogg12/

建议硬盘空间30G以上
目录属组 oracle:oinstall

在安装目录下解压ogg安装包123012_fbo_ggs_Linux_x64_shiphome.zip

  • 2.执行安装

切换oracle用户

su - oracle 
cd /opt/ogg12/fbo_ggs_Linux_x64_shiphome/Disk1
# 执行安装脚本:./runInstall,进入图形化界面安装。
# 若无图形化安装界面,则使用静默安装(常用)
cd /opt/ogg12/fbo_ggs_Linux_x64_shiphome/Disk1/response 
配置oggcore.rsp
INSTALL_OPTION=ORA12c               # oracle版本
SOFTWARE_LOCATION=/opt/ogg12/ogg	  # ogg安装目录(和环境变量配置对应)
START_MANAGER=true                  # 是否配置完成后启动mgr进程
MANAGER_PORT=7809                   # mgr启动端口号
DATABASE_LOCATION=/oracle/ora12c/db           # $ORACLE_HOME
INVENTORY_LOCATION=/oracle/oraInventory 		 # INVENTORY目录位置
UNIX_GROUP_NAME=oinstall           # 指定一个组
  • 3.配置完成执行以下命令开始安装
su - oracle
cd /opt/ogg12/fbo_ggs_Linux_x64_shiphome/Disk1
./runInstaller –silent –responseFile /opt/ogg12/fbo_ggs_Linux_x64_        
shiphome/Disk1/response/oggcore.rsp          

安装完成后页面输出:

The installtion of Oracle GoldenGate Core was successful.
Please check ‘/oracle/oraInventory/logs/silentinstall….log’ for more details.
Successfully setup software. 安装成功。

  • 4.进入ogg安装目录执行
./ggsci	
GGSCI> create subdirs				# 创建子目录

至此goldengate静默安装完成。



3 ogg配置

源端和目标端配置文件均在ogg安装目录/ogg/dirprm/目录下。

配置参数详细说明见 OGG配置文件参数详解

配置文件名可以自定义,启动进程时显式指定对应的配置文件。

3.1 源端配置

Manager管理进程:

  • mgr.prm
PORT 7809
AUTORESTART ER *,RETRIES 3,WAITMINUTES 5,RESETMINUTES 60
purgeoldextracts /opt/ogg12/ogg/dirdat/*,usecheckpoints,minkeepdays 4

Extract抽取进程:

  • ext1.prm
extract ext1                          --进程名
userid ggs, password ggs              --ogg管理用户
TRANLOGOPTIONS DBLOGREADER,DBLOGREADERBUFSIZE 2597152
TABLEEXCLUDE *.DBMS_TABCOMP_TEMP*
FETCHOPTIONS FETCHPKUPDATECOLS
NOCOMPRESSDELETES
exttrail ./dirdat/aa, format release 11.2     --抽取进程生成的trail文件名
table APP.APPROVE;                   		  --需同步的表名
table APP.DUTYSIMPLE;
table APP.DUTYSIMPLEHUMAN;
... 										  --以实际情况填入

Extract投递进程:

  • dmp149.prm
extract dmp149             --进程名,异构端或oracle端需要分别配置投递进程
userid ggs, password ggs
rmthost 10.0.0.149, mgrport 7809            --目标端ip
rmttrail ./dirdat/cc, format release 11.2     --在目标端生成的trail文件名
table APP.APPROVE;
table APP.DUTYSIMPLE;
table APP.DUTYSIMPLEHUMAN;
...

Defgen 表结构定义文件:
用于异构目标端

  • defgen.prm
defsfile /home/oracle/fhcx.def format release 11.2
userid ggs, password ggs
table APP.APPROVE;
table APP.DUTYSIMPLE;
table APP.DUTYSIMPLEHUMAN;
...

Init 初始化数据进程:
用于在同步增量数据之前初始化全量数据,同构目标端oracle

  • sinit.prm
extract sinit                              	--进程名
userid fhcxad,password fhcxadmin			--目标端具有dba权限的用户
rmthost 10.0.0.141,mgrport 7809        		--目标端ip
rmttask replicat,group dinit              	--目标端复制进程 dinit
--table CX.OGG_XZW_1121;               	
--table APP.FILE; 
--需初始化的表,表初始化只能执行一次,已经初始化过的表可用‘--’注释掉
table APP.FILEHUMAN;               
table APP.VIOLATION;
...

3.2 目标端配置(异构)

Manager管理进程:

  • mgr.prm
PORT 7809
AUTORESTART ER *,RETRIES 3,WAITMINUTES 5,RESETMINUTES 60
purgeoldextracts /opt/ogg/dirdat/*,usecheckpoints,minkeepdays 4

Repilcat复制进程: 发往kafka

  • ogg2kk.prm
REPLICAT ogg2kk              --复制进程名
SOURCEDEFS /home/oracle/fhcx.def      --异构目标端使用源端生成的表定义文件
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props 
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10
MAXTRANSOPS 10
MAP app.*, TARGET da.*;     --表映射关系
MAP cx.*, TARGET da.*; 
... 

Kafka 配置:

  • custom_kafka_producer.properties
bootstrap.servers=10.0.0.149:9092               --kafka节点ip
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
#100KB per partition
batch.size=102400
linger.ms=10000

  • kafka.props
修改以下参数,其他使用默认
gg.handler.kafkahandler.KafkaProducerConfigFile=
custom_kafka_producer.properties              
gg.handler.kafkahandler.TopicName =oggtopic            --topic 名称
gg.classpath=dirprm/:/opt/software/rtp_kafka/kafka_2.10-0.10.1.0/libs/*
--填入kafka libs路径

3.3 目标端配置(oracle)

Manager管理进程:

  • mgr.prm
PORT 7809
userid ggs,password ggs
AUTORESTART ER *,RETRIES 3,WAITMINUTES 5,RESETMINUTES 60
purgeoldextracts /opt/ogg12/ogg/dirdat/*,usecheckpoints,minkeepdays 7
ACCESSRULE,PROG *,IPADDR 10.4.3.98,ALLOW    --源端ip
--用于初始化数据时,允许源端sini进程调起目标端的dinit进程

Replicat 复制进程:

  • rep1.prm
replicat rep1
userid ggs,password ggs
--SOURCEDEFS /home/oracle/fhcx.def
ASSUMETARGETDEFS                       --同构数据库使用此参数,不需要定义文件
ALLOWNOOPUPDATES
HANDLECOLLISIONS
REPORTCOUNT EVERY 1 MINUTES, RATE
DISCARDFILE ./dirrpt/rep1.desc,append,megabytes 1024
REPLACEBADCHAR SKIP NOWARNING
GROUPTRANSOPS 10
MAXTRANSOPS 10
MAP app.*, TARGET hh.*;
MAP cx.*, TARGET hh.*;

Init 初始化数据进程:

  • dinit.prm
replicat dinit
assumetargetdefs
userid ggs,password ggs
discardfile ./dirrpt/dinit.desc,purge
map CX.*,target hh.*;
map APP.*,target hh.*;

4 数据同步

确认源端和目标端端的ogg都已经安装配置完成。

su - oracle			#切换到ogg安装目录执行 
./ggsci
GGSCI> start mgr	#开启源端和目标端的mgr进程

4.1 源端

  1. 生成表定义文件
su – oracle
#切换到ogg安装目录 ogg/ 执行以下命令生成表定义文件

./defgen paramfile ./dirprm/defgen.prm                                   

#执行完生成/home/oracle/fhcx.def复制至异构目标端的 /home/oracle/ 目录下。若异构目标端无此目录则创建,属组oracle:oinstall

  1. 添加进程
#在ogg安装目录执行 
./ggsci

#添加extract抽取进程
GGSCI> add extract ext1, tranlog, begin now
GGSCI> add exttrail ./dirdat/aa, extract ext1, megabytes 100

#添加datadump投递进程
GGSCI> add extract dmp1, exttrailsource ./dirdat/aa begin now
GGSCI> add rmttrail ./dirdat/cc, extract dmp1, megabytes 100

#启动进程
GGSCI> start ext1
GGSCI> start dmp1
	
#若进程成功开启,目标端的ogg/dirdat/下有cc开头的文件生成

4.2 目标端(异构端)

  1. 异构端建表:在异构端数据库创建需要同步的表

  2. 初始化数据:

需要同步的表在指定scn的情况下初始化全量数据至异构端数据库;

初始化全量数据需在增量trail文件ogg/dirdat/cc 已经生成后操作,以此保证数据不丢失。

  1. 添加进程
su - oracle
#切换到ogg安装目录执行 
./ggsci

#添加replicat复制进程
GGSCI> add replicat ogg2kk, exttrail ./dirdat/cc, begin now
GGSCI> alter replicat ogg2kk,EXTSEQNO 0,EXTRBA 0
GGSCI> start ogg2kk

#若复制进程启动成功,则将trail文件解析发送到kafka
  1. 生成增量数据文件

编写代码消费kafka中的数据,此处使用java代码生成jar包‘ogg2kk.jar’消费kafka消息数据,写成数据文件。

将ogg2kk.jar的目录放在/home/oracle目录下

nohup java -jar ./ogg2kk.jar 10.0.0.149:9092 /home/oracle/o2kbcp/ 5 >> ./ogg2kafka.log 2>&1 &

kafka_host:	kafka机器ip
port:       kafka端口
bcp_dir:    bcp存放目录
dura:       bcp生成周期(分钟) 

4.3 目标端(oracle)

  1. 目标端oracle建表:表结构要和源端完全一致(字段、主键、索引)

  2. 初始化数据
    1)使用ogg进程init初始化数据
    分别配置好源端的sinit和目标端的sinit进程
    在源端进入ogg命令行:
    GGSCI> start extract sinit
    开始初始化数据。

    2)使用数据导入导出工具初始化数据
    对于大数据量的表,sinit在初始化过程中会出现‘snap shot too old’的错误,
    而且速率很慢,可用数据导入导出工具来初始化数据。

  3. 添加复制进程

#在目标端进入ogg命令行:
	
GGSCI> add replicat rep1, exttrail ./dirdat/cc, nodbcheckpoint
GGSCI> start rep1
#启动成功则直接将增量数据作用至目标端oracle表。

5 ogg常用命令

  1. 使用oracle用户登入ogg命令行: ./ggsci

  2. 启动进程:start 进程名
    启动所有进程:start er *

  3. 查看所有进程状态:info all
    查看某个进程详细信息:info extract|replicat 进程名
    查看某个进程关于checkpoint的详细信息:info 进程名,showch
    查看进程延时:lag 进程名
    查看进程运行报告:view report 进程名

  4. 停止进程:stop 进程名
    停止所有进程:stop er *

  5. 查看进程参数配置:view param 进程名
    修改进程参数配置:edit param 进程名

  6. 查看长交易
    Send extract 进程名,showtrans [thread n] [count n]
    –thread n 可选,查看其中一个节点上未提交的交易
    –count n 可选,显示n条记录
    Current_checkpoint和recovery_checkpoint不一致,说明存在长事务

  7. 指定scn启动抽取进程
    alter extract ext1,scn 15984721692176

    指定队列号和rba位置启动投递进程
    alter extract dmp1,EXTSEQNO 15595,extrba 0

    指定队列号和rba位置启动复制进程
    alter replicat ogg2kk,EXTSEQNO 225,extrba 0

  8. 追踪进程
    –将进程运行情况输出至指定文件
    send replicat rep1 trace /opt/ogg12/ogg/dirtmp/trace_rep1.log
    –关闭追踪
    send replicat rep1 trace off

6 报错汇总

Ogg安装配置及同步测试流程报错信息请参考《ogg报错汇总》。

7 常用性能调优

问题1. 目标端replicat进程优化
观察到oracle目标端复制进程rep1延迟达100多小时,且lag at chkpt不断增加。

1.查看进程状态和日志 ./dirrpt/rep1.rpt
该进程运行状态正常,但处理速率很慢,仅平均每分钟10条record

2.目标库查询ggs执行的sql及长事务
有张表正在执行长事务,执行时间达3个多小时

3.检查目标端同步表是否有主键或者唯一索引
对于ogg,将trail中的数据应用到目标端实际上是将它们构造成的sql语句早目标端执行,特别是当源端对某张表进行大数据量的批量删除时,在目标端会自动分拆一笔一笔执行删除。
1)对目标端的表建立主键或者唯一索引
2)检查sql执行计划是否合理,可重新analyze表收集统计信息
3)在rep1进程的参数文件中添加参数
GROUPTRANSOPS 1000 --将小交易合成一个大交易提交,降低IO消耗
MAXTRANSOPS 1000 --将大交易拆分提交

4.拆分进程
Ogg的extract进程读取日志,提取有用的信息做一个简单的转换传送到目标端,目标端复制进程需要将trail数据转化成sql作用到数据库,当数据变化较大时可能无法跟上队列的产生速度也会产生lag,可拆分replicat来实现并行复制以适应负载。
1)可根据schema进行拆分,一条复制链路负责一个或多个schema
可根据表进行拆分,每个进程负责一部分表
对于一张表可通过ogg带有的range进行拆分
2)本次将长事务的表拆分出来到另一条复制链路

<1>
GGSCI>info rep1,showch --记录复制进程的extseqno和extrba
GGSCI>stop rep1 --关停复制进程
<2>
复制rep1.prm配置文件为rep2.prm,修改以下参数:
replicat rep2 --进程名
DISCARDFILE ./dirrpt/rep3.desc --告警日志
MAP schema.tablename,TARGET schema.tablename; --拆分的表
修改原rep1.prm配置,添加以下
MAPEXCLUDE schema.tablename --将拆分出去的表在此进程中排除
添加在map语句之前
<3>
添加新进程,读取的trail文件和rep1相同
GGSCI> add replicat rep2, exttrail ./dirdat/cc, nodbcheckpoint
指定进程读取的chkpt,开启进程
GGSCI> alter replicat rep2,extseqno xxx,extrba xxx
GGSCI> start rep2
GGSCI> alter replicat rep1,extseqno xxx,extrba xxx
GGSCI> start rep1

5.通过在replicat使用batchsql来把相同的语句作为一批处理,而不是像普通的处理方式,每行语句单独提交。
对于经常大批量更新,使用batchsql可以大幅度提高性能。但是要注意如果应用程序中有lob字段,或是经常有只更新少量的行,这样使用batchsql没有益能好处,反而使replicat在normal和batch mode之前来回switch,而会影响性能。
对于有些不满足batchsql的条件,replicat会进行重试三次,在这样的情况下,性能下降的情况更加明显。
batchsql 两个主要的参数,定义了多少条语句作为一个语句提交
batchsql opsperqueue 30000, opsperbatch 30000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值