暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle19C到antdb(PG系列)的OGG同步研究测试

IT那活儿 2025-04-23
85

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!


实验环境

1.1 源端Oracle环境

  • 操作系统

    Red Hat Enterprise Linux Server release 7.6 (Maipo)

  • 主机IP

    192.168.20.112

  • 数据库类型及版本

    Oralce19.3.0.0.0

1.2 目标端antdb环境

  • 操作系统

    Red Hat Enterprise Linux Server release 7.6 (Maipo)

  • 数据库类型及版本

    PostgreSQL 13.3 ADB 6.3.18  on x86_64-pc-linux-gnu

  • 主机IP

    192.168.20.110/111/112(110为主,ogg部署在110上)


同步表信息

将Oracle库中OGG用户下的T1\T2\T3\T4表,同步到antdb中cyl_db库的cyl_test模式下:

[antdb@greatdb1 ~]$ patronictl -c etc/patroni/patroni_antdbcluster.yaml list
Cluster: antdbcluster (7322023600159320463) ---+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+-----------+---------------------+--------------+---------+----+-----------+
|
 patroni-1 | 192.168.20.110:6655 | Leader | running | 74 | |
| patroni-2 | 192.168.20.111:6655 | Replica | running | 74 |         0 |
|
 patroni-3 | 192.168.20.112:6655 | Sync Standby | running | 74 | 0 |
+-----------+---------------------+--------------+---------+----+-----------+


源端ogg配置

ogg安装步骤已省略。

3.1 Oracle生产端

CREATE USER ogg identified by OGG_2024;
grant connect,dba to ogg;

ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('OGG','*',TRUE);
GRANT EXECUTE ON DBMS_STREAMS_ADM TO OGG;

---mgr
PORT 7809
DYNAMICPORTLIST 7810-7840
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 3
--AUTOSTART EXTRACT *
--AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5, RESETMINUTES 60
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45

3.2 抽取和投递

EXTRACT e_get
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
SETENV (ORACLE_HOME=/oracle/app/oracle/product/19.0.0/db)
USERID ogg, PASSWORD OGG_2024
DISCARDFILE ./dirrpt/e_get.dsc, APPEND, MEGABYTES 1024
DBOPTIONS ALLOWUNUSEDCOLUMN
REPORTCOUNT EVERY 1 MINUTES, RATE
FETCHOPTIONS NOUSESNAPSHOT
EXTTRAIL ./dirdat/te
GETUPDATEBEFORES
NOCOMPRESSUPDATES
NOCOMPRESSDELETES
gettruncates
table ogg.t1;

添加抽取进程组:

add extract e_get, TRANLOG, BEGIN NOW

3.3 定义trail文件

ADD EXTTRAIL ./dirdat/te, EXTRACT e_get, MEGABYTES 200


GGSCI>
edit param d_put
EXTRACT d_put
PASSTHRU
RMTHOST 192.168.20.110, MGRPORT 7809
RMTTRAIL ./dirdat/te
DYNAMICRESOLUTION
TABLE *.*;

添加pump捕获组:

ADD EXTRACT d_put, EXTTRAILSOURCE ./dirdat/te

定义pump trail文件:

ADD RMTTRAIL ./dirdat/te, EXTRACT d_put, MEGABYTES 200

antdb目标端

4.1 需要安装unixODBC

yum -y install unixODBC

4.2 数据库创建ogg用户

CREATE USER ogg WITHPASSWORD'OGG_2024';
grant ALL ondatabase cyl_db togroup ogg;

GRANTCONNECTONDATABASE cyl_db TO ogg;
---ALTER USER ogg WITH REPLICATION;
---ALTER USER ogg WITH SUPERUSER;
GRANTUSAGEONSCHEMA cyl_test TO ogg;
GRANTSELECTON ALL TABLESINSCHEMA cyl_test TO ogg;
GRANTINSERTUPDATEDELETETRUNCATEON ALL TABLESINSCHEMA cyl_test TO ogg;
GRANT ALL ONSCHEMA cyl_test TO  ogg;


--Heartbeat and Checkpoint Table Privileges
CREATESCHEMA AUTHORIZATION ogg;
GRANTCREATEUSAGEONSCHEMA ogg TO ogg;
GRANTEXECUTEON ALL FUNCTIONS INSCHEMA ogg TO ogg;
GRANTSELECTINSERTUPDATEDELETEON ALL TABLESINSCHEMA ogg TO ogg;

测试登陆:

psql -U ogg -d cyl_db  -h 192.168.20.110 -p 6655

4.3 安装ogg 

注:没有for antdb的介质,可以用for postgresql的介质。

官网下载ogg for postgresql(介质名:19100200714_ggs_Linux_x64_PostgreSQL_64bit.zip)

解压后直接可用,先验证依赖包:

[antdb@greatdb1 ogg_antdb]$ ldd ggsci
./ggsci: antdb/app/antdb/client_driver/unixODBC/lib/libodbcinst.sonoversion information available (required by ./ggsci)
./ggsci: antdb/app/antdb/client_driver/unixODBC/lib/libodbc.sonoversion information available (required by ./ggsci)
        linux-vdso.so.1 => (0x00007ffc5a3ee000)
        librt.so.1 => lib64/librt.so.1 (0x00002ae853b89000)
        libdl.so.2 => lib64/libdl.so.2 (0x00002ae853d91000)
        libgglog.so => ogg_antdb/./libgglog.so (0x00002ae853f95000)
        libggutil.so => ogg_antdb/./libggutil.so (0x00002ae8543bd000)
        libggrepo.so => ogg_antdb/./libggrepo.so (0x00002ae8545e0000)
        libdb-6.1.so => ogg_antdb/./libdb-6.1.so (0x00002ae8548d5000)
        liblmdb.so => ogg_antdb/./liblmdb.so (0x00002ae854ceb000)
        libggperf.so => ogg_antdb/./libggperf.so (0x00002ae854f00000)
        libggparam.so => ogg_antdb/./libggparam.so (0x00002ae85513b000)
        libggssl.so => ogg_antdb/./libggssl.so (0x00002ae856c81000)
        libicui18n.so.65 => ogg_antdb/./libicui18n.so.65 (0x00002ae8572d0000)
        libicuuc.so.65 => ogg_antdb/./libicuuc.so.65 (0x00002ae8577db000)
        libicudata.so.65 => ogg_antdb/./libicudata.so.65 (0x00002ae857c15000)
        libpthread.so.0 => lib64/libpthread.so.0 (0x00002ae859d43000)
        libxerces-c-3.2.so => ogg_antdb/./libxerces-c-3.2.so (0x00002ae859f5f000)
        libantlr3c.so => ogg_antdb/./libantlr3c.so (0x00002ae85a5d3000)
        libudt.so => ogg_antdb/./libudt.so (0x00002ae85a7ee000)
        libboost_system-mt-x64.so.1.73.0 => ogg_antdb/./libboost_system-mt-x64.so.1.73.0 (0x00002ae85ab11000)
        libPocoFoundation.so.71 => ogg_antdb/./libPocoFoundation.so.71 (0x00002ae85ad12000)
        libPocoNet.so.71 => ogg_antdb/./libPocoNet.so.71 (0x00002ae85b10a000)
        libPocoNetSSL.so.71 => ogg_antdb/./libPocoNetSSL.so.71 (0x00002ae85b452000)
        libPocoCrypto.so.71 => ogg_antdb/./libPocoCrypto.so.71 (0x00002ae85b69e000)
        libPocoUtil.so.71 => ogg_antdb/./libPocoUtil.so.71 (0x00002ae85b8db000)
        libPocoJSON.so.71 => ogg_antdb/./libPocoJSON.so.71 (0x00002ae85bb4e000)
        libPocoJWT.so.71 => ogg_antdb/./libPocoJWT.so.71 (0x00002ae85bdaa000)
        libPocoXML.so.71 => ogg_antdb/./libPocoXML.so.71 (0x00002ae85bfdb000)
        libGGicu25.so => not found
        libodbc.so => antdb/app/antdb/client_driver/unixODBC/lib/libodbc.so (0x00002ae85c283000)
        libodbcinst.so => antdb/app/antdb/client_driver/unixODBC/lib/libodbcinst.so (0x00002ae85c4f8000)
        libpq.so.5 => antdb/app/antdb/lib/libpq.so.5 (0x00002ae85c714000)
        libggnnzitp.so => ogg_antdb/./libggnnzitp.so (0x00002ae85cc54000)
        libstdc++.so.6 => ogg_antdb/./libstdc++.so.6 (0x00002ae85d7e1000)
        libm.so.6 => lib64/libm.so.6 (0x00002ae85db78000)
        libgcc_s.so.1 => ogg_antdb/./libgcc_s.so.1 (0x00002ae85de7a000)
        libc.so.6 => lib64/libc.so.6 (0x00002ae85e090000)
        lib64/ld-linux-x86-64.so.2 (0x00002ae852fcb000)
        libnsl.so.1 => lib64/libnsl.so.1 (0x00002ae85e45d000)
        libz.so.1 => antdb/app/antdb/lib/third_party/libz.so.1 (0x00002ae85e677000)
[antdb@greatdb1 ogg_antdb]$

问题:

libGGicu25.so => not found
./ggsci: antdb/app/antdb/client_driver/unixODBC/lib/libodbcinst.sono version information available (required by ./ggsci)
./ggsci: antdb/app/antdb/client_driver/unixODBC/lib/libodbc.sono version information available (required by ./ggsci)

解决办法:

清除LD_LIBRARY_PATH环境变量,然后重新设置,不能设置antdb自带的odbc lib包,写一个ogg专用的环境变量文件,如果要操作ogg,则每次登陆后加载环境变量.env_for_ogg。

vi .env_for_ogg,添加如下内容:

unset LD_LIBRARY_PATH
export GG_HOME=/ogg_antdb
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GG_HOME/lib:/usr/lib64:/usr/lib
export ODBCINI=/etc/odbc.ini ###后面需要

重新加载环境变量后:

[antdb@greatdb1 ogg_antdb]$ldd ggsci
        linux-vdso.so.1 => (0x00007fffbf9ea000)
        librt.so.1 => usr/lib64/librt.so.1 (0x00002abdbb56c000)
        libdl.so.2 => usr/lib64/libdl.so.2 (0x00002abdbb774000)
        libgglog.so => ogg_antdb/./libgglog.so (0x00002abdbb978000)
        libggutil.so => ogg_antdb/./libggutil.so (0x00002abdbbda0000)
        libggrepo.so => ogg_antdb/./libggrepo.so (0x00002abdbbfc3000)
        libdb-6.1.so => ogg_antdb/./libdb-6.1.so (0x00002abdbc2b8000)
        liblmdb.so => ogg_antdb/./liblmdb.so (0x00002abdbc6ce000)
        libggperf.so => ogg_antdb/./libggperf.so (0x00002abdbc8e3000)
        libggparam.so => ogg_antdb/./libggparam.so (0x00002abdbcb1e000)
        libggssl.so => ogg_antdb/./libggssl.so (0x00002abdbe664000)
        libicui18n.so.65 => ogg_antdb/./libicui18n.so.65 (0x00002abdbecb3000)
        libicuuc.so.65 => ogg_antdb/./libicuuc.so.65 (0x00002abdbf1be000)
        libicudata.so.65 => ogg_antdb/./libicudata.so.65 (0x00002abdbf5f8000)
        libpthread.so.0 => usr/lib64/libpthread.so.0 (0x00002abdc1726000)
        libxerces-c-3.2.so => ogg_antdb/./libxerces-c-3.2.so (0x00002abdc1942000)
        libantlr3c.so => ogg_antdb/./libantlr3c.so (0x00002abdc1fb6000)
        libudt.so => ogg_antdb/./libudt.so (0x00002abdc21d1000)
        libboost_system-mt-x64.so.1.73.0 => ogg_antdb/./libboost_system-mt-x64.so.1.73.0 (0x00002abdc24f4000)
        libPocoFoundation.so.71 => ogg_antdb/./libPocoFoundation.so.71 (0x00002abdc26f5000)
        libPocoNet.so.71 => ogg_antdb/./libPocoNet.so.71 (0x00002abdc2aed000)
        libPocoNetSSL.so.71 => ogg_antdb/./libPocoNetSSL.so.71 (0x00002abdc2e35000)
        libPocoCrypto.so.71 => ogg_antdb/./libPocoCrypto.so.71 (0x00002abdc3081000)
        libPocoUtil.so.71 => ogg_antdb/./libPocoUtil.so.71 (0x00002abdc32be000)
        libPocoJSON.so.71 => ogg_antdb/./libPocoJSON.so.71 (0x00002abdc3531000)
        libPocoJWT.so.71 => ogg_antdb/./libPocoJWT.so.71 (0x00002abdc378d000)
        libPocoXML.so.71 => ogg_antdb/./libPocoXML.so.71 (0x00002abdc39be000)
        libGGicu25.so => ogg_antdb/lib/libGGicu25.so (0x00002abdc3c66000)
        libodbc.so => ogg_antdb/lib/libodbc.so (0x00002abdc4b61000)
        libodbcinst.so => ogg_antdb/lib/libodbcinst.so (0x00002abdc4e7c000)
        libpq.so.5 => usr/lib64/libpq.so.5 (0x00002abdc511b000)
        libggnnzitp.so => ogg_antdb/./libggnnzitp.so (0x00002abdc534a000)
        libstdc++.so.6 => ogg_antdb/./libstdc++.so.6 (0x00002abdc5ed7000)
        libm.so.6 => usr/lib64/libm.so.6 (0x00002abdc626e000)
        libgcc_s.so.1 => ogg_antdb/./libgcc_s.so.1 (0x00002abdc6570000)
        libc.so.6 => usr/lib64/libc.so.6 (0x00002abdc6786000)
        lib64/ld-linux-x86-64.so.2 (0x00002abdba9ae000)
        libnsl.so.1 => usr/lib64/libnsl.so.1 (0x00002abdc6b53000)
        libssl.so.10 => usr/lib64/libssl.so.10 (0x00002abdc6d6d000)
        libcrypto.so.10 => usr/lib64/libcrypto.so.10 (0x00002abdc6fdf000)
        libkrb5.so.3 => usr/lib64/libkrb5.so.3 (0x00002abdc7440000)
        libcom_err.so.2 => usr/lib64/libcom_err.so.2 (0x00002abdc7729000)
        libgssapi_krb5.so.2 => usr/lib64/libgssapi_krb5.so.2 (0x00002abdc792d000)
        libldap_r-2.4.so.2 => usr/lib64/libldap_r-2.4.so.2 (0x00002abdc7b7a000)
        libk5crypto.so.3 => usr/lib64/libk5crypto.so.3 (0x00002abdc7dd9000)
        libz.so.1 => usr/lib64/libz.so.1 (0x00002abdc7ff4000)
        libkrb5support.so.0 => usr/lib64/libkrb5support.so.0 (0x00002abdc820a000)
        libkeyutils.so.1 => usr/lib64/libkeyutils.so.1 (0x00002abdc8419000)
        libresolv.so.2 => usr/lib64/libresolv.so.2 (0x00002abdc861d000)
        liblber-2.4.so.2 => usr/lib64/liblber-2.4.so.2 (0x00002abdc8836000)
        libsasl2.so.3 => usr/lib64/libsasl2.so.3 (0x00002abdc8a45000)
        libssl3.so => usr/lib64/libssl3.so (0x00002abdc8c62000)
        libsmime3.so => usr/lib64/libsmime3.so (0x00002abdc8eb4000)
        libnss3.so => usr/lib64/libnss3.so (0x00002abdc90db000)
        libnssutil3.so => usr/lib64/libnssutil3.so (0x00002abdc9408000)
        libplds4.so => usr/lib64/libplds4.so (0x00002abdc9637000)
        libplc4.so => usr/lib64/libplc4.so (0x00002abdc983b000)
        libnspr4.so => usr/lib64/libnspr4.so (0x00002abdc9a40000)
        libselinux.so.1 => usr/lib64/libselinux.so.1 (0x00002abdc9c7e000)
        libcrypt.so.1 => usr/lib64/libcrypt.so.1 (0x00002abdc9ea5000)
        libpcre.so.1 => usr/lib64/libpcre.so.1 (0x00002abdca0dc000)
        libfreebl3.so => usr/lib64/libfreebl3.so (0x00002abdca33e000)
[antdb@greatdb1 ogg_antdb]$

创建子目录配置,复制进程:

[root@oggforpg ~]# ggsci

Oracle GoldenGate Command Interpreter for PostgreSQL
Version 21.3.0.0.0 OGGCORE_21.3.0.0.0_PLATFORMS_210728.1047
Oracle Linux 7, x64, 64bit (optimized), PostgreSQL on Aug 4202120:27:55
Operating system character set identified as US-ASCII.

Copyright (C) 19952021, Oracle and/or its affiliates. All rights reserved.



GGSCI (oggforpg) 1> create subdirs

Creating subdirectories under current directory root

Parameter file                 /ogg/dirprm: created.
Report file                    /ogg/dirrpt: created.
Checkpoint file                /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.
Master encryption key wallet files /ogg/dirwlt: created.
Dump files                     /ogg/dirdmp: created.

4.4 配置mgr

port 7809
DYNAMICPORTLIST 7810-7840
purgeoldextracts ./dirdat/*, usecheckpoints,minkeephours 24
AUTORESTART ER *, RETRIES 3, WAITMINUTES 2,RESETMINUTES 10

4.5 配置odbc.ini

sudo vi /etc/odbc.ini,添加如下内容:

#Sample DSN entries 
[ODBC Data Sources]
ANTDB_TGT=antdb

[ODBC
IANAAppCodePage=106
InstallDir=/ogg_antdb

[ANTDB_TGT]
Driver=/ogg_antdb/lib/GGpsql25.so
Description=antdb
Database=cyl_db
HostName=1XX.XXX.20.110
PortNumber=6655

================end================

4.6 修改环境变量

vi .env_for_ogg
export ODBCINI=/etc/odbc.ini

4.7 目标端创建检查点表

./ggsci

DBLOGIN SOURCEDB ANTDB_TGT USERID ogg ,PASSWORD OGG_2024

add checkpointtable ogg.checkpointttable

4.8 源端生成def文件

step1:

GGSCI (greatdb3) 2edit params defgen

添加需要同步的表,如下内容:

DEFSFILE ./dirdef/e_get.def

USERID ogg, PASSWORD OGG_2024

TABLE ogg.*;

step2:在ogg安装目录下执行如下命令

./defgen paramfile ./dirprm/defgen.prm

注:NOEXTATTR ----高版本生成def时,需要加上该参数

./defgen NOEXTATTR paramfile ./dirprm/defgen.prm

step3:拷贝到目标端dirdef下

scp ./dirdef/e_get.def antdb@greatdb1:/ogg_antdb/dirdef

4.9 目标端配置复制进程p_test

replicat p_test
container mem_limit 2G
cachemgr cachesize 1G
SETENV(PGCLIENTENCODING ="UTF8")
SETENV(ODBCINI="/etc/odbc.ini" )
SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
TARGETDB ANTDB_TGT, userid ogg, password OGG_2024
SOURCEDEFS /ogg_antdb/dirdef/e_get.def

map ogg.T1, target cyl_test.t1;
map ogg.T2, target cyl_test.t2;
map ogg.T3, target cyl_test.t3;
map ogg.T4, target cyl_test.t4;

4.10 创建复制进程

add rep p_test, exttrail ./dirdat/te, checkpointtable ogg.checkpointttable
start p_test


测试数据同步

先测试增量,后面再进行初始化和增量同步测试。

源端:

create table ogg.t1
        ( ID1 number(8),
          ID2 number(8),
          info varchar(10),
          constraint pk_t1 primary key(ID1) using index
        );

源端添加附加日志,重启抽取:

GGSCI (greatdb3) 5dblogin USERID oggPASSWORD OGG_2024
Successfully logged into database.
GGSCI (greatdb3 as ogg@mydb19c6
GGSCI (greatdb3 as ogg@mydb19c6add trandata ogg.t1;

目标端:

create table cyl_test.t1
        ( ID1 int,
          ID2 int,
          info char(50),
           primary key(ID1) 
        );

源端:

插入和更新数据:

insert into ogg.t1 values('1','001','aaa');
insert into ogg.t1 values('2','002','bbb');
insert into ogg.t1 values('3','003','ccc');
insert into ogg.t1 values('4','004','ddd');
insert into ogg.t1 values('5','005','');
insert into ogg.t1 values('6','001','aaa');
insert into ogg.t1 values('7','002','bbb');
insert into ogg.t1 values('8','003','ccc');
commit;

update ogg.t1 set ID2=111where id1=1;
update ogg.t1 set info='rwe'where id1=5;

SQL> select * from ogg.t1;

       ID1 ID2 INFO
---------- ---------- ----------
         1        111 aaa
         2          2 bbb
         3          3 ccc
         4          4 ddd
         5          5 rwe
         6          1 aaa
         7          2 bbb
         8          3 ccc

8 rows selected.

目标端:

cyl_db=> select * from cyl_test.t1;
 id1 | id2 |                        info 
-----+-----+----------------------------------------------------
   2| 2 | bbb 
   3| 3 | ccc 
   4| 4 | ddd 
   1| 111 | aaa 
   6| 1 | aaa 
   7| 2 | bbb 
   8| 3 | ccc 
   5| 5 | rwe 
(8 rows)

cyl_db=>

基于上面测试,Oracle到antdb采用ogg同步可以实现,可以开始对数据初始化及增量续接同步配置进行测试。


END


本文作者:陈炎亮(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论