797
財經資訊
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-阿裏雲