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

1.平台环境

Oracle:cent6.5_orallg_16GBK+Oracle11g+fbo_ggs_Linux_x64_shiphome ip:192.168.2.62 源端
PostgreSQL:Centos6+postgresql9.6+122022_ggs_Linux_x64_PostgreSQL_64bit ip:192.168.2.45 目标端

2.Oracle端Ogg安装(省略Oracle和 postgresql安装)

Oracle 端:(注意:不能用root用户安装,此处我用的Oracle用户)
在oracle的安裝目录下创建一个ogg的文件(具体目录/oracle/app/ogg),此目录位ogg的安装目录

2.1 图形安装界面(如果不支持图形请看2.2)

A.unzip 122022_fbo_ggs_Linux_x64_shiphome.zip
解压122022_fbo_ggs_Linux_x64_shiphome.zip 文件
B.解压后找到runLnstaller文件 ,直接安装
在这里插入图片描述

(上图)打开图形界面,可以选择安装11g版本还是12c版本

(上图)设置ogg软件安装目录和选择ORACLE_HOME的路径,默认会根据ORACLE_HOME环境变量自动设置.在这可以选择设置mgr的端口和在软件安装完

在这里插入图片描述
在这里插入图片描述

2.2 静默安装

有很多情况下操作系统没有图形化,这种情况下可以采用静默方式安装,具体步骤如下:
配置自动应答文件:
cd /oracle/app/fbo_ggs_Linux_x64_shiphome/Disk1/response/
vi oggcore.rsp
在这里插入图片描述
在这里插入图片描述

启动静默安装:
回到上级目录:cd …
当前路径为 /oracle/app/fbo_ggs_Linux_x64_shiphome/Disk1
运行:./runInstaller -silent -responseFile /oracle/app/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp
这时候会提示一个日志,可以通过这个日志来查看安装情况
安装完成后,安装命令执行页面会输出一下内容:

2.3 配置环境变量

vi ~/.bash_profile 添加:
export LD_LIBRARY_PATH= O R A C L E H O M E / l i b : ORACLE_HOME/lib: ORACLEHOME/lib:LD_LIBRARY_PATH
export PATH=/oracle/app/ogg:$PATH

2.4 oracle 环境

配置Oracle数据库

#启用归档

sys@ORCL>alter database archivelog;

#Forcing logging

sys@ORCL>alter database force logging;(FORCE LOGGING:简言之,强制记录日志,即对数据库中的所有操作都产生日志信息,并将该信息写入到联机重做日志文件。)

#添加最小附加日志

sys@ORCL>alter database add supplemental log data;(附加日志(supplemental log)可以指示数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,如逻辑standby、streams、GoldenGate、LogMiner。可以在数据库和表上设置。

#查看结果

sys@ORCL>select LOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;

#创建oracle 测试用户

sys@ORCL>create user nlp identified by nlp ;
sys@ORCL>grant dba to nlp ;

#创建测试表

nlp@ORCL>create table ggtest (col1 number, col2 varchar2(20));

Table created.

nlp@ORCL>alter table ggtest add constraint pk_ggtest primary key(col1);

Table altered.

2.5 ogg配置

配置ogg参数文件

①在安装ogg的文件下打开命令行,输入./ggsci ,看能否打开ogg的命令窗口,如果打不开,请检查环境变量

GGSCI (rhel7) 1>create subdirs 创建目录

②配置mgr(控制进程)

GGSCI (rhel6) 2> edit params mgr
PORT 7809
AUTOSTART ER *
AUTORESTART EXTRACT ,RETRIES 100,WAITMINUTES 2
PURGEOLDEXTRACTS ./dirdat/
,USECHECKPOINTS,MINKEEPDAYS 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
SYSLOG ERROR,WARN

进程作用:Manager(mgr)进程是GoldenGate的控制进程,它主要作用有以下几个方面:启动、监控、重启GoldenGate的其他进程,报告错误及时间,分配数据存储空间,发布阀值报告等。
参数详情:
Port 通信端口7809。 生产端和灾备端需要保持一致。

DYNAMICPORTLIST 7840-7914动态端口列表的范围从7840到7914。当制定端口被占用或者出现通信故障,管理进程将会从列表中选择下一个端口尝试连接,避免通信端口的单点故障。

AUTORESTART EXTRACT ,RETRIES 100,WAITMINUTES 2当提取进程中断后尝试自动重启,每隔2分钟尝试启动一次,尝试100次。
PURGEOLDEXTRACTS ./dirdat/
,USECHECKPOINTS,MINKEEPDAYS 3
定期清理dirdat路径下的本地队列(local trail)。保留期限3天,过期后自动删除。从而控制队列文件的目录不会增长过大。

LAGREPORTHOURS 1 每隔一小时检查一次传输延迟情况

LAGINFOMINUTES 30 传输延时超过30分钟将写入错误日志

LAGCRITICALMINUTES 45 传输延时超过45分钟将写入警告日志

配置好后 启动mgr
GGSCI (rhel6) 3> start mgr

查看进程状态 info all
GGSCI (rhel6) 4> info all
Running 代表已启动

③配置抽取进程参数(Extract进程)

GGSCI (rhel6) 5> edit params ext_emp
EXTRACT EXT_EMP
DYNAMICRESOLUTION
SETENV (NLS_LANG=“AMERICAN_AMERICA.UTF8”)
SETENV (ORACLE_HOME="/oracle/app/oracle/product/11.2.4/db1")
SETENV (ORACLE_SID=“orcl”)
USERID nlp,PASSWORD nlp
DISCARDFILE ./dirrpt/ext_emp.dsc,APPEND,MEGABYTES 1024
EXTTRAIL ./dirdat/zx
table nlp.ggtest;
table nlp.表二;
table nlp.表三;

进程作用:Extract进程运行在数据库源端,负责从源端数据表或日志中捕获数据。Extract进程利用其内在的checkpoint机制,周期性地检查并记录其读写的位置,通常是写入到本地的trail文件。这种机制是为了保证如果Extract进程终止或者操作系统宕机,我们重启Extract进程后,GoldenGate能够恢复到以前的状态,从上一个断点处继续往下运行,而不会有任何数据损失。
参数详情:
SETENV (NLS_LANG=”AMERICAN_AMERICA.UTF8”)
设置字符集环境变量为UTF8

SETENV (ORACLE_HOME="/oracle/app/oracle/product/11.2.4/db1")
SETENV (ORACLE_SID=“orcl”)
USERID nlp,PASSWORD nlp
table nlp.ggtest;
table nlp.表二;
table nlp.表三;(多张表的配置格式)

Oracle 相关参数(数据源端相关配置)

DISCARDFILE ./dirrpt/extya.dsc, APPEND, MEGABYTES 1024
将执行失败的记录保存在discard file中,该文件位于./dirrpt/extya.dsc,大小为1024MB。 文件中已经包含记录的话,再后面继续追加,不删除之前的记录。

EXTTRAIL ./dirdat/ya
队列文件路径

④配置投递进程

GGSCI (rhel6) 6> edit params dp_tab
EXTRACT DP_TAB
PASSTHRU
NUMFILES 5000
RMTHOST 192.168.2.45 ,MGRPORT 7809 , COMPRESS
RMTTRAIL ./dirdat/zx (目标端ogg安装文件的目录)
table nlp.ggtest;
table nlp.表二;
table nlp.表三;(多张表的配置格式)
进程作用:Pump进程运行在数据库源端,其作用非常简单。如果源端使用了本地trail文件,那么Pump进程就会把Trail文件以数据块的形式通过TCP/IP协议发送到目标端,我们下面的配置都是这种方式。Pump进程本质是Extract进程的一种特殊形式,如果不使用Trail文件,那么Extract进程在抽取完数据后,直接投递到目标端
参数详情:
RMTHOST 192.168.2.45 ,MGRPORT 7809 , COMPRESS
灾备端主机IP,管理进程端口号,投递前压缩队列文件
NUMFILES 5000
最多处理5000张表
RMTTRAIL ./dirdat/yb
灾备端保存队列文件的目录(目标端ogg安装文件的目录)
table nlp.ggtest;
table nlp.表二;
table nlp.表三;(多张表的配置格式)autostart
要复制的表

⑤#配置生成定义文件参数

GGSCI (rhel6) 7> edit params defgen
defsfile ./dirdef/defgen.def
userid nlp, password nlp
table nlp.ggtest;
table nlp.表二;
table nlp.表三;(多张表的配置格式)

⑥#增加抽取进程和传输进程(Oracle GoldenGate重建抽取进程前,需要通过info xxx,showch的命令获取当前的checkpoint信息,此步骤非常关键,务必执行准确。)

GGSCI (rhel6) 8> add extract ext_emp,tranlog,threads number(此number以实际的oracle 开启的日志线程为准),begin now
GGSCI (rhel6) 9> add exttrail ./dirdat/zx, extract ext_emp, megabytes 200
GGSCI (rhel6) 10> add extract dp_tab, exttrailsource ./dirdat/zx
GGSCI (rhel6) 11> add rmttrail ./dirdat/zx, extract dp_tab, megabytes 200
GGSCI (rhel6) 12> info all 查看现在已有的进程

⑦#添加表的附加日志

GGSCI (rhel6) 13> dblogin userid nlp password nlp
Successfully logged into database.

⑧GGSCI (rhel6 as goldengate@orcl) 14> add trandata nlp.ggtest

作用: 如果不执行add trandata,insert同步没有问题(ORACLE数据库),但是在同步update或delete操作时,就会因为丢失主键报同步错误。不开启表级的最小附加日志,update的redo信息不记录没有进行更新的字段信息,如主键不更新的话主键不记录在redo中,所以会导致同步失败。(有几张表就要添加几次)

⑨退出ogg操作界面

GGSCI (rhel6 as goldengate@orcl) 15>exit
#生成定义文件
[oracle@rhel6 ogg]$ ./defgen paramfile ./dirprm/defgen.prm

⑩启动投递进程和抽取进程(先把目标端的mgr 进程启动,再启动这一步)

GGSCI (rhel6 as goldengate@orcl) 16>start *
查看进程是否全部启动:
GGSCI (rhel6 as goldengate@orcl) 16>Info all

进程如果没有成功启动,查询未启动的进程日志,分析原因:
GGSCI (rhel6 as goldengate@orcl) 17>view report dp_tab(进程名字)

## 3. PostgreSQL端ogg的安装:(目标端我用root用户进行操作)

在目标端创建目录/postgres9.6/postgresql9.6/ogg 作为ogg的安装目录

3.1 pgsql 环境

创建用于同步的数据库,用户和Schema ,并创建测试表
postgres=# create database zhaoxu;
postgres=# create user zhaoxu superuser password ‘zhaoxu‘;
postgres=# \c zhaoxu zhaoxu
zhaoxu=# create schema zhaoxu;
CREATE SCHEMA
zhaoxu=# \dn
List of schemas
Name | Owner
--------±-------
public | pguser
zhaoxu | zhaoxu
zhaoxu=# CREATE TABLE ggtest
zhaoxu-# (
zhaoxu(# col1 integer NOT NULL,
zhaoxu(# col2 varchar(20),
zhaoxu(# CONSTRAINT pk_ggtest PRIMARY KEY (col1)
zhaoxu(# );
CREATE TABLE
zhaoxu=# \d

3.2 ogg安装

解压ogg tar -xvf ggs_Linux_x64_PostgreSQL_64bit.tar
tar -xvfggs_Linux_x64_PostgreSQL_64bit.tar /postgres9.6/postgresql9.6/ogg(/postgres9.6/postgresql9.6/ogg 为安装目录)

3.3 ogg配置

A.在ogg的安装目录先配置odbc数据源,goldengate 使用ODBC连接Postgres DatabaseA.在ogg的安装目录先配置odbc数据源,goldengate 使用ODBC连接Postgres Database

[pguser@rhel7 ogg]$ cat odbc.ini (放在ogg的安装目录)
[ODBC Data Sources]
GG_Postgres=DataDirect 9.6 PostgreSQL Wire Protocol
[ODBC]
IANAAppCodePage=106
InstallDir=/ogg
[GG_Postgres]
Driver=/ogg/lib/GGpsql25.so
Description=DataDirect 9.6 PostgreSQL Wire Protocol
Database=zhaoxu
HostName=127.0.0.1
PortNumber=5432
LogonID=zhaoxu
Password=zhaoxu

参数详情:
[ODBC]:
IANAAppCodePage指的是字符集的设置 这里的106值得是UTF8,如果是4则为ISO-8859-1,注意这个应该始终和postgres的字符集设置相同,不同字符集对应的值见附件。
InstallDir对应ogg的安装目录
[GG_Postgres]:这里的名称对应的是上边ODBC的别名
Driver这里指向的是ogg安装目录下的lib/GGpsql25.so
Description是描述
Database填写数据库名称
HostName填写本机的hostname,可以解析的即可。
PosrNumber是postgres的监听端口。
LogonID填写postgres的用户名
password填写postgres的密码

B.配置环境变量

export LD_LIBRARY_PATH=/postgres9.6/postgresql9.6/ogg/lib: L D L I B R A R Y P A T H e x p o r t P A T H = LD_LIBRARY_PATH export PATH= LDLIBRARYPATHexportPATH=PATH:/postgres9.6/postgresql9.6/ogg
export ODBCINI=/postgres9.6/postgresql9.6/ogg/odbc.ini

C.配置ogg参数文件

① ./ggsci
②#创建目录
GGSCI (rhel7) 1>create subdirs
③配置mgr进程
GGSCI (rhel7) 3> edit params mgr
PORT 7809
dynamicportlist 7840-7914
动态端口列表的范围从7840到7914。当制定端口被占用或者出现通信故障,管理进程将会从列表中选择下一个端口尝试连接,避免通信端口的单点故障。
autorestart extract ,retries 5,waitminutes 3
PURGEOLDEXTRACTS ./dirdat/
, usecheckpoints, minkeepdays 1
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45

④#启动mgr进程
GGSCI (rhel7) 3> start mgr
⑤查看mgr是否启动
GGSCI (rhel7) 4> info all

⑥#把源端生成的定义文件取到目标端
[root@rhel7 ogg]$ scp oracle@192.168.2.62:/oracle/app/ogg/dirdef/defgen.def /postgres9.6/postgresql9.6/ogg/dirdef
⑦#配置复制进程参数
GGSCI (rhel7) 5> edit params rep1
REPLICAT rep1
SOURCEDEFS ./dirdef/defgen.def
SETENV(PGCLIENTENCODING = “UTF8” )
SETENV(ODBCINI="/ogg/odbc.ini" )
SETENV(NLS_LANG=“AMERICAN_AMERICA.AL32UTF8”)
TARGETDB GG_Postgres,userid zhaoxu ,password zhaoxu
DISCARDFILE ./dirrpt/rep1.dsc
map nlp.ggtest ,target zhaoxu.ggtest;
如果是多张表配置(写法) map nlp.* ,target zhaoxu.*;
进程作用:负责读取目标端trail文件中的内容,并将其解析为DML或 DDL语句,然后应用到目标数据库中.和Extract进程一样,Replicat也有其内部的checkpoint机制,保证重启后可以从上次记录的位置开始恢复而无数据损失的风险.
⑧添加复制进程
GGSCI (rhel7) 6> add replicat rep1, exttrail ./dirdat/zx,nodbcheckpoint(如果有checkpoint: heckpointtable zhaoxu.checkpoint)
⑨启动全部进程
GGSCI (rhel7) 7>start *
⑩#测试连接PostgreSQL数据库
GGSCI (rhel7) 8> dblogin sourcedb gg_postgres userid zhaoxu
Password:
添加checkpoint表
GGSCI (dbserver) 21> edit params ./GLOBALS#添加以下内容
ggschema ogg
checkpointtable ogg.checkpoint
GGSCI (dbserver as ogg@orcl) 2> add checkpointtable ogg.checkpoint

4.测试

当源端和目标端的进程全部启动以及分别能连上数据库,在进行同步测试。

在oracle上用nlp用户登录

SQL> conn nlp/nlp
Connected.
SQL> select * from ggtest;
新增一条数据:SQL> insert into ggtest values(11,’zz’) ;
SQL>commit;提交

在postgresql 用zhaoxu账号登录查询ggtest

数据已同步过来。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值