您的位置:首页 > 数据库 > Oracle

【Oracle】Oracle到PostgreSQL的OGG同步配置

2015-12-21 14:58 561 查看

前一阵子做的从Oracle实时同步到PostgreSQL,查到的资料很少,后经查询MOS发现有几个OGG的小版本支持Oracle到PostgreSQL的同步,过程整理后跟大家分享一下。

测试环境:
Oracle 11.2.0.4
PostgreSQL:9.3.9

OS:OEL 5.8 x64
OGG:11.2.1.0.30

1.源端检查以下环境变量

ORACLE_HOME

ORACLE_SID

LD_LIBRARY_PATH

2.检查源端归档情况,如果没有,开启归档

alter system set log_archive_dest='LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=both sid='*';

shutdown immediate

startup mount

alter database archivelog;

alter database open;

3.源库开启附加日志创建goldengate用户并授权

alter database add supplemental log data;
create user goldengate identified by goldengate;
grant dba to goldengate;

4.源端解压ogg软件,并配置以下环境变量加到.bash_profile中。

export PATH=$PATH:/home/oracle/ggs

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/home/oracle/ggs/lib

5.源端create subdirs

GGSCI (test) 1> create subdirs

Creating subdirectories under current directory /home/oracle/ggs

Parameter files /home/oracle/ggs/dirprm: already exists

Report files /home/oracle/ggs/dirrpt: created

Checkpoint files /home/oracle/ggs/dirchk: created

Process status files /home/oracle/ggs/dirpcs: created

SQL script files /home/oracle/ggs/dirsql: created

Database definitions files /home/oracle/ggs/dirdef: created

Extract data files /home/oracle/ggs/dirdat: created

Temporary files /home/oracle/ggs/dirtmp: created

Stdout files /home/oracle/ggs/dirout: created

6.源端配置mgr进程

GGSCI (test) 2> edit param mgr
加个简单参数即可

PORT 7809

7.源端启动mgr

GGSCI (test) 3> start mgr
GGSCI (test) 4> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

8.目标端建一个oracle用户,并部署ogg软件

mkdir ggs

cd ggs

tar xvf *.tar

[oracle@edb1 ggs]$ export LD_LIBRARY_PATH=/home/oracle/ggs/lib

9.目标端配置odbc.ini文件

[ODBC Data Sources]
GG_Postgres=DataDirect 9.3 PostgreSQL Wire Protocol
[ODBC]
IANAAppCodePage=106
InstallDir=/home/oracle/ggs
[GG_Postgres]
Driver=/home/oracle/ggs/lib/GGpsql25.so
Description=DataDirect 9.3 PostgreSQL Wire Protocol
Database=badly9db
HostName=edb1.test.com
PortNumber=5432
LogonID=badly9
Password=badly9
参数说明

[ODBC Data Sources]里边配置该ODBC的别名,本文件中也就是GG_Postgres

[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的密码

之后再指定环境变量ODBCINI,加入到oracle用户.bash_profile中。并生效(odbc.ini建在哪里就改成对应的路径)

export ODBCINI=/home/oracle/ggs/odbc.ini

10.目标端create subdirs

[oracle@edb1 ggs]$ ./ggsci

GGSCI (edb1) 1> create subdirs

Creating subdirectories under current directory /home/oracle/ggs

Parameter files /home/oracle/ggs/dirprm: already exists

Report files /home/oracle/ggs/dirrpt: created

Checkpoint files /home/oracle/ggs/dirchk: created

Process status files /home/oracle/ggs/dirpcs: created

SQL script files /home/oracle/ggs/dirsql: created

Database definitions files /home/oracle/ggs/dirdef: created

Extract data files /home/oracle/ggs/dirdat: created

Temporary files /home/oracle/ggs/dirtmp: created

Stdout files /home/oracle/ggs/dirout: created

11.目标端配置mgr

GGSCI (edb1) 2> edit param mgr
PORT 7809
启动mgr

GGSCI (edb1) 3> start mgr

Manager started.

GGSCI (edb1) 4> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

12.在oracle中和postgres中创建测试表

Oracle

SQL> connect jp/jp

Connected.

SQL> create table ggtest (col1 number, col2 varchar2(20));

Table created.

SQL> alter table ggtest add primary key (col1);

Table altered.
Postgres

CREATE TABLE "public"."ggtest"
(
"col1" integer NOT NULL,
"col2" varchar(20),
CONSTRAINT "PK_Col111" PRIMARY KEY ("col1")
)

13.确认Oracle端OGG连接

GGSCI (test) 8> dblogin userid goldengate, password goldengate
Successfully logged into database.

GGSCI (test) 9> list tables *
JP.GGTEST

Found 1 tables matching list criteria.

GGSCI (test) 10> capture tabledef JP.GGTEST
Table definitions for JP.GGTEST:
COL1 NUMBER NOT NULL PK
COL2 VARCHAR (20)

14.确认Postgres端OGG连接

GGSCI (edb1) 4> dblogin sourcedb gg_postgres userid badly9
Password:

2015-12-17 16:51:18 INFO OGG-03036 Database character set identified as UTF-8. Locale: en_US.

2015-12-17 16:51:18 INFO OGG-03037 Session character set identified as UTF-8.
Successfully logged into database.

GGSCI (edb1) 5> list tables *
public.ggtest

Found 1 tables matching list criteria.

GGSCI (edb1) 3> capture tabledef "public"."ggtest"
Table definitions for public.ggtest:
col1 NUMBER (10) NOT NULL PK
col2 VARCHAR (20)

15.源端创建extract进程(测试使用不建立pump了)

GGSCI (test) 4> edit param epos
EXTRACT epos

USERID goldengate, PASSWORD goldengate

RMTHOST edb1, MGRPORT 7809

RMTTRAIL ./dirdat/ep

TABLE jp.ggtest;
GGSCI (test) 5> add extract epos, tranlog, begin now

EXTRACT added.

GGSCI (test) 6> add exttrail ./dirdat/ep, extract epos, megabytes 5

EXTTRAIL added.

GGSCI (test) 7> start epos

Sending START request to MANAGER ...

EXTRACT EPOS starting

GGSCI (test) 8> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

EXTRACT RUNNING EPOS 00:00:00 00:00:05

16.源端创建DEFINITIONS文件

GGSCI (test) 10> edit param defgen

DEFSFILE ./dirdef/GGTEST.def

USERID goldengate, password goldengate

TABLE JP.GGTEST;

[oracle@test ggs]$ ./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 2015-12-17 16:48:09

***********************************************************************

Operating System Version:

Linux

Version #1 SMP Wed May 26 10:38:10 EDT 2010, Release 2.6.18-194.3.1.0.2.el5

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: 16880

***********************************************************************

** Running with the following parameters **

***********************************************************************

DEFSFILE ./dirdef/GGTEST.def

USERID goldengate, password ********

TABLE JP.GGTEST;

Retrieving definition for JP.GGTEST

Definitions generated for 1 table in ./dirdef/GGTEST.def

Content of the Defgen File:

[oracle@test ggs]$ more ./dirdef/GGTEST.def

*+- Defgen version 2.0, Encoding UTF-8

*

* Definitions created/modified 2015-12-17 16:48

*

* Field descriptions for each column entry:

*

* 1 Name

* 2 Data Type

* 3 External Length

* 4 Fetch Offset

* 5 Scale

* 6 Level

* 7 Null

* 8 Bump if Odd

* 9 Internal Length

* 10 Binary Length

* 11 Table Length

* 12 Most Significant DT

* 13 Least Significant DT

* 14 High Precision

* 15 Low Precision

* 16 Elementary Item

* 17 Occurs

* 18 Key Column

* 19 Sub Data Type

*

Database type: ORACLE

Character set ID: UTF-8

National character set ID: UTF-16

Locale: neutral

Case sensitivity: 14 14 14 14 14 14 14 14 14 14 14 14 11 14 14 14

*

Definition for table JP.GGTEST

Record length: 262

Syskey: 0

Columns: 2

COL1 64 50 0 0 0 1 0 50 50 50 0 0 0 0 1 0 1 2

COL2 64 200 56 0 0 1 0 200 200 0 0 0 0 0 1 0 0 0

End of definition

之后通过scp将def文件传输到目标端

scp ./dirdef/GGTEST.def edb1:/home/oracle/ggs/dirdef/GGTEST.def

17.目标端配置Replicat进程

GGSCI (edb1) 1> edit param rpos
REPLICAT rpos
SOURCEDEFS ./dirdef/GGTEST.def
SETENV ( PGCLIENTENCODING = "UTF8" )
SETENV (ODBCINI="/home/oracle/ggs/odbc.ini" )
SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
TARGETDB GG_Postgres, USERID badly9, PASSWORD badly9
DISCARDFILE ./dirrpt/diskg.dsc, purge
MAP JP.GGTEST, TARGET public.ggtest, COLMAP (COL1=col1,COL2=col2);
PGCLIENTENCODING 指的是PG的字符集

GGSCI (edb1) 2> add replicat rpos, NODBCHECKPOINT, exttrail ./dirdat/ep

REPLICAT added.

GGSCI (edb1) 3> start rpos

Sending START request to MANAGER ...

REPLICAT REPKG starting

GGSCI edb1) 4> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

REPLICAT RUNNING RPOS 00:00:00 00:00:07

18.测试同步

Oracle

SQL> insert into ggtest values(1,'test');

1 row created.

SQL> commit;

Commit complete.
Postgres

[pg@edb1 ~]$ psql -d badly9db -h 192.168.70.10 -p 5432 -U badly9 -W
Password for user badly9:
psql (9.3.9)
Type "help" for help.

badly9db=> select count(*) from public.ggtest;
count
-------
1
(1 row)

badly9db=> select * from public.ggtest;
col1 | col2
------+------
1 | test
(1 row)
同步成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: