一. 安装包下载
OGG下载地址
https://www.oracle.com/middleware/technologies/goldengate-downloads.html
PostgreSQL下载地址
https://www.postgresql.org/ftp/source/
参考文档:
How To Replicate Data from Oracle to Postgres Using GoldenGate (Doc ID 1544137.1)
二. 测试环境
| 源端 | 目标端 | |
|---|---|---|
| 操作系统 | RHEL 6.10 | RHEL 6.10 |
| IP | 192.168.56.19 | 192.168.56.70 |
| 数据库版本 | Oracle 11.2.0.4 | PostgreSQL 11.7 |
| OGG版本 | 112103_ggs_Linux_x64_ora11g_64bit | 122022_ggs_Linux_x64_PostgreSQL_64bit |
三. 源端Oracle环境配置
1. 创建OGG用户
# /usr/sbin/useradd -u 7809 -g oinstall ogg
# echo "ogg" | passwd --stdin ogg
ogg用户要加到oinstall组中,否则ogg不能访问redo文件。
2. 创建OGG目录
# mkdir -p /ogg
# chown -R ogg:oinstall /ogg
3. 解压OGG安装包
# unzip 112103_ggs_Linux_x64_ora11g_64bit.zip
# tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /ogg/
# chown -R ogg:oinstall /ogg
4. 配置OGG环境变量
# vi /home/ogg/.bash_profile
export OGG_HOME=/ogg
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$ORACLE_HOME/bin:$OGG_HOME:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib:$OGG_HOME:/lib:/usr/lib
umask 022
需要注意要有ORACLE_SID环境变量,否则不能使用监听服务。
5. 配置Oracle数据库
打开 Oracle 数据库归档模式
SQL> alter system set log_archive_dest_1 = 'LOCATION=/arch' scope=spfile;
SQL> shutdown immediate;
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
开启 force log 和 supplemental log
SQL> alter database force logging;
SQL> alter database add supplemental log data;
创建ogg用户
SQL> create tablespace ogg_tbs datafile '/oradata/orcl/ogg_tbs01.dbf' size 100M autoextend on;
SQL> create user ogg identified by ogg default tablespace ogg_tbs;
SQL> grant dba to ogg;
四. 目标端PostgreSQL环境配置
1. 创建OGG用户
# /usr/sbin/groupadd -g 1000 oinstall
# /usr/sbin/useradd -u 7809 -g oinstall ogg
# echo "ogg" | passwd --stdin ogg
2. 创建OGG目录
# mkdir -p /ogg
# chown -R ogg:oinstall /ogg
3. 解压OGG安装包
# unzip 122022_ggs_Linux_x64_PostgreSQL_64bit.zip
# tar -xvf ggs_Linux_x64_PostgreSQL_64bit.tar -C /ogg/
# chown -R ogg:oinstall /ogg
4. 配置OGG环境变量
# vi /home/ogg/.bash_profile
export OGG_HOME=/ogg
export ODBCINI=/ogg/odbc.ini
export PGBASE=/pgsql/11.7
export PGUSER=postgres
export PGPORT=5432
export PGDATA=$PGBASE/data
export PATH=$PGBASE/bin:$OGG_HOME:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$PGBASE/lib:$OGG_HOME/lib:$OGG_HOME:$LD_LIBRARY_PATH
5. 安装PostgreSQL数据库,已经安装PostgreSQL可忽略此步骤
关闭防火墙
# service iptables stop
# chkconfig iptables off
安装系统包
# yum install wget *readline* *zlib* openssl openssl-devel pam-devel libxml2-devel libxslt-devel python-devel tcl-devel gcc gcc-c++ -y
配置/etc/hosts文件
# vi /etc/hosts
192.168.56.70 oggpg
创建用户postgres
# /usr/sbin/useradd -u 5432 postgres
# echo "postgres" | passwd --stdin postgres
创建PostgreSQL数据库存放目录
# mkdir -p /pgsql/11.7
# chown -R postgres:postgres /pgsql
配置postgres用户环境变量
# vi /home/postgres/.bash_profile
export PGBASE=/pgsql/11.7
export PGUSER=postgres
export PGPORT=5432
export PGDATA=$PGBASE/data
export PATH=$PGBASE/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$PGBASE/lib:$LD_LIBRARY_PATH
安装PostgreSQL
# tar -zxvf postgresql-11.7.tar.gz
# chown -R postgres:postgres postgresql-11.7
# cd postgresql-11.7
# ./configure --prefix=/pgsql/11.7
# gmake world
# gmake install-world
# su - postgres
$ initdb --locale=C --encoding=UTF8
6. 配置PostgreSQL数据库
配置pg_hba.conf文件
[postgres@oggpg ~]$ vi $PGDATA/pg_hba.conf
host all all 192.168.56.0/24 trust
配置postgresql.auto.conf文件
[postgres@oggpg ~]$ vi $PGDATA/postgresql.auto.conf
listen_addresses = '*'
port = 5432
logging_collector = on
启动数据库
[postgres@oggpg ~]$ pg_ctl -D $PGDATA start
PostgreSQL数据库创建ogg用户
[postgres@oggpg ~]$ psql
postgres=# create user ogg SUPERUSER ENCRYPTED PASSWORD 'ogg';
postgres=# CREATE DATABASE orcl OWNER ogg;
postgres=# \c orcl ogg
orcl=# create schema ogg;
创建用于连接PostgreSQL数据库的odbc.ini文件
[root@oggpg ~]# su - ogg
[ogg@oggpg ~]$ vi $OGG_HOME/odbc.ini
[ODBC Data Sources]
GG_Postgres=DataDirect 11 PostgreSQL Wire Protocol
[ODBC]
IANAAppCodePage=106
InstallDir=/ogg
[GG_Postgres]
Driver=/ogg/lib/GGpsql25.so
Description=DataDirect 11 PostgreSQL Wire Protocol
Database=orcl
HostName=192.168.56.70
PortNumber=5432
LogonID=ogg
Password=ogg
五. 源端和目标端创建演示表
本文不涉及数据量较大,需要初始化数据的过程。因此,我们仅在Oracle和PostgreSQL中创建一个简单的表来演示数据的同步过程。
1. 源端Oracle数据库创建测试表
[oracle@test ~]$ sqlplus test/test
SQL> create table ggtest (col1 number, col2 varchar2(20));
SQL> alter table ggtest add primary key (col1);
2. 目标端PostgreSQL数据库创建测试表
[postgres@oggpg ~]$ psql -d orcl -U ogg
orcl=# CREATE TABLE "public"."ggtest"
(
"col1" integer NOT NULL,
"col2" varchar(20),
CONSTRAINT "PK_Col111" PRIMARY KEY ("col1")
);
orcl=# \dt
List of relations
Schema | Name | Type | Owner
--------+--------+-------+-------
public | ggtest | table | ogg
六. 源端配置OGG的MGR进程
创建OGG的工作目录
[root@test ~]# su - ogg
[ogg@test ~]$ cd /ogg
[ogg@test ogg]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.3 14400833 OGGCORE_11.2.1.0.3_PLATFORMS_120823.1258_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Aug 23 2012 20:20:21
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (test) 1> create subdirs
Creating subdirectories under current directory /ogg
Parameter files /ogg/dirprm: already exists
Report files /ogg/dirrpt: created
Checkpoint files /ogg/dirchk: created
Process status files /ogg/dirpcs: created
SQL script files /ogg/dirsql: created
Database definitions files /ogg/dirdef: created
Extract data files /ogg/dirdat: created
Temporary files /ogg/dirtmp: created
Stdout files /ogg/dirout: created
配置 MGR 进程
GGSCI (test) 2> edit param mgr
PORT 7809
GGSCI (test) 3> start mgr
Manager started.
GGSCI (test) 4> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
七. 目标端端配置OGG的MGR进程
创建OGG的工作目录
[root@oggpg ~]# su - ogg
[ogg@oggpg ~]$ cd /ogg
[ogg@oggpg ogg]$ ./ggsci
Oracle GoldenGate Command Interpreter
Version 12.2.0.2.2 OGGCORE_12.2.0.2.0_PLATFORMS_170630.0419
Linux, x64, 64bit (optimized), PostgreSQL on Jun 30 2017 06:27:44
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
GGSCI (oggpg) 1> create subdirs
Creating subdirectories under current directory /ogg
Parameter files /ogg/dirprm: created
Report files /ogg/dirrpt: created
Checkpoint files /ogg/dirchk: created
Process status files /ogg/dirpcs: created
SQL script files /ogg/dirsql: created
Database definitions files /ogg/dirdef: created
Extract data files /ogg/dirdat: created
Temporary files /ogg/dirtmp: created
Credential store files /ogg/dircrd: created
Masterkey wallet files /ogg/dirwlt: created
Dump files /ogg/dirdmp: created
配置 MGR 进程
GGSCI (oggpg) 2> edit param mgr
PORT 7809
GGSCI (oggpg) 3> start mgr
Manager started.
GGSCI (oggpg) 4> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
八. 源端配置OGG的抽取进程和传输进程
配置 Extract 进程
GGSCI (test) 5> edit params ext01
EXTRACT ext01
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
SETENV (TNS_ADMIN="/u01/app/oracle/product/11.2.0/db_1/network/admin")
SETENV (ORACLE_HOME="/u01/app/oracle/product/11.2.0/db_1")
SETENV (ORACLE_SID="orcl")
USERID ogg, PASSWORD ogg
DISCARDFILE /ogg/dirrpt/ext01.dsc,APPEND,MEGABYTES 1024
EXTTRAIL ./dirdat/aa
TABLE test.ggtest;
GGSCI (test) 6> ADD EXTRACT ext01, TRANLOG, BEGIN NOW
GGSCI (test) 7> ADD EXTTRAIL ./dirdat/aa, EXTRACT EXT01
GGSCI (test) 8> start extract ext01
GGSCI (test) 9> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXT01 00:02:30 00:00:08
配置 Pump 进程
GGSCI (test) 10> edit params dp01
EXTRACT dp01
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
PASSTHRU
RMTHOST 192.168.56.70, MGRPORT 7809
RMTTRAIL /ogg/dirdat/pa
TABLE test.ggtest;
GGSCI (test) 11> ADD EXTRACT dp01, EXTTRAILSOURCE /ogg/dirdat/aa
GGSCI (test) 12> ADD RMTTRAIL /ogg/dirdat/pa, EXTRACT dp01, MEGABYTES 5
GGSCI (test) 13> start dp01
GGSCI (test) 14> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING DP01 00:00:00 00:00:00
EXTRACT RUNNING EXT01 00:00:00 00:00:10
生成define文件
GGSCI (test) 15> edit params defgen
defsfile ./dirdef/defgen.def
userid ogg, password ogg
TABLE test.ggtest;
GGSCI (test) 16> exit
[ogg@test ogg]$ ./defgen paramfile ./dirprm/defgen.prm
***********************************************************************
Oracle GoldenGate Table Definition Generator for Oracle
Version 11.2.1.0.3 14400833 OGGCORE_11.2.1.0.3_PLATFORMS_120823.1258
Linux, x64, 64bit (optimized), Oracle 11g on Aug 23 2012 16:58:29
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
Starting at 2020-03-26 20:57:43
***********************************************************************
Operating System Version:
Linux
Version #1 SMP Thu May 24 18:18:25 EDT 2018, Release 2.6.32-754.el6.x86_64
Node: test
Machine: x86_64
soft limit hard limit
Address Space Size : unlimited unlimited
Heap Size : unlimited unlimited
File Size : unlimited unlimited
CPU Time : unlimited unlimited
Process id: 8450
***********************************************************************
** Running with the following parameters **
***********************************************************************
defsfile ./dirdef/defgen.def
userid ogg, password ***
TABLE test.ggtest;
Retrieving definition for TEST.GGTEST
Definitions generated for 1 table in ./dirdef/defgen.def
传送到目标端
[ogg@test ogg]$ scp /ogg/dirdef/defgen.def 192.168.56.70:/ogg/dirdef
九. 目标端端配置OGG的应用进程
目标端添加checkpiont表
GGSCI (oggpg) 1> dblogin sourcedb GG_Postgres userid ogg
Password:
2020-03-26 21:13:44 INFO OGG-03036 Database character set identified as UTF-8. Locale: root.
2020-03-26 21:13:44 INFO OGG-03037 Session character set identified as UTF-8.
Successfully logged into database.
GGSCI (oggpg as ogg@GG_Postgres) 2> add checkpointtable ogg.checkpointtab
Successfully created checkpoint table ogg.checkpointtab.
目标端配置Replicat 进程
GGSCI (oggpg as ogg@GG_Postgres) 3> EDIT PARAMS rep01
REPLICAT rep01
SOURCEDEFS /ogg/dirdef/defgen.def
SETENV(PGCLIENTENCODING = "UTF8" )
SETENV(ODBCINI="/ogg/odbc.ini" )
SETENV(NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
TARGETDB GG_Postgres,userid ogg,password ogg
DISCARDFILE /ogg/dirrpt/rep_aa.rpt, append
MAP test.ggtest, TARGET public.ggtest, COLMAP (COL1=col1,COL2=col2);
GGSCI (oggpg as ogg@GG_Postgres) 4> add replicat rep01,exttrail /ogg/dirdat/pa,begin now,checkpointtable ogg.checkpointtab
GGSCI (oggpg as ogg@GG_Postgres) 5> start rep01
GGSCI (oggpg as ogg@GG_Postgres) 6> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REP01 00:00:00 00:00:02
十. 验证数据同步
GGSCI (test) 1> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING DP01 00:00:00 00:00:04
EXTRACT RUNNING EXT01 00:00:00 00:00:08
GGSCI (oggpg as ogg@GG_Postgres) 7> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REP01 00:00:00 00:00:09
[oracle@test ~]$ sqlplus test/test
SQL> insert into ggtest values (1,'hello world!');
SQL> insert into ggtest values (2,'你好');
SQL> commit;
[postgres@oggpg ~]$ psql -d orcl -U ogg
psql (11.7)
Type "help" for help.
orcl=# select * from ggtest;
col1 | col2
------+--------------
1 | hello world!
2 | 你好
(2 rows)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




