配置Goldengate从Oracle到PostgreSQL的同步复制

前端之家收集整理的这篇文章主要介绍了配置Goldengate从Oracle到PostgreSQL的同步复制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、平台环境

Oracle:rhel6.7+Oracle11.2.0.4 ip:192.168.56.2

Postgresql:rhel7.2+Pg9.6.1 ip:192.168.56.25

Goldengate:Goldengate12.2.0.1 for oracle和Goldengate 12.2.0.1 for Postgresql

2、Ogg配置

Oracle端:

直接安装goldengate for oracle 11g

wKioL1hI2WOzPb_-AACDTxFJl1g703.png-wh_50

配置环境变量

  1. [oracle@rhel6ogg]$vi~/.bash_profile
  2. #添加
  3. exportLD_LIBRARY_PATH=/ogg/lib:$LD_LIBRARY_PATH
  4. exportPATH=/ogg:$PATH

配置Oracle数据库

  1. #启用归档
  2. sys@ORCL>alterdatabasearchivelog;
  3. #Forcinglogging
  4. sys@ORCL>alterdatabaseforcelogging;
  5. #添加最小附加日志
  6. sys@ORCL>alterdatabaseaddsupplementallogdata;
  7. #查看结果
  8. sys@ORCL>selectLOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MINfromv$database;
  9.  
  10. LOG_MODE FORCE_LOGSUPPLEMENTAL_LOG_DATA_MI
  11. ---------------------------------------------------------------------
  12. ARCHIVELOG YESYES
  13. #创建goldengate用户
  14. sys@ORCL>createusergoldengateidentifiedbygoldengate;
  15. sys@ORCL>grantdbatogoldengate;
  16. sys@ORCL>createuserzhaoxuidentifiedbyzhaoxu;
  17. sys@ORCL>grantdbatozhaoxu;
  18. #创建测试表
  19. zhaoxu@ORCL>createtableggtest(col1number,col2varchar2(20));
  20.  
  21. Tablecreated.
  22.  
  23. zhaoxu@ORCL>altertableggtestaddconstraintpk_ggtestprimarykey(col1);
  24.  
  25. Tablealtered.

配置ogg参数文件

  1. #配置mgr
  2. GGSCI(rhel6)2>editparamsmgr
  3. PORT7809
  4. AUTOSTARTER*
  5. AUTORESTARTEXTRACT*,RETRIES100,WAITMINUTES2
  6. PURGEOLDEXTRACTS./dirdat/*,USECHECKPOINTS,MINKEEPDAYS3
  7. LAGREPORTHOURS1
  8. LAGINFOMINUTES30
  9. LAGCRITICALMINUTES45
  10. SYSLOGERROR,WARN
  11.  
  12. #启动mgr
  13. GGSCI(rhel6)3>startmgr
  14. GGSCI(rhel6)4>infoall
  15.  
  16. ProgramStatusGroupLagatChkptTimeSinceChkpt
  17.  
  18. MANAGERRUNNING
  19.  
  20. #配置抽取进程参数
  21. GGSCI(rhel6)5>editparamsext_emp
  22. EXTRACTEXT_EMP
  23. DYNAMICRESOLUTION
  24. SETENV(NLS_LANG="AMERICAN_AMERICA.UTF8")
  25. SETENV(ORACLE_HOME="/u02/app/oracle/product/11.2.4/db1")
  26. SETENV(ORACLE_SID="orcl")
  27. USERIDgoldengate,PASSWORDgoldengate
  28. DISCARDFILE./dirrpt/ext_emp.dsc,APPEND,MEGABYTES1024
  29. EXTTRAIL./dirdat/zx
  30. tablezhaoxu.ggtest;
  31.  
  32. #配置投递进程参数
  33. GGSCI(rhel6)6>editparamsdp_tab
  34. EXTRACTDP_TAB
  35. PASSTHRU
  36. RMTHOST192.168.56.25,MGRPORT7809,COMPRESS
  37. RMTTRAIL./dirdat/zx
  38. tablezhaoxu.ggtest;
  39.  
  40. #配置生成定义文件参数
  41. GGSCI(rhel6)7>editparamsdefgen
  42. defsfile./dirdef/defgen.def
  43. useridgoldengate,passwordgoldengate
  44. tablezhaoxu.ggtest;
  45.  
  46. #增加抽取进程和传输进程
  47. GGSCI(rhel6)8>addextractext_emp,tranlog,beginnow
  48. GGSCI(rhel6)9>addexttrail./dirdat/zx,extractext_emp,megabytes200
  49. GGSCI(rhel6)10>addextractdp_tab,exttrailsource./dirdat/zx
  50. GGSCI(rhel6)11>addrmttrail./dirdat/zx,extractdp_tab,megabytes200
  51. GGSCI(rhel6)12>infoall
  52.  
  53. ProgramStatusGroupLagatChkptTimeSinceChkpt
  54.  
  55. MANAGERRUNNING
  56. EXTRACTSTOPPEDDP_TAB00:00:0000:01:43
  57. EXTRACTSTOPPEDEXT_EMP00:00:0000:01:01
  58.  
  59. #添加表的附加日志
  60. GGSCI(rhel6)13>dbloginuseridgoldengatepasswordgoldengate
  61. Successfullyloggedintodatabase.
  62.  
  63. GGSCI(rhel6asgoldengate@orcl)14>addtrandatazhaoxu.ggtest
  64.  
  65. LoggingofsupplementalredodataenabledfortableZHAOXU.GGTEST.
  66. TRANDATAforschedulingcolumnshasbeenaddedontable'ZHAOXU.GGTEST'.
  67. TRANDATAforinstantiationCSNhasbeenaddedontable'ZHAOXU.GGTEST'.
  68.  
  69. #生成定义文件
  70. [oracle@rhel6ogg]$./defgenparamfile./dirprm/defgen.prm
  71.  
  72. ***********************************************************************
  73. OracleGoldenGateTableDefinitionGeneratorforOracle
  74. Version12.2.0.1.1OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401
  75. Linux,x64,64bit(optimized),Oracle11gonDec11201521:37:21
  76.  
  77. Copyright(C)1995,2015,Oracleand/oritsaffiliates.Allrightsreserved.
  78.  
  79.  
  80. Startingat2016-12-0813:45:00
  81. ***********************************************************************
  82.  
  83. OperatingSystemVersion:
  84. Linux
  85. Version#1SMPWedJul118:23:37EDT2015,Release2.6.32-573.el6.x86_64
  86. Node:rhel6
  87. Machine:x86_64
  88. softlimithardlimit
  89. AddressSpaceSize:unlimitedunlimited
  90. HeapSize:unlimitedunlimited
  91. FileSize:unlimitedunlimited
  92. cpuTime:unlimitedunlimited
  93.  
  94. Processid:3669
  95.  
  96. ***********************************************************************
  97. **Runningwiththefollowingparameters**
  98. ***********************************************************************
  99. defsfile./dirdef/defgen.def
  100. useridgoldengate,password***
  101. tablezhaoxu.ggtest;
  102. RetrievingdefinitionforZHAOXU.GGTEST.
  103.  
  104.  
  105. Definitionsgeneratedfor1tablein./dirdef/defgen.def.
  106.  
  107. [oracle@rhel6ogg]$cat./dirdef/defgen.def
  108. *+-Defgenversion5.0,EncodingUTF-8
  109. *
  110. *Definitionscreated/modified2016-12-0813:45
  111. *
  112. *Fielddescriptionsforeachcolumnentry:
  113. *
  114. *1Name
  115. *2DataType
  116. *3ExternalLength
  117. *4FetchOffset
  118. *5Scale
  119. *6Level
  120. *7Null
  121. *8BumpifOdd
  122. *9InternalLength
  123. *10BinaryLength
  124. *11TableLength
  125. *12MostSignificantDT
  126. *13LeastSignificantDT
  127. *14HighPrecision
  128. *15LowPrecision
  129. *16ElementaryItem
  130. *17Occurs
  131. *18KeyColumn
  132. *19SubDataType
  133. *20NativeDataType
  134. *21CharacterSet
  135. *22CharacterLength
  136. *23LOBType
  137. *24PartialType
  138. *
  139. Databasetype:ORACLE
  140. CharactersetID:UTF-8
  141. NationalcharactersetID:UTF-16
  142. Locale:neutral
  143. Casesensitivity:14141414141414141414141411141414
  144. TimeZone:GMT
  145. *
  146. DefinitionfortableZHAOXU.GGTEST
  147. Recordlength:82
  148. Syskey:0
  149. Columns:2
  150. COL1645000010505050000010122-1000
  151. COL2642056001020200000010001-1000
  152. Endofdefinition

Postgresql端:

创建用于同步的数据库用户和Schema,并创建测试表

  1. postgres=#createdatabasezhaoxu;
  2. postgres=#createuserzhaoxusuperuserpassword'zhaoxu';
  3. postgres=#\czhaoxuzhaoxu
  4. zhaoxu=#createschemazhaoxu;
  5. CREATESCHEMA
  6. zhaoxu=#\dn
  7. Listofschemas
  8. Name|Owner
  9. --------+--------
  10. public|pguser
  11. zhaoxu|zhaoxu
  12. zhaoxu=#CREATETABLEggtest
  13. zhaoxu-#(
  14. zhaoxu(#col1integerNOTNULL,zhaoxu(#col2varchar(20),zhaoxu(#CONSTRAINTpk_ggtestPRIMARYKEY(col1)
  15. zhaoxu(#);
  16. CREATETABLE
  17. zhaoxu=#\d
  18. Listofrelations
  19. Schema|Name|Type|Owner
  20. --------+--------+-------+--------
  21. zhaoxu|ggtest|table|zhaoxu

解压ogg

  1. [pguser@rhel7ogg]$tar-xvfggs_Linux_x64_Postgresql_64bit.tar

配置odbc数据源,goldengate 使用ODBC连接Postgres Database

  1. [pguser@rhel7ogg]$pwd
  2. /ogg
  3. [pguser@rhel7ogg]$catodbc.ini
  4. [ODBCDataSources]
  5. GG_Postgres=DataDirect9.6PostgresqlWireProtocol
  6. [ODBC]
  7. IANAAppCodePage=106
  8. InstallDir=/ogg
  9. [GG_Postgres]
  10. Driver=/ogg/lib/GGpsql25.so
  11. Description=DataDirect9.6PostgresqlWireProtocol
  12. Database=zhaoxu
  13. HostName=127.0.0.1
  14. PortNumber=5432
  15. logonID=zhaoxu
  16. Password=zhaoxu

[ODBCDataSources]里边配置该ODBC的别名,本文件中也就是GG_Postgres 后边的配置文件中的targetdb需要与这个对应

[ODBC]:

IANAAppCodePage指的是字符集的设置这里的106值得是UTF8,如果是4则为ISO-8859-1,注意这个应该始终和postgres的字符集设置相同,不同字符集对应的值见附件。

InstallDir对应ogg的安装目录

[GG_Postgres]:这里的名称对应的是上边ODBC的别名

Driver这里指向的是ogg安装目录下的lib/GGpsql25.so

Description是描述

Database填写数据库名称

HostName填写本机的hostname,可以解析的即可。

PosrNumberpostgres的监听端口。

logonID填写postgres用户名

password填写postgres的密码


配置环境变量

  1. exportLD_LIBRARY_PATH=/ogg/lib:$LD_LIBRARY_PATH
  2. exportPATH=$PATH:/ogg
  3. exportODBCINI=/ogg/odbc.ini

配置Ogg

  1. [pguser@rhel7ogg]$./ggsci
  2.  
  3. OracleGoldenGateCommandInterpreter
  4. Version12.2.0.1.1OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401
  5. Linux,PostgresqlonDec11201516:22:42
  6. OperatingsystemcharactersetidentifiedasUTF-8.
  7.  
  8. Copyright(C)1995,Oracleand/oritsaffiliates.Allrightsreserved.
  9.  
  10.  
  11. #创建目录
  12. GGSCI(rhel7)1>createsubdirs
  13.  
  14. Creatingsubdirectoriesundercurrentdirectory/ogg
  15.  
  16. Parameterfiles/ogg/dirprm:alreadyexists
  17. Reportfiles/ogg/dirrpt:created
  18. Checkpointfiles/ogg/dirchk:created
  19. Processstatusfiles/ogg/dirpcs:created
  20. sqlscriptfiles/ogg/dirsql:created
  21. Databasedefinitionsfiles/ogg/dirdef:created
  22. Extractdatafiles/ogg/dirdat:created
  23. Temporaryfiles/ogg/dirtmp:created
  24. Stdoutfiles/ogg/dirout:created
  25.  
  26. #配置mgr进程
  27. PORT7809
  28.  
  29. #启动mgr进程
  30. GGSCI(rhel7)3>startmgr
  31. Managerstarted.
  32.  
  33.  
  34. GGSCI(rhel7)4>infoall
  35.  
  36. ProgramStatusGroupLagatChkptTimeSinceChkpt
  37.  
  38. MANAGERRUNNING
  39.  
  40. #把源端生成的定义文件取到目标端
  41. [pguser@rhel7ogg]$scporacle@192.168.56.2:/ogg/dirdef/defgen.def/ogg/dirdef
  42.  
  43. #配置复制进程参数
  44. GGSCI(rhel7)5>editparamsrep1
  45. REPLICATrep1
  46. SOURCEDEFS./dirdef/defgen.def
  47. SETENV(PGCLIENTENCODING="UTF8")
  48. SETENV(ODBCINI="/ogg/odbc.ini")
  49. SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
  50. TARGETDBGG_Postgres,useridzhaoxu,passwordzhaoxu
  51. DISCARDFILE./dirrpt/rep1.dsc
  52. mapzhaoxu.ggtest,targetzhaoxu.ggtest;
  53.  
  54. #添加复制进程
  55. GGSCI(rhel7)6>addreplicatrep1,exttrail./dirdat/zx,nodbcheckpoint
  56.  
  57. GGSCI(rhel7)7>infoall
  58.  
  59. ProgramStatusGroupLagatChkptTimeSinceChkpt
  60.  
  61. MANAGERRUNNING
  62. REPLICATSTOPPEDREP100:00:0000:02:29
  63.  
  64. #测试连接Postgresql数据库
  65. GGSCI(rhel7)8>dbloginsourcedbgg_postgresuseridzhaoxu
  66. Password:
  67.  
  68. 2016-12-0813:27:34INFOOGG-03036DatabasecharactersetidentifiedasUTF-8.Locale:en_US.
  69.  
  70. 2016-12-0813:27:34INFOOGG-03037SessioncharactersetidentifiedasUTF-8.
  71. Successfullyloggedintodatabase.
  72.  
  73. GGSCI(rhel7aszhaoxu@gg_postgres)9>
  74. #如果连接不成功,检查pg_hba.conf配置文件

3、启动源端和目标端的进程

  1. #Oracle端
  2. GGSCI(rhel6)16>start*
  3.  
  4. SendingSTARTrequesttoMANAGER...
  5. EXTRACTDP_TABstarting
  6.  
  7. SendingSTARTrequesttoMANAGER...
  8. EXTRACTEXT_EMPstarting
  9.  
  10. GGSCI(rhel6)18>infoall
  11.  
  12. ProgramStatusGroupLagatChkptTimeSinceChkpt
  13.  
  14. MANAGERRUNNING
  15. EXTRACTRUNNINGDP_TAB00:00:0000:00:12
  16. EXTRACTRUNNINGEXT_EMP00:00:0000:00:01
  17.  
  18. #Postgresql
  19. GGSCI(rhel7)8>start*
  20.  
  21. SendingSTARTrequesttoMANAGER...
  22. REPLICATREP1starting
  23.  
  24.  
  25. GGSCI(rhel7)9>infoall
  26.  
  27. ProgramStatusGroupLagatChkptTimeSinceChkpt
  28.  
  29. MANAGERRUNNING
  30. REPLICATRUNNINGREP100:00:0000:00:00

4、测试数据同步

测试insert

  1. #Oracle端
  2. zhaoxu@ORCL>insertintoggtestvalues(1,'zhaoxu');
  3.  
  4. 1rowcreated.
  5.  
  6. zhaoxu@ORCL>insertintoggtestvalues(2,'luoxi');
  7.  
  8. 1rowcreated.
  9.  
  10. zhaoxu@ORCL>insertintoggtestvalues(3,'sanqi');
  11.  
  12. 1rowcreated.
  13.  
  14. zhaoxu@ORCL>commit;
  15.  
  16. Commitcomplete.
  17.  
  18. #Postgresql
  19. zhaoxu=#select*fromggtest;
  20. col1|col2
  21. ------+--------
  22. 1|zhaoxu
  23. 2|luoxi
  24. 3|sanqi
  25. (3rows)

测试delete

  1. #Oracle端
  2. zhaoxu@ORCL>deletefromggtestwherecol1=3;
  3.  
  4. 1rowdeleted.
  5.  
  6. zhaoxu@ORCL>commit;
  7.  
  8. Commitcomplete.
  9.  
  10. zhaoxu@ORCL>select*fromggtest;
  11.  
  12. COL1COL2
  13. ----------------------------------------------------------------------
  14. 1zhaoxu
  15. 2luoxi
  16. #Postgresql
  17. zhaoxu=#select*fromggtest;
  18. col1|col2
  19. ------+--------
  20. 1|zhaoxu
  21. 2|luoxi
  22. (2rows)

测试update

  1. #Oracle端
  2. zhaoxu@ORCL>updateggtestsetcol2='sanqi'wherecol1=1;
  3.  
  4. 1rowupdated.
  5.  
  6. zhaoxu@ORCL>commit;
  7.  
  8. Commitcomplete.
  9.  
  10. zhaoxu@ORCL>select*fromggtest;
  11.  
  12. COL1COL2
  13. ----------------------------------------------------------------------
  14. 1sanqi
  15. 2luoxi
  16. #Postgresql
  17. zhaoxu=#select*fromggtest;
  18. col1|col2
  19. ------+-------
  20. 2|luoxi
  21. 1|sanqi
  22. (2rows)

参考文档:

http://www.jb51.cc/article/p-rmxbqfiq-ot.html

http://www.jb51.cc/article/p-yoikauiw-gp.html

官方文档:

http://docs.oracle.com/goldengate/c1221/gg-winux/GIPSQ/sysreq.htm#GIPSQ107

猜你在找的Oracle相关文章