797
阿裏雲
OGG MaxCompute插件__數據入雲_數據集成-阿裏雲
Oracle Golden Gate軟件是一種基於日誌的結構化數據複製備份軟件,它通過解析源數據庫在線日誌或歸檔日誌獲得數據的增量變化。本文介紹如何使用OGG將增量變化上傳到ODPS DataHub。
二、環境要求
- 源端已安裝好Oracle以及OGG
- 宿端已安裝好OGG(with java adaptor)
三、配置步驟
(Oracle/OGG相關參數配置以熟悉Oracle/OGG的運維人員配置為準,本示例隻是提供一個可運行的樣本)
- 源端Oracle配置:
# 創建ogg_test用戶,密碼也為ogg_testcreate 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;--- rollbackalter 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# 配置mgredit params mgrPORT 7839DYNAMICPORTLIST 7840-7849USERID ogg_test, PASSWORD ogg_testPURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7LAGREPORTHOURS 1LAGINFOMINUTES 30LAGCRITICALMINUTES 45PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7# 啟動mgr(運行日誌在%YOUR_OGG_DIRECTORY%/dirrpt中)start mgr# 查看mgr狀態info mgr# 查看mgr配置view params mgr# 配置extract(名字可任取,extract是組名)edit params extractEXTRACT extractSETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")DBOPTIONS ALLOWUNUSEDCOLUMNUSERID ogg_test, PASSWORD ogg_testREPORTCOUNT EVERY 1 MINUTES, RATENUMFILES 5000DISCARDFILE ./dirrpt/ext_test.dsc, APPEND, MEGABYTES 100DISCARDROLLOVER AT 2:00WARNLONGTRANS 2h, CHECKINTERVAL 3mEXTTRAIL ./dirdat/st, MEGABYTES 200DYNAMICRESOLUTIONTRANLOGOPTIONS CONVERTUCS2CLOBSTRANLOGOPTIONS RAWDEVICEOFFSET 0DDL &INCLUDE MAPPED OBJTYPE 'table' &INCLUDE MAPPED OBJTYPE 'index' &INCLUDE MAPPED OBJTYPE 'SEQUENCE' &EXCLUDE OPTYPE COMMENTDDLOPTIONS NOCROSSRENAME REPORTTABLE OGG_TEST.*;SEQUENCE OGG_TEST.*;# 增加extract進程(ext後的名字要跟上麵`extract`對應,本例中extract是組名)add ext extract,tranlog,begin now# 添加抽取進程,每個隊列文件大小為200madd exttrail ./dirdat/st,ext extract, megabytes 200# 啟動抽取進程start extract extract至此,extract配置完成,數據庫的一條變更可以在ggate/dirdat目錄下的文件中看到
- 3.源端生成def文件並拷貝到宿端
# 源端ggsci起來後執行如下命令edit params defgenDEFSFILE ./dirdef/ogg_test.defUSERID ogg_test, PASSWORD ogg_testtable OGG_TEST.*;# 生成ogg_test.def,拷貝到宿端相應目錄下./defgen paramfile ./dirprm/defgen.prm
- 4.宿端啟動OGG mgr
# 創建必須目錄create subdirs# 編輯mgr配置edit params mgrPORT 7839DYNAMICPORTLIST 7840-7849PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7LAGREPORTHOURS 1LAGINFOMINUTES 30LAGCRITICALMINUTES 45PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7# 啟動mgrstart mgr
- 5.源端OGG pump配置
# 編輯pump配置edit params pumpEXTRACT pumpRMTHOST %YOUR_REMOTE_OGG_IP%, MGRPORT 7839, COMPRESSPASSTHRUNUMFILES 5000RMTTRAIL ./dirdat/stDYNAMICRESOLUTIONTABLE OGG_TEST.*;SEQUENCE OGG_TEST.*;# 添加投遞進程,從某一個隊列開始投add ext pump,exttrailsource ./dirdat/st# 備注:投遞進程,每個隊文件大小為200madd rmttrail ./dirdat/st,ext pump,megabytes 200# 啟動pumpstart 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 classpathgg.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 namegg.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_idgg.handler.ggdatahub.accessID=%YOUR_ODPS_ACCESS_ID%# Aliyun access_keygg.handler.ggdatahub.accessKey=%YOUR_ODPS_ACCESS_KEY%# ODPS end pointgg.handler.ggdatahub.endPoint=https://service.odps.aliyun.com/api# ODPS datahub end pointgg.handler.ggdatahub.datahubEndPoint=https://dh.odps.aliyun.com# ODPS表shard個數gg.handler.ggdatahub.shardNumber=1# ODPS表hublifecyclegg.handler.ggdatahub.hubLifeCycle=7# 加載shard超時時間gg.handler.ggdatahub.shardTimeout=60# 插件緩存日指條數的最大容量gg.handler.ggdatahub.batchSize=1000# 記錄插件信息的文件路徑,默認是dirdat/%handler_name%_handler_infogg.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# 上傳包的最大重試次數,默認為3gg.handler.ggdatahub.retryCount=3# 最多忽略的失敗操作個數,默認為0gg.handler.ggdatahub.passFailedOperationCount=10# 記錄失敗操作的文件路徑,默認為dirrpt/%handler_name%_bad_operations.loggg.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 dhwriterextract dhwriterCUSEREXIT libggjava_ue.so CUSEREXIT PASSTHRU,INCLUDEUPDATEBEFORES,PARAMS "dirprm/extdatahub.properties"sourcedefs ./dirdef/ogg_test.deftable OGG_TEST.*;# 添加writeradd extract dhwriter, exttrailsource ./dirdat/st# 啟動writerstart 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/serverexport 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-阿裏雲