OGG MaxCompute插件__数据入云_数据集成-阿里云
Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化。本文介绍如何使用OGG将增量变化上传到ODPS DataHub。
二、环境要求
- 源端已安装好Oracle以及OGG
- 宿端已安装好OGG(with java adaptor)
三、配置步骤
(Oracle/OGG相关参数配置以熟悉Oracle/OGG的运维人员配置为准,本示例只是提供一个可运行的样本)
- 源端Oracle配置:
# 创建ogg_test用户,密码也为ogg_test
create user ogg_test identified by ogg_test;
# 给ogg_test赋予充分的权限
grant connect,resource,dba to ogg_test;
# 给用户ogg_test赋予库ogg_test的执行权限
grant execute on ogg_test TO ogg_test;
# 检查附加日志情况
Select SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL from v$database;
# 增加数据库附加日志及回退
alter database add supplemental log data;
alter database add supplemental log data (primary key, unique,foreign key) columns;
--- rollback
alter database drop supplemental log data (primary key, unique,foreign key) columns;
alter database drop supplemental log data;
# 全字段模式,注意:在该模式下的delete操作也只有主键值
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
# 开启数据库强制日志模式
alter database force logging;
# 执行marker_setup.sql 脚本
@marker_setup.sql
# 执行@ddl_setup.sql
@ddl_setup.sql
# 执行role_setup.sql
@role_setup.sql
# 给ogg用户赋权
grant GGS_GGSUSER_ROLE to ogg_test;
# 执行@ddl_enable.sql,开启DDL trigger
@ddl_enable.sql
# 执行优化脚本
@ddl_pin ogg_test
# 安装sequence support
@sequence.sql
#
alter table sys.seq$ add supplemental log data (primary key) columns;
- 2.源端OGG extract配置
# 查看全局情况
info all
# 配置mgr
edit params mgr
PORT 7839
DYNAMICPORTLIST 7840-7849
USERID ogg_test, PASSWORD ogg_test
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
# 启动mgr(运行日志在%YOUR_OGG_DIRECTORY%/dirrpt中)
start mgr
# 查看mgr状态
info mgr
# 查看mgr配置
view params mgr
# 配置extract(名字可任取,extract是组名)
edit params extract
EXTRACT extract
SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
DBOPTIONS ALLOWUNUSEDCOLUMN
USERID ogg_test, PASSWORD ogg_test
REPORTCOUNT EVERY 1 MINUTES, RATE
NUMFILES 5000
DISCARDFILE ./dirrpt/ext_test.dsc, APPEND, MEGABYTES 100
DISCARDROLLOVER AT 2:00
WARNLONGTRANS 2h, CHECKINTERVAL 3m
EXTTRAIL ./dirdat/st, MEGABYTES 200
DYNAMICRESOLUTION
TRANLOGOPTIONS CONVERTUCS2CLOBS
TRANLOGOPTIONS RAWDEVICEOFFSET 0
DDL &
INCLUDE MAPPED OBJTYPE 'table' &
INCLUDE MAPPED OBJTYPE 'index' &
INCLUDE MAPPED OBJTYPE 'SEQUENCE' &
EXCLUDE OPTYPE COMMENT
DDLOPTIONS NOCROSSRENAME REPORT
TABLE OGG_TEST.*;
SEQUENCE OGG_TEST.*;
# 增加extract进程(ext后的名字要跟上面`extract`对应,本例中extract是组名)
add ext extract,tranlog,begin now
# 添加抽取进程,每个队列文件大小为200m
add exttrail ./dirdat/st,ext extract, megabytes 200
# 启动抽取进程
start extract extract
至此,extract配置完成,数据库的一条变更可以在ggate/dirdat目录下的文件中看到
- 3.源端生成def文件并拷贝到宿端
# 源端ggsci起来后执行如下命令
edit params defgen
DEFSFILE ./dirdef/ogg_test.def
USERID ogg_test, PASSWORD ogg_test
table OGG_TEST.*;
# 生成ogg_test.def,拷贝到宿端相应目录下
./defgen paramfile ./dirprm/defgen.prm
- 4.宿端启动OGG mgr
# 创建必须目录
create subdirs
# 编辑mgr配置
edit params mgr
PORT 7839
DYNAMICPORTLIST 7840-7849
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
# 启动mgr
start mgr
- 5.源端OGG pump配置
# 编辑pump配置
edit params pump
EXTRACT pump
RMTHOST %YOUR_REMOTE_OGG_IP%, MGRPORT 7839, COMPRESS
PASSTHRU
NUMFILES 5000
RMTTRAIL ./dirdat/st
DYNAMICRESOLUTION
TABLE OGG_TEST.*;
SEQUENCE OGG_TEST.*;
# 添加投递进程,从某一个队列开始投
add ext pump,exttrailsource ./dirdat/st
# 备注:投递进程,每个队文件大小为200m
add rmttrail ./dirdat/st,ext pump,megabytes 200
# 启动pump
start pump
启动后可以在目标端的dirdat目录下看到过来的trailfile
- 6.宿端安装aliyun-odps-ogg-plugin插件
#从Github克隆项目:
git clone git@github.com:aliyun/aliyun-odps-ogg-plugin.git
#编译并打包:
cd aliyun-odps-ogg-plugin/
./build.sh
编译完成后,插件会在aliyun-odps-ogg-plugin/build_1.0.0/datahub_lib/目录下
- 7.宿端编写插件配置文件dirprm/extdatahub.properties
goldengate.userexit.writers=jvm
# jvm启动参数
jvm.bootoptions=-Djava.class.path=%YOUR_OGG_HOME%/ggjava/ggjava.jar -Xmx512m -Xms32m
# Goldengate classpath
gg.classpath=%YOUR_aliyun-odps-ogg-plugin_DIRECTORY%/build_1.0.0/datahub_lib/*
# 插件名称
gg.handlerlist=ggdatahub
# 插件类型
gg.handler.ggdatahub.type=com.aliyun.odps.ogg.handler.datahub.DatahubHandler
# 报警接口自定义实现,默认实现为使用log4j记录相关日志
#gg.handler.ggdatahub.alarmImplement=com.test.LogAlarm
# ODPS project name
gg.handler.ggdatahub.project=%YOUR_ODPS_PROJECT%
# ODPS table map. ODPS表应在OGG启动前完成创建
gg.handler.ggdatahub.tableMap=ogg_test.test_1/ogg_test1,ogg_test.test_2/ogg_test2
# Aliyun access_id
gg.handler.ggdatahub.accessID=%YOUR_ODPS_ACCESS_ID%
# Aliyun access_key
gg.handler.ggdatahub.accessKey=%YOUR_ODPS_ACCESS_KEY%
# ODPS end point
gg.handler.ggdatahub.endPoint=https://service.odps.aliyun.com/api
# ODPS datahub end point
gg.handler.ggdatahub.datahubEndPoint=https://dh.odps.aliyun.com
# ODPS表shard个数
gg.handler.ggdatahub.shardNumber=1
# ODPS表hublifecycle
gg.handler.ggdatahub.hubLifeCycle=7
# 加载shard超时时间
gg.handler.ggdatahub.shardTimeout=60
# 插件缓存日指条数的最大容量
gg.handler.ggdatahub.batchSize=1000
# 记录插件信息的文件路径,默认是dirdat/%handler_name%_handler_info
gg.handler.ggdatahub.handlerInfoFileName=dirdat/ggdatahub_handler_info
# 指定Oracle字段名和相应的ODPS数据类型
gg.handler.ggdatahub.keyFields=ogg_test.test_1:id/bigint|ogg_test.test_2:id/bigint
# 指定Oracle要监控的字段名和相应的ODPS数据类型,插件会将"字段名_before"和"字段名_after"作为ODPS表字段,存储变化前后的变量值
gg.handler.ggdatahub.focusFields=ogg_test.test_1:name/string|ogg_test.test_2:name/string
# 指定Dateformat用于解析日期字段。如果不存在日期字段可以不配置
gg.handler.ggdatahub.dbDateFormat=yyyy-MM-dd:HH:mm:ss
# ODPS分区字段,逗号分隔
gg.handler.ggdatahub.partitionFields=pt,dt
# ODPS分区值,顺序应与字段顺序一直
# 支持2种方式自定义分区值
# 1. 固定值
# 2. timestamp转义序列(使用transaction的开始时间作为timestamp)
gg.handler.ggdatahub.partitionValues=p1,%y-%m-%d
# 上传包的最大重试次数,默认为3
gg.handler.ggdatahub.retryCount=3
# 最多忽略的失败操作个数,默认为0
gg.handler.ggdatahub.passFailedOperationCount=10
# 记录失败操作的文件路径,默认为dirrpt/%handler_name%_bad_operations.log
gg.handler.ggdatahub.failedOperationFileName=dirrpt/ggdatahub_bad_operations.log
- 8.宿端自动根据Oracle表结构生成ODPS datahub表
cd %YOUR_aliyun-odps-ogg-plugin_DIRECTORY%/datahub_handler/table_tool/
java -jar ogg-odps-table-1.0.0.jar CREATE %YOUR_OGG_DIRECTORY%/dirprm/extdatahub.properties
- 9.宿端启动extract进程从trailfile里抓取增加数据写往ODPS datahub
# 编辑writer配置
edit params dhwriter
extract dhwriter
CUSEREXIT libggjava_ue.so CUSEREXIT PASSTHRU,INCLUDEUPDATEBEFORES,PARAMS "dirprm/extdatahub.properties"
sourcedefs ./dirdef/ogg_test.def
table OGG_TEST.*;
# 添加writer
add extract dhwriter, exttrailsource ./dirdat/st
# 启动writer
start dhwriter
至此,全部配置结束,你在源端库做的DML操作,会在ODPS datahub表里看到对应的流水记录。譬如源端插入一条记录insert into ogg_test.test_2(id,name) values(10,’j’)几分钟后你将会在ODPS datahub表里看到类似如下的记录:
optype | readtime | id | name_before | name_after | pt | dt |
---|---|---|---|---|---|---|
INSERT(5) | 2015-12-22 12:14:35.218 | 10 | NULL | j | p1 | 15-12-22 |
四、常见问题
- 宿端报错 libjsig.so: cannot open shared object file: No such file or directory
设置LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=$JRE_HOME/lib/amd64/server
export shared_libraries_variable=$OGG_HOME:$shared_libraries_variable
- 常见排查
看dirrpt目录下的系统日志,看dirdat下trailfile是否有更新,看extract进程是否running,断点调试 dirprm/extdatahub.properties:jvm.bootoptions=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=5006
五、了解更多
[插件GitHub文档] (https://github.com/aliyun/aliyun-odps-ogg-plugin/wiki)
最后更新:2016-11-24 11:23:47
上一篇:
Fluentd MaxCompute插件__数据入云_数据集成-阿里云
下一篇:
产品介绍__交通行业解决方案_大数据解决方案-阿里云
Pig 开发手册__Hadoop_开发人员指南_E-MapReduce-阿里云
计费案例__购买指南_对象存储 OSS-阿里云
发起实例诊断__实例诊断_性能管理_用户指南(RDBMS)_数据管理-阿里云
云服务器 ECS FTP上传经常中断
MSSQL2008导入数据教程__数据库_使用指南_云虚机主机-阿里云
规格报价__公众趋势分析-阿里云
下载__Java SDK_SDK使用手册_消息服务-阿里云
配置自动快照随磁盘释放__快照_用户指南_云服务器 ECS-阿里云
设置解析记录时提示冲突的原因__网站解析_产品使用问题_云解析-阿里云
分隔符日志__常见日志格式_用户指南_日志服务-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云