OGG FOR ORACLE TO POSTGRESQL搭建教程(超详细)

本文详细记录了从Oracle源端到PostgreSQL目标端搭建OGG数据同步工具的过程,包括安装、配置、用户创建、驱动安装,以及遇到的问题和解决方案,适合OGG初学者参考。

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

最近公司业务需要安装个OGG做数据同步,也是踩了很多坑花了四天才搭建好,网上相关的帖子并不是很多,一些细节问题被提及的也很少。所以整理了下自己这次搭建OGG工具的经验,以及其中可能会遇到的一些坑及相关解决方法。

oracle源端和postgresql目标端服务器都要安装对应的OGG,postgresql还需额外安装ODBCPostgres驱动

OGG下载地址:https://www.oracle.com/middleware/technologies/goldengate-downloads.html

下载对应OGG软件分别上传至各自服务器

1.1.创建GoldenGate操作系统用户
useradd ogg
passwd ogg
1.2.创建GoldenGate安装目录
mkdir -p /data/ogg
chown -R ogg:ogg /data/ogg
1.3.安装GoldenGate

将下载的oracle对应的OGG软件移动至 /data/ogg下,执行以下代码

unzip fbo_ggs_Linux_x64_ora11g_64bit.tar.zip
tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /data/ogg
1.4.配置GoldenGate环境变量

oracle默认安装在 /data目录下

export GGATE=/data/ogg
export ORACLE_BASE=/data
export ORACLE_HOME=/data/oracle
export PATH=$PATH:$GGATE:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GGATE:$LD_LIBRARY_PATH
alias sqlplus='rlwrap sqlplus'
alias ggsci='rlwrap ggsci'
1.5.配置Oracle数据库

打开数据库归档

SQL> alter system set log_archive_dest_1 = 'LOCATION=/data/arch' scope = spfile;
SQL> shutdown immediate;
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;

# 查看归档模式
SQL> archive log list

# 还需要开启 force log 和 supplemental log
SQL> alter database force logging;
SQL> alter database add SUPPLEMENTAL log data;

# 查询结果
SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
NAME   OPEN_MODE        FOR SUPPLEME
--------- -------------------- --- --------
ORA235   READ WRITE        YES YES
1.6.oracle创建用户ogg
# 切换oracle用户
su - oracle

# 进入sql编辑模式
sqlplus / as sysdba

# 建议使用单独的表空间存放 GoldenGate 数据
create tablespace tsp_ogg datafile '/data/oracle/data/ogg01.dbf' size 512M autoextend on;

# 创建 GoldenGate 用户并赋权
create user ogg identified by ogg default tablespace tsp_ogg;
grant dba to ogg;

# 严谨一些;这样赋权
grant connect, resource TO ogg;
grant select any dictionary, select any table TO ogg;    
grant flashback any table TO ogg;
grant execute on dbms_flashback TO ogg;
1.7.创建GoldenGate的工作目录
# 进入ogg安装目录下
cd /data/ogg
 
# 执行ggsci,若报错,参照文后错误处理方式
ggsci

# ggsci下执行代码创建工作目录
GGSCI (oracle221) 1> create subdirs

Creating subdirectories under current directory /data/ogg
Parameter files                /data/ogg/dirprm: already exists
Report files                   /data/ogg/dirrpt: created
Checkpoint files               /data/ogg/dirchk: created
Process status files           /data/ogg/dirpcs: created
SQL script files               /data/ogg/dirsql: created
Database definitions files     /data/ogg/dirdef: created
Extract data files             /data/ogg/dirdat: created
Temporary files                /data/ogg/dirtmp: created
Stdout files                   /data/ogg/dirout: created

如执行ggsci时报错:-bash: ggsci: command not found

则为环境变量非永久变量导致,执行以下代码重新设置环境变量即可解决

export PATH=/data/oracle/product/11.2.0/bin:$PATH:/data/ogg
export LD_LIBRARY_PATH=/data/oracle/product/11.2.0/lib:/data/ogg/lib
1.8.配置进程组

负责启动GoldenGate进程,以及启动动态进程,管理trail文件,错误信息。

# 编辑参数文件
GGSCI (oracle221) 2> edit params mgr

# 复制如下内容至文件内,酌情修改参数保存
PORT 7809
DYNAMICPORTLIST 7800-8000											//指定服务监听端口;默认端口为7809
AUTOSTART ER *														//动态端口.可以制定最大256个可用端口的动态列表
AUTORESTART EXTRACT *,WAITMINUTES 2, RESETMINUTES 5					//自动重启参数设置
PURGEOLDEXTRACTS /data/ogg/dirdat/*,USECHECKPOINTS,MINKEEPDAYS 3 	//定期清理trail文件设置
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
SYSLOG ERROR,WARN

# 启动mgr
GGSCI (oracle221) 3> start mgr
Manager started.

# 查看详情,正常启动状态为RUNNING
GGSCI (oracle221) 4> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING 
1.9.配置Extract进程

负责抓取需要传输数据,下面代码为配置抽取进程并启动

# 编辑参数文件
GGSCI (oracle221) 5> edit params EORA_1

# 复制如下内容至文件内,酌情修改参数保存
EXTRACT EORA_1
SETENV (NLS_LANG=AMERICAN_AMERICA.UTF8)							
SETENV (ORACLE_HOME="/data/oracle")									//Oracle环境变量
SETENV (ORACLE_SID="oral")											//oracle_sid
USERID ogg, PASSWORD ogg											//数据库用户、密码	
DISCARDFILE /data/ogg/dirrpt/EORA_1.dsc,APPEND,MEGABYTES 1024
EXTTRAIL /data/ogg/dirdat/aa 
TABLE lottu.*;														//指定的表名

# 创建 extract 组;
GGSCI (oracle221) 6> ADD EXTRACT EORA_1, TRANLOG, BEGIN NOW
EXTRACT added.

# 创建本地 trail 文件
GGSCI (oracle221) 7> ADD EXTTRAIL /data/ogg/dirdat/aa, EXTRACT EORA_1, MEGABYTES 5
EXTTRAIL added.

# 启动extract进程
GGSCI (oracle221) 8> start extract eora_1
Sending START request to MANAGER ...
EXTRACT EORA_1 starting

# 查看全部进程
GGSCI (oracle221) 9> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                           
EXTRACT     RUNNING     EORA_1      00:00:33      00:00:0

如果忘记ORACLE_SID是什么可以在oracle下执行如下sql语句查询

select instance_name from  V$instance;
1.10.配置Pump进程

extract进程负责将抓取的数据写入本地trail文件;而需要Pump进程把trail文件传输到目标端

# 编辑参数文件
GGSCI (oracle221) 10> EDIT PARAMS PORA_1

# 复制如下内容至文件内,酌情修改参数保存
EXTRACT PORA_1
SETENV (NLS_LANG=AMERICAN_AMERICA.UTF8)
PASSTHRU
RMTHOST 192.168.11.xxx, MGRPORT 7809							//目标服务器和端口
RMTTRAIL /data/ogg/dirdat/pa
TABLE lottu.*;

# 用 add extract 指定本地 trail 文件
ADD EXTRACT PORA_1, EXTTRAILSOURCE /data/ogg/dirdat/aa

# 用 add rmttrail 指定远程 trail 文件
ADD RMTTRAIL /data/ogg/dirdat/pa, EXTRACT PORA_1, MEGABYTES 5

# 启动Pump 进程
START EXTRACT PORA
1.11.生成define文件

在异构的同步复制;需要生成define文件。用于数据兼容不同数据库。

# 编辑参数文件
GGSCI (oracle221) 16> edit params defgen

# 参数文件内容
defsfile ./dirdef/defgen.def
userid ogg, password ogg
TABLE lottu.*;

# 退出ggsci命令
GGSCI (oracle221) 17> exit

# root用户下生成文件
defgen paramfile ./dirprm/defgen.prm

# 传送到目标端
scp /data/ogg/dirdef/defgen_postgres.prm  ogg@192.168.10.15:/data/ogg/dirdef

二.目标端(postgresql)配置OGG

2.1.创建GoldenGate操作系统用户
useradd ogg
passwd ogg
2.2.创建GoldenGate安装目录
mkdir -p /data/ogg
chown -R ogg:ogg /data/ogg
2.3.安装GoldenGate

将下载的postgresql对应的OGG软件移动至 /data/ogg下,执行以下代码

unzip 122022_ggs_Linux_x64_PostgreSQL_64bit.zip 
tar -xvf ggs_Linux_x64_PostgreSQL_64bit.tar -C /data/ogg
2.4.配置GoldenGate环境变量
export GGATE=/data/ogg
export PGHOME=/opt/pgsql10
export PGDATA=/data/postgres/data1                
export PATH=$PGHOME/bin:$HOME/bin:$GGATE:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$GGATE/lib:$LD_LIBRARY_PATH
export ODBCINI=$GGATE/odbc.ini
alias ggsci='rlwrap ggsci'
2.5.创建复制用户
# 切换postgresql用户
su - postgres

# 进入sql编辑模式
psql

# 执行如下语句,进入pg数据库创建测试用户
$ psql
create database oggtest;
create user ogg superuser password 'ogg';
\c oggtest ogg
create schema ggs_owner;
create table test01(id int primary key,name varchar(10),age int);
2.6.创建DSN

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

$ cd /data/ogg
$ vi odbc.ini

复制粘贴下面内容,修改参数,保存

[ODBC Data Sources]										//定义的数据库别名,后面的【postgre】部分与之对应
GG_Postgres=DataDirect 10.6 PostgreSQL Wire Protocol		

[ODBC]
IANAAppCodePage=106										//字符集,应该与数据库的字符集对应,106代表UTF-8
InstallDir=/data/ogg									//ogg安装目录

[GG_Postgres]
Driver=/data/ogg/lib/GGpsql25.so						//OGG安装包里有内置ODBC驱动
Description=DataDirect 10.6 PostgreSQL Wire Protocol	//介绍
Database=postgres										//表空间
HostName=localhost										//一般是本地地址
PortNumber=5432											//端口
LogonID=postgres										//数据库用户名
Password=postgres										//数据库密码
--------------------------------------------------
2.7.创建GoldenGate工作目录
# 进入ogg安装目录
cd /data/ogg

# 进入ggsci,如报错,参考文后对应解决方案
ggsci

# 创建工作目录
GGSCI (oracle221) 1> create subdirs

如执行ggsci时报错:-bash: ggsci: command not found

则为环境变量非永久变量导致,执行以下代码重新设置环境变量即可解决

export PATH=/usr/pgsql-12/bin:$PATH:/data/ogg
export LD_LIBRARY_PATH=/usr/pgsql-12/lib:/data/ogg/lib
2.8.配置MGR进程组
# 编辑mgr
GGSCI (oracle221) 1>EDIT param mgr

# 复制以下内容,保存(此端口要与源端Pump进程里配置的对应)
PORT 7809

# 启动mgr
GGSCI (oracle221) 2>start mgr
2.9.添加checkPoint表

为了保证源和目标端在传数据的时候不会重复或者少传,在目标端添加checkpoin表

GGSCI (oracle221) 1>dblogin sourcedb GG_Postgres userid ogg
GGSCI (oracle as postgres@GG_Postgres) 4>add checkpointtable ogg.checkpointtab

若执行dblogin后报错如下内容,则为环境变量失效(默认没有配置永久环境变量)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NCrYwASk-1629441680703)(file:////tmp/wps-fangqian/ksohtml/wpsvwlOGW.jpg)]

解决方法:退出到root用户,执行如下代码重新配置odbc.ini环境变量即可解决

export ODBCINI=/data/ogg/odbc.ini
2.10.配置Replicat进程
# 编辑参数文件
GGSCI (lottu02) 1> EDIT PARAMS RORA_1

# 复制如下内容,酌情修改参数,保存
REPLICAT RORA_1
SOURCEDEFS /data/ogg/dirdef/defgen.def				//之前源端传过来的文件
SETENV(PGCLIENTENCODING = "UTF8" )
SETENV(ODBCINI="/data/ogg/odbc.ini" )				//odbc.ini路径配置
SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
TARGETDB GG_Postgres,userid ogg,password ogg		//数据库,用户,密码
DISCARDFILE /data/ogg/dirrpt/RORA_aa.rpt, append
MAP lottu.*, TARGET lottu.*;						//源表空间,目标表空间

# 添加 Replicat 进程
GGSCI (lottu02) 1> add replicat RORA_1,exttrail /data/ogg/dirdat/pa,begin now,checkpointtable ogg.checkpointtab

# 启动 Replicat 进程
GGSCI (lottu02) 1> start REPLICAT RORA_1

# 查看全部进程
GGSCI (lottu02) 1> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                           
REPLICAT    RUNNING     RORA_1      00:00:00      00:00:05  

三.验证

此时双端状态如下,可自行插入数据进行测试

# 源端
GGSCI (oracle221) 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                           
EXTRACT     RUNNING     EORA_1      00:00:00      00:00:02    
EXTRACT     RUNNING     PORA_1      00:00:00      00:00:09    

# 目标端
GGSCI (lottu02) 2> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                           
REPLICAT    RUNNING     RORA_1      00:00:00      00:00:03  

# 测试同步oracle插入数据
insert into tbl_lottu values (1001,'lottu');

# 测试同步PostgreSQL查询数据
lottu=> select * from tbl_lottu;
  id  | name  
------+-------
 1001 | lottu

四.相关驱动安装

postgresql端需要额外安装OdbcPostgresql驱动,如下为安装方法

# 安装UnixODBC(也可不必安装,OGG安装包自带ODBC驱动)
yum install -y unixODBC.x86_64
#验证安装
rpm -qa | grep postgresql-odbc

# 安装PostgresqlODBC
yum install -y postgresql-odbc.x86_64
验证安装
rpm -qa | grep postgresql-odbc
1.配置odbcinst.ini
# 查看并编辑参数文件
vim /etc/odbcinst.ini

# 文件内内容大概如下,可手动复制和修改
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver      = /usr/lib64/psqlodbcw.so
Setup       = /usr/lib64/libodbcpsqlS.so
Driver64    = /usr/lib64/psqlodbcw.so
Setup64     = /usr/lib64/libodbcpsqlS.so
FileUsage   = 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.配置odbc
# 编辑参数文件
vim /etc/odbc.ini

# 复制如下内容编辑并保存
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[GG_Postgres]
Description = Test to pg
Driver = PostgreSQL
Database = postgres
Servername = localhost
UserName = postgres
Password = admin
Port = 5432
ReadOnly = 0
ConnSettings = set client_encoding to UTF8
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.登录测试
# 使用ODBC登录Postgresql数据库
isql postgres 用户名 密码

# 登录成功会有如下提示
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 
4.报错处理

若报如下错,则安装ODBC驱动缺少环境,执行如下代码即可解决

./configure --x-includes=/usr/include/X11 --x-libraries=/usr/lib/X11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值