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
配置环境变量
- [oracle@rhel6ogg]$vi~/.bash_profile
- #添加
- exportLD_LIBRARY_PATH=/ogg/lib:$LD_LIBRARY_PATH
- exportPATH=/ogg:$PATH
配置Oracle数据库
- #启用归档
- sys@ORCL>alterdatabasearchivelog;
- #Forcinglogging
- sys@ORCL>alterdatabaseforcelogging;
- #添加最小附加日志
- sys@ORCL>alterdatabaseaddsupplementallogdata;
- #查看结果
- sys@ORCL>selectLOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MINfromv$database;
- LOG_MODE FORCE_LOGSUPPLEMENTAL_LOG_DATA_MI
- ---------------------------------------------------------------------
- ARCHIVELOG YESYES
- #创建goldengate用户
- sys@ORCL>createusergoldengateidentifiedbygoldengate;
- sys@ORCL>grantdbatogoldengate;
- sys@ORCL>createuserzhaoxuidentifiedbyzhaoxu;
- sys@ORCL>grantdbatozhaoxu;
- #创建测试表
- zhaoxu@ORCL>createtableggtest(col1number,col2varchar2(20));
- Tablecreated.
- zhaoxu@ORCL>altertableggtestaddconstraintpk_ggtestprimarykey(col1);
- Tablealtered.
配置ogg参数文件
- #配置mgr
- GGSCI(rhel6)2>editparamsmgr
- PORT7809
- AUTOSTARTER*
- AUTORESTARTEXTRACT*,RETRIES100,WAITMINUTES2
- PURGEOLDEXTRACTS./dirdat/*,USECHECKPOINTS,MINKEEPDAYS3
- LAGREPORTHOURS1
- LAGINFOMINUTES30
- LAGCRITICALMINUTES45
- SYSLOGERROR,WARN
- #启动mgr
- GGSCI(rhel6)3>startmgr
- GGSCI(rhel6)4>infoall
- ProgramStatusGroupLagatChkptTimeSinceChkpt
- MANAGERRUNNING
- #配置抽取进程参数
- GGSCI(rhel6)5>editparamsext_emp
- EXTRACTEXT_EMP
- DYNAMICRESOLUTION
- SETENV(NLS_LANG="AMERICAN_AMERICA.UTF8")
- SETENV(ORACLE_HOME="/u02/app/oracle/product/11.2.4/db1")
- SETENV(ORACLE_SID="orcl")
- USERIDgoldengate,PASSWORDgoldengate
- DISCARDFILE./dirrpt/ext_emp.dsc,APPEND,MEGABYTES1024
- EXTTRAIL./dirdat/zx
- tablezhaoxu.ggtest;
- #配置投递进程参数
- GGSCI(rhel6)6>editparamsdp_tab
- EXTRACTDP_TAB
- PASSTHRU
- RMTHOST192.168.56.25,MGRPORT7809,COMPRESS
- RMTTRAIL./dirdat/zx
- tablezhaoxu.ggtest;
- #配置生成定义文件参数
- GGSCI(rhel6)7>editparamsdefgen
- defsfile./dirdef/defgen.def
- useridgoldengate,passwordgoldengate
- tablezhaoxu.ggtest;
- #增加抽取进程和传输进程
- GGSCI(rhel6)8>addextractext_emp,tranlog,beginnow
- GGSCI(rhel6)9>addexttrail./dirdat/zx,extractext_emp,megabytes200
- GGSCI(rhel6)10>addextractdp_tab,exttrailsource./dirdat/zx
- GGSCI(rhel6)11>addrmttrail./dirdat/zx,extractdp_tab,megabytes200
- GGSCI(rhel6)12>infoall
- ProgramStatusGroupLagatChkptTimeSinceChkpt
- MANAGERRUNNING
- EXTRACTSTOPPEDDP_TAB00:00:0000:01:43
- EXTRACTSTOPPEDEXT_EMP00:00:0000:01:01
- #添加表的附加日志
- GGSCI(rhel6)13>dbloginuseridgoldengatepasswordgoldengate
- Successfullyloggedintodatabase.
- GGSCI(rhel6asgoldengate@orcl)14>addtrandatazhaoxu.ggtest
- LoggingofsupplementalredodataenabledfortableZHAOXU.GGTEST.
- TRANDATAforschedulingcolumnshasbeenaddedontable'ZHAOXU.GGTEST'.
- TRANDATAforinstantiationCSNhasbeenaddedontable'ZHAOXU.GGTEST'.
- #生成定义文件
- [oracle@rhel6ogg]$./defgenparamfile./dirprm/defgen.prm
- ***********************************************************************
- OracleGoldenGateTableDefinitionGeneratorforOracle
- Version12.2.0.1.1OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401
- Linux,x64,64bit(optimized),Oracle11gonDec11201521:37:21
- Copyright(C)1995,2015,Oracleand/oritsaffiliates.Allrightsreserved.
- Startingat2016-12-0813:45:00
- ***********************************************************************
- OperatingSystemVersion:
- Linux
- Version#1SMPWedJul118:23:37EDT2015,Release2.6.32-573.el6.x86_64
- Node:rhel6
- Machine:x86_64
- softlimithardlimit
- AddressSpaceSize:unlimitedunlimited
- HeapSize:unlimitedunlimited
- FileSize:unlimitedunlimited
- cpuTime:unlimitedunlimited
- Processid:3669
- ***********************************************************************
- **Runningwiththefollowingparameters**
- ***********************************************************************
- defsfile./dirdef/defgen.def
- useridgoldengate,password***
- tablezhaoxu.ggtest;
- RetrievingdefinitionforZHAOXU.GGTEST.
- Definitionsgeneratedfor1tablein./dirdef/defgen.def.
- [oracle@rhel6ogg]$cat./dirdef/defgen.def
- *+-Defgenversion5.0,EncodingUTF-8
- *
- *Definitionscreated/modified2016-12-0813:45
- *
- *Fielddescriptionsforeachcolumnentry:
- *
- *1Name
- *2DataType
- *3ExternalLength
- *4FetchOffset
- *5Scale
- *6Level
- *7Null
- *8BumpifOdd
- *9InternalLength
- *10BinaryLength
- *11TableLength
- *12MostSignificantDT
- *13LeastSignificantDT
- *14HighPrecision
- *15LowPrecision
- *16ElementaryItem
- *17Occurs
- *18KeyColumn
- *19SubDataType
- *20NativeDataType
- *21CharacterSet
- *22CharacterLength
- *23LOBType
- *24PartialType
- *
- Databasetype:ORACLE
- CharactersetID:UTF-8
- NationalcharactersetID:UTF-16
- Locale:neutral
- Casesensitivity:14141414141414141414141411141414
- TimeZone:GMT
- *
- DefinitionfortableZHAOXU.GGTEST
- Recordlength:82
- Syskey:0
- Columns:2
- COL1645000010505050000010122-1000
- COL2642056001020200000010001-1000
- Endofdefinition
Postgresql端:
- postgres=#createdatabasezhaoxu;
- postgres=#createuserzhaoxusuperuserpassword'zhaoxu';
- postgres=#\czhaoxuzhaoxu
- zhaoxu=#createschemazhaoxu;
- CREATESCHEMA
- zhaoxu=#\dn
- Listofschemas
- Name|Owner
- --------+--------
- public|pguser
- zhaoxu|zhaoxu
- zhaoxu=#CREATETABLEggtest
- zhaoxu-#(
- zhaoxu(#col1integerNOTNULL,zhaoxu(#col2varchar(20),zhaoxu(#CONSTRAINTpk_ggtestPRIMARYKEY(col1)
- zhaoxu(#);
- CREATETABLE
- zhaoxu=#\d
- Listofrelations
- Schema|Name|Type|Owner
- --------+--------+-------+--------
- zhaoxu|ggtest|table|zhaoxu
解压ogg
- [pguser@rhel7ogg]$tar-xvfggs_Linux_x64_Postgresql_64bit.tar
配置odbc数据源,goldengate 使用ODBC连接Postgres Database
- [pguser@rhel7ogg]$pwd
- /ogg
- [pguser@rhel7ogg]$catodbc.ini
- [ODBCDataSources]
- GG_Postgres=DataDirect9.6PostgresqlWireProtocol
- [ODBC]
- IANAAppCodePage=106
- InstallDir=/ogg
- [GG_Postgres]
- Driver=/ogg/lib/GGpsql25.so
- Description=DataDirect9.6PostgresqlWireProtocol
- Database=zhaoxu
- HostName=127.0.0.1
- PortNumber=5432
- logonID=zhaoxu
- 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是描述
HostName填写本机的hostname,可以解析的即可。
PosrNumber是postgres的监听端口。
password填写postgres的密码
配置环境变量
- exportLD_LIBRARY_PATH=/ogg/lib:$LD_LIBRARY_PATH
- exportPATH=$PATH:/ogg
- exportODBCINI=/ogg/odbc.ini
配置Ogg
- [pguser@rhel7ogg]$./ggsci
- OracleGoldenGateCommandInterpreter
- Version12.2.0.1.1OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401
- Linux,PostgresqlonDec11201516:22:42
- OperatingsystemcharactersetidentifiedasUTF-8.
- Copyright(C)1995,Oracleand/oritsaffiliates.Allrightsreserved.
- #创建目录
- GGSCI(rhel7)1>createsubdirs
- Creatingsubdirectoriesundercurrentdirectory/ogg
- Parameterfiles/ogg/dirprm:alreadyexists
- Reportfiles/ogg/dirrpt:created
- Checkpointfiles/ogg/dirchk:created
- Processstatusfiles/ogg/dirpcs:created
- sqlscriptfiles/ogg/dirsql:created
- Databasedefinitionsfiles/ogg/dirdef:created
- Extractdatafiles/ogg/dirdat:created
- Temporaryfiles/ogg/dirtmp:created
- Stdoutfiles/ogg/dirout:created
- #配置mgr进程
- PORT7809
- #启动mgr进程
- GGSCI(rhel7)3>startmgr
- Managerstarted.
- GGSCI(rhel7)4>infoall
- ProgramStatusGroupLagatChkptTimeSinceChkpt
- MANAGERRUNNING
- #把源端生成的定义文件取到目标端
- [pguser@rhel7ogg]$scporacle@192.168.56.2:/ogg/dirdef/defgen.def/ogg/dirdef
- #配置复制进程参数
- GGSCI(rhel7)5>editparamsrep1
- REPLICATrep1
- SOURCEDEFS./dirdef/defgen.def
- SETENV(PGCLIENTENCODING="UTF8")
- SETENV(ODBCINI="/ogg/odbc.ini")
- SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
- TARGETDBGG_Postgres,useridzhaoxu,passwordzhaoxu
- DISCARDFILE./dirrpt/rep1.dsc
- mapzhaoxu.ggtest,targetzhaoxu.ggtest;
- #添加复制进程
- GGSCI(rhel7)6>addreplicatrep1,exttrail./dirdat/zx,nodbcheckpoint
- GGSCI(rhel7)7>infoall
- ProgramStatusGroupLagatChkptTimeSinceChkpt
- MANAGERRUNNING
- REPLICATSTOPPEDREP100:00:0000:02:29
- #测试连接Postgresql数据库
- GGSCI(rhel7)8>dbloginsourcedbgg_postgresuseridzhaoxu
- Password:
- 2016-12-0813:27:34INFOOGG-03036DatabasecharactersetidentifiedasUTF-8.Locale:en_US.
- 2016-12-0813:27:34INFOOGG-03037SessioncharactersetidentifiedasUTF-8.
- Successfullyloggedintodatabase.
- GGSCI(rhel7aszhaoxu@gg_postgres)9>
- #如果连接不成功,检查pg_hba.conf配置文件
3、启动源端和目标端的进程
- #Oracle端
- GGSCI(rhel6)16>start*
- SendingSTARTrequesttoMANAGER...
- EXTRACTDP_TABstarting
- SendingSTARTrequesttoMANAGER...
- EXTRACTEXT_EMPstarting
- GGSCI(rhel6)18>infoall
- ProgramStatusGroupLagatChkptTimeSinceChkpt
- MANAGERRUNNING
- EXTRACTRUNNINGDP_TAB00:00:0000:00:12
- EXTRACTRUNNINGEXT_EMP00:00:0000:00:01
- #Postgresql端
- GGSCI(rhel7)8>start*
- SendingSTARTrequesttoMANAGER...
- REPLICATREP1starting
- GGSCI(rhel7)9>infoall
- ProgramStatusGroupLagatChkptTimeSinceChkpt
- MANAGERRUNNING
- REPLICATRUNNINGREP100:00:0000:00:00
4、测试数据同步
测试insert
- #Oracle端
- zhaoxu@ORCL>insertintoggtestvalues(1,'zhaoxu');
- 1rowcreated.
- zhaoxu@ORCL>insertintoggtestvalues(2,'luoxi');
- 1rowcreated.
- zhaoxu@ORCL>insertintoggtestvalues(3,'sanqi');
- 1rowcreated.
- zhaoxu@ORCL>commit;
- Commitcomplete.
- #Postgresql端
- zhaoxu=#select*fromggtest;
- col1|col2
- ------+--------
- 1|zhaoxu
- 2|luoxi
- 3|sanqi
- (3rows)
测试delete
- #Oracle端
- zhaoxu@ORCL>deletefromggtestwherecol1=3;
- 1rowdeleted.
- zhaoxu@ORCL>commit;
- Commitcomplete.
- zhaoxu@ORCL>select*fromggtest;
- COL1COL2
- ----------------------------------------------------------------------
- 1zhaoxu
- 2luoxi
- #Postgresql端
- zhaoxu=#select*fromggtest;
- col1|col2
- ------+--------
- 1|zhaoxu
- 2|luoxi
- (2rows)
测试update
- #Oracle端
- zhaoxu@ORCL>updateggtestsetcol2='sanqi'wherecol1=1;
- 1rowupdated.
- zhaoxu@ORCL>commit;
- Commitcomplete.
- zhaoxu@ORCL>select*fromggtest;
- COL1COL2
- ----------------------------------------------------------------------
- 1sanqi
- 2luoxi
- #Postgresql端
- zhaoxu=#select*fromggtest;
- col1|col2
- ------+-------
- 2|luoxi
- 1|sanqi
- (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