gg oracle tjs 同步_使用ogg实现oracle到postgresql表的实时同步

本文介绍了如何在Oracle 11.2.0.4和PostgreSQL 10.6环境下,通过GoldenGate (GG) 安装、配置,实现数据库之间的实时同步。首先,分别在源端Oracle和目标端PostgreSQL上安装GG,并进行相应的数据库配置,如打开归档模式、设置附加日志等。然后,创建并配置OGG的抽取、传送和复制进程,以及ODBC数据源,确保数据能够正确传输。最后,通过定义文件和启动进程完成了Oracle到PostgreSQL的表同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:oracle 11.2.0.4+centos6.9,postgresql10.6+centos6.9

1.下载OGG

下载安装包如下:122022_ggs_Linux_x64_PostgreSQL_64bit.zip,V861007-01.zip

2.源端(oracle)ogg安装

$ cd /data/$mkdirogg

$ cd/data/software

$unzip V861007-01.Zip

$ cd fbo_ggs_Linux_x64_shiphome/Disk1/$ export DISPLAY=xxx.xxx.xxx.xxx:0.0$ ./runInstaller

执行命令后,会出现图形化界面

选择安装对应版本oracle的ogg

指定ogg安装路径,配置mgr参数

报错:

只是因为我已经安装过一次了,因此上一次OGG安装目录中已经存在于OGG的安装清单(inventory.xml)里面,解决方法如下:

# find / -name inventory.xml

#su -oracle

$vi /oracle/oraInventory/ContentsXML/inventory.xml

#删除如下一行即可

删除后,点击cancel取消,再次进入图形化界面即可。

3.源端OGG配置

打开归档

alter database archivelog;

打开允许ogg复制,打开附件日志(UPDATE更新redo会记录所有的栏位,会增加redo量)

alter system set enable_goldengate_replication=true;

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;--全库打开附件日志,后续不需要对单独的表增加附件日志--也可以用如下方法,打开最小附加日志,之后对需要OGG的表单独增加附加日志

alter database add supplemental logdata;add trandata user.table --这一句后续在OGG中执行

修改环境变量

$ vi .bash_Profile

export GGATE-/data/ogg

export PATH=$PATH:$GGATE

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GGATE

新增ogg用户并赋权

create tablespace ggs_data datafile '/data/db/ggs_data01.dbf'size 1g;create user ggs_owner identified by xxxxxx default tablespace ggs_data temporary tablespace temp quota unlimited onggs_data;grant connect, resource TOggs_owner;GRANT select any dictionary, select any table TOggs_owner;grant flashback any table TOggs_owner;grant execute on dbms_flashback TO ggs_owner;

新增ogg抽取进程

edit param mgr

add extract ext_demo,tranlog,begin now

edit param ext_demo--------------------------------------------------------------------------extract ext_demo

setenv (NLS_LANG="TRADITIONAL CHINESE_TAIWAN.AL32UTF8")

setenv (ORACLE_SID=db)

userid ggs_owner,password xxxxxx

exttrail/data/ogg/dirdat/ed

table USER01.TEST01;--------------------------------------------------------------------------

add exttrail /data/ogg/dirdat/ed,extract ext_demo

新增ogg传送进程

add extract pup_demo exttrailsource /data/ogg/dirdat/ed

edit param pup_demo---------------------------------------------------------extract pup_demo

setenv (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

setenv (ORACLE_SID=db)

rmthost xxx.xxx.xxx.xxx,mgrport7809,compress

rmttrail/data/ogg/dirdat/rd

table USER01.TEST01;---------------------------------------------------------add rmttrail/data/ogg/dirdat/rd,extract pup_demo

生成源端定义文件(oracle和pg的数据类型不同,感觉是为了类型转换,没有测试如果不使用会如何)

vi ./dirprm/defgen.prm

DEFSFILE ./dirdef/defgen_postgres.prm;

userid ggs_owner,password xxxxxx;

table USER01.TEST01;

defgen paramfile ./dirprm/defgen.prm

4.postgresql端OGG安装与配置(以下的所有$代表postgres用户)

解压安装

$ cd /data/software/$unzip 122022_ggs_Linux_x64_PostgreSQL_64bit.zip$ cd/data/$mkdirogg

$mv software/ggs_Linux_x64_PostgreSQL_64bit.tar ogg/$tar vxf ggs_Linux_x64_PostgreSQL_64bit.tar

创建子目录

$ cd /data/ogg

$ ggsci

create subdirs

创建DSN(database source name)

ogg for pg使用的是ODBC来连接数据库,因此需要指明ODBC dirver

[ODBC Data Sources]:定义的数据库别名,后面的【postgre】部分与之对应

IANAAppCodePage:字符集,应该与postgresql数据库的字符集对应,106代表的是UTF-8

$ cd /data/ogg

$viodbc.ini----------------------------------------------------[ODBC Data Sources]

postgre=DataDirect 10.6PostgreSQL Wire Protocol

[ODBC]

IANAAppCodePage=106InstallDir=/data/ogg

[postgre]

Driver=/data/ogg/lib/GGpsql25.so

Description=DataDirect 10.6PostgreSQL Wire Protocol

Database=pgdb

HostName=xxx.xxx.xxx.xxx

PortNumber=5432LogonID=ggs_owner

Password=xxxxxx--------------------------------------------------

修改postgres环境变量

重点是动态连接库和ODBCINI的环境变量

export GGATE=/data/ogg

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GGATE/lib

export PATH=$PATH:$PGHOME/bin/:$GGATE

export ODBCINI=$GGATE/odbc.ini

进入pg数据库创建测试用户(其实应该在创建odbc.ini之前执行)

$ psql

create database oggtest;

create user ggs_owner superuser password'xxxxxx';

\c oggtest ggs_owner

create schema ggs_owner;

create table test01(id int primary key,name varchar(10),age int);

修改mgr参数

$ cd $GGATE

$ ggsci

edit param mgr---------------------PORT7089

---------------------

新增checkpoint

需要注意,sourcedb必须与odbc.ini中配置的ODBC Data source相同,这样ogg才可以找到要登录的数据库(加入一个主机上有好几个数据库),因此odbc.ini可以用来区分复制进程所属数据库

# ogg中执行如下

dblogin sourcedb postgre userid ggs_owner

add checkpointtable ggs_owner.checkpointtab

新增复制进程

经测试,ODBCINI无需写入参数环境变量中,因为在postgres环境变量中已设定

$ cd $GGATE

$mkdirdircard

edit param rep_demo----------------------------------------------------------------replicat rep_demo

SOURCEDEFS ./dirdef/defgen_postgres.prm

SETENV(PGCLIENTENCODING= "UTF8")

SETENV(ODBCINI="/ogg/odbc.ini")

SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

TARGETDB postgre,userid ggs_owner,password xxxxxx

DISCARDFILE ./discard/rep_demo.txt

map user01.test01 ,target ggs_owner.test01;-----------------------------------------------------------

add replicat rep_demo,exttrail /data/ogg/dirdat/rd,begin now,checkpointtable ggs_owner.checkpointtab

将定义文件传送过来

scp oracle@xxx.xxx.xxx.xxx:/data/ogg/dirdef/defgen_postgres.prm /data/ogg/dirdef

开启进程并测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值