閱讀797 返回首頁    go 財經資訊


OGG MaxCompute插件__數據入雲_數據集成-阿裏雲

Oracle Golden Gate軟件是一種基於日誌的結構化數據複製備份軟件,它通過解析源數據庫在線日誌或歸檔日誌獲得數據的增量變化。本文介紹如何使用OGG將增量變化上傳到ODPS DataHub

二、環境要求

  • 源端已安裝好Oracle以及OGG
  • 宿端已安裝好OGG(with java adaptor)

三、配置步驟

(Oracle/OGG相關參數配置以熟悉Oracle/OGG的運維人員配置為準,本示例隻是提供一個可運行的樣本)

    1. 源端Oracle配置:
  1. # 創建ogg_test用戶,密碼也為ogg_test
  2. create user ogg_test identified by ogg_test;
  3. # 給ogg_test賦予充分的權限
  4. grant connect,resource,dba to ogg_test;
  5. # 給用戶ogg_test賦予庫ogg_test的執行權限
  6. grant execute on ogg_test TO ogg_test;
  7. # 檢查附加日誌情況
  8. Select SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL from v$database;
  9. # 增加數據庫附加日誌及回退
  10. alter database add supplemental log data;
  11. alter database add supplemental log data (primary key, unique,foreign key) columns;
  12. --- rollback
  13. alter database drop supplemental log data (primary key, unique,foreign key) columns;
  14. alter database drop supplemental log data;
  15. # 全字段模式,注意:在該模式下的delete操作也隻有主鍵值
  16. ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  17. # 開啟數據庫強製日誌模式
  18. alter database force logging;
  19. # 執行marker_setup.sql 腳本
  20. @marker_setup.sql
  21. # 執行@ddl_setup.sql
  22. @ddl_setup.sql
  23. # 執行role_setup.sql
  24. @role_setup.sql
  25. # 給ogg用戶賦權
  26. grant GGS_GGSUSER_ROLE to ogg_test;
  27. # 執行@ddl_enable.sql,開啟DDL trigger
  28. @ddl_enable.sql
  29. # 執行優化腳本
  30. @ddl_pin ogg_test
  31. # 安裝sequence support
  32. @sequence.sql
  33. #
  34. alter table sys.seq$ add supplemental log data (primary key) columns;
  • 2.源端OGG extract配置
  1. # 查看全局情況
  2. info all
  3. # 配置mgr
  4. edit params mgr
  5. PORT 7839
  6. DYNAMICPORTLIST 7840-7849
  7. USERID ogg_test, PASSWORD ogg_test
  8. PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
  9. LAGREPORTHOURS 1
  10. LAGINFOMINUTES 30
  11. LAGCRITICALMINUTES 45
  12. PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
  13. PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
  14. # 啟動mgr(運行日誌在%YOUR_OGG_DIRECTORY%/dirrpt中)
  15. start mgr
  16. # 查看mgr狀態
  17. info mgr
  18. # 查看mgr配置
  19. view params mgr
  20. # 配置extract(名字可任取,extract是組名)
  21. edit params extract
  22. EXTRACT extract
  23. SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
  24. DBOPTIONS ALLOWUNUSEDCOLUMN
  25. USERID ogg_test, PASSWORD ogg_test
  26. REPORTCOUNT EVERY 1 MINUTES, RATE
  27. NUMFILES 5000
  28. DISCARDFILE ./dirrpt/ext_test.dsc, APPEND, MEGABYTES 100
  29. DISCARDROLLOVER AT 2:00
  30. WARNLONGTRANS 2h, CHECKINTERVAL 3m
  31. EXTTRAIL ./dirdat/st, MEGABYTES 200
  32. DYNAMICRESOLUTION
  33. TRANLOGOPTIONS CONVERTUCS2CLOBS
  34. TRANLOGOPTIONS RAWDEVICEOFFSET 0
  35. DDL &
  36. INCLUDE MAPPED OBJTYPE 'table' &
  37. INCLUDE MAPPED OBJTYPE 'index' &
  38. INCLUDE MAPPED OBJTYPE 'SEQUENCE' &
  39. EXCLUDE OPTYPE COMMENT
  40. DDLOPTIONS NOCROSSRENAME REPORT
  41. TABLE OGG_TEST.*;
  42. SEQUENCE OGG_TEST.*;
  43. # 增加extract進程(ext後的名字要跟上麵`extract`對應,本例中extract是組名)
  44. add ext extract,tranlog,begin now
  45. # 添加抽取進程,每個隊列文件大小為200m
  46. add exttrail ./dirdat/st,ext extract, megabytes 200
  47. # 啟動抽取進程
  48. start extract extract
  49. 至此,extract配置完成,數據庫的一條變更可以在ggate/dirdat目錄下的文件中看到
  • 3.源端生成def文件並拷貝到宿端
  1. # 源端ggsci起來後執行如下命令
  2. edit params defgen
  3. DEFSFILE ./dirdef/ogg_test.def
  4. USERID ogg_test, PASSWORD ogg_test
  5. table OGG_TEST.*;
  6. # 生成ogg_test.def,拷貝到宿端相應目錄下
  7. ./defgen paramfile ./dirprm/defgen.prm
  • 4.宿端啟動OGG mgr
  1. # 創建必須目錄
  2. create subdirs
  3. # 編輯mgr配置
  4. edit params mgr
  5. PORT 7839
  6. DYNAMICPORTLIST 7840-7849
  7. PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
  8. LAGREPORTHOURS 1
  9. LAGINFOMINUTES 30
  10. LAGCRITICALMINUTES 45
  11. PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
  12. PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
  13. # 啟動mgr
  14. start mgr
  • 5.源端OGG pump配置
  1. # 編輯pump配置
  2. edit params pump
  3. EXTRACT pump
  4. RMTHOST %YOUR_REMOTE_OGG_IP%, MGRPORT 7839, COMPRESS
  5. PASSTHRU
  6. NUMFILES 5000
  7. RMTTRAIL ./dirdat/st
  8. DYNAMICRESOLUTION
  9. TABLE OGG_TEST.*;
  10. SEQUENCE OGG_TEST.*;
  11. # 添加投遞進程,從某一個隊列開始投
  12. add ext pump,exttrailsource ./dirdat/st
  13. # 備注:投遞進程,每個隊文件大小為200m
  14. add rmttrail ./dirdat/st,ext pump,megabytes 200
  15. # 啟動pump
  16. start pump
  17. 啟動後可以在目標端的dirdat目錄下看到過來的trailfile
  • 6.宿端安裝aliyun-odps-ogg-plugin插件
  1. #從Github克隆項目:
  2. git clone git@github.com:aliyun/aliyun-odps-ogg-plugin.git
  3. #編譯並打包:
  4. cd aliyun-odps-ogg-plugin/
  5. ./build.sh
  6. 編譯完成後,插件會在aliyun-odps-ogg-plugin/build_1.0.0/datahub_lib/目錄下
  • 7.宿端編寫插件配置文件dirprm/extdatahub.properties
  1. goldengate.userexit.writers=jvm
  2. # jvm啟動參數
  3. jvm.bootoptions=-Djava.class.path=%YOUR_OGG_HOME%/ggjava/ggjava.jar -Xmx512m -Xms32m
  4. # Goldengate classpath
  5. gg.classpath=%YOUR_aliyun-odps-ogg-plugin_DIRECTORY%/build_1.0.0/datahub_lib/*
  6. # 插件名稱
  7. gg.handlerlist=ggdatahub
  8. # 插件類型
  9. gg.handler.ggdatahub.type=com.aliyun.odps.ogg.handler.datahub.DatahubHandler
  10. # 報警接口自定義實現,默認實現為使用log4j記錄相關日誌
  11. #gg.handler.ggdatahub.alarmImplement=com.test.LogAlarm
  12. # ODPS project name
  13. gg.handler.ggdatahub.project=%YOUR_ODPS_PROJECT%
  14. # ODPS table map. ODPS表應在OGG啟動前完成創建
  15. gg.handler.ggdatahub.tableMap=ogg_test.test_1/ogg_test1,ogg_test.test_2/ogg_test2
  16. # Aliyun access_id
  17. gg.handler.ggdatahub.accessID=%YOUR_ODPS_ACCESS_ID%
  18. # Aliyun access_key
  19. gg.handler.ggdatahub.accessKey=%YOUR_ODPS_ACCESS_KEY%
  20. # ODPS end point
  21. gg.handler.ggdatahub.endPoint=https://service.odps.aliyun.com/api
  22. # ODPS datahub end point
  23. gg.handler.ggdatahub.datahubEndPoint=https://dh.odps.aliyun.com
  24. # ODPS表shard個數
  25. gg.handler.ggdatahub.shardNumber=1
  26. # ODPS表hublifecycle
  27. gg.handler.ggdatahub.hubLifeCycle=7
  28. # 加載shard超時時間
  29. gg.handler.ggdatahub.shardTimeout=60
  30. # 插件緩存日指條數的最大容量
  31. gg.handler.ggdatahub.batchSize=1000
  32. # 記錄插件信息的文件路徑,默認是dirdat/%handler_name%_handler_info
  33. gg.handler.ggdatahub.handlerInfoFileName=dirdat/ggdatahub_handler_info
  34. # 指定Oracle字段名和相應的ODPS數據類型
  35. gg.handler.ggdatahub.keyFields=ogg_test.test_1:id/bigint|ogg_test.test_2:id/bigint
  36. # 指定Oracle要監控的字段名和相應的ODPS數據類型,插件會將"字段名_before"和"字段名_after"作為ODPS表字段,存儲變化前後的變量值
  37. gg.handler.ggdatahub.focusFields=ogg_test.test_1:name/string|ogg_test.test_2:name/string
  38. # 指定Dateformat用於解析日期字段。如果不存在日期字段可以不配置
  39. gg.handler.ggdatahub.dbDateFormat=yyyy-MM-dd:HH:mm:ss
  40. # ODPS分區字段,逗號分隔
  41. gg.handler.ggdatahub.partitionFields=pt,dt
  42. # ODPS分區值,順序應與字段順序一直
  43. # 支持2種方式自定義分區值
  44. # 1. 固定值
  45. # 2. timestamp轉義序列(使用transaction的開始時間作為timestamp)
  46. gg.handler.ggdatahub.partitionValues=p1,%y-%m-%d
  47. # 上傳包的最大重試次數,默認為3
  48. gg.handler.ggdatahub.retryCount=3
  49. # 最多忽略的失敗操作個數,默認為0
  50. gg.handler.ggdatahub.passFailedOperationCount=10
  51. # 記錄失敗操作的文件路徑,默認為dirrpt/%handler_name%_bad_operations.log
  52. gg.handler.ggdatahub.failedOperationFileName=dirrpt/ggdatahub_bad_operations.log
  • 8.宿端自動根據Oracle表結構生成ODPS datahub表
  1. cd %YOUR_aliyun-odps-ogg-plugin_DIRECTORY%/datahub_handler/table_tool/
  2. java -jar ogg-odps-table-1.0.0.jar CREATE %YOUR_OGG_DIRECTORY%/dirprm/extdatahub.properties
  • 9.宿端啟動extract進程從trailfile裏抓取增加數據寫往ODPS datahub
  1. # 編輯writer配置
  2. edit params dhwriter
  3. extract dhwriter
  4. CUSEREXIT libggjava_ue.so CUSEREXIT PASSTHRU,INCLUDEUPDATEBEFORES,PARAMS "dirprm/extdatahub.properties"
  5. sourcedefs ./dirdef/ogg_test.def
  6. table OGG_TEST.*;
  7. # 添加writer
  8. add extract dhwriter, exttrailsource ./dirdat/st
  9. # 啟動writer
  10. 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:

  1. export LD_LIBRARY_PATH=$JRE_HOME/lib/amd64/server
  2. 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

  上一篇:go Fluentd MaxCompute插件__數據入雲_數據集成-阿裏雲
  下一篇:go 產品介紹__交通行業解決方案_大數據解決方案-阿裏雲