点击上方“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;
GRANTINSERT, UPDATE, DELETE, TRUNCATEON ALL TABLESINSCHEMA cyl_test TO ogg;
GRANT ALL ONSCHEMA cyl_test TO ogg;
--Heartbeat and Checkpoint Table Privileges
CREATESCHEMA AUTHORIZATION ogg;
GRANTCREATE, USAGEONSCHEMA ogg TO ogg;
GRANTEXECUTEON ALL FUNCTIONS INSCHEMA ogg TO ogg;
GRANTSELECT, INSERT, UPDATE, DELETEON 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.so: noversion information available (required by ./ggsci)
./ggsci: antdb/app/antdb/client_driver/unixODBC/lib/libodbc.so: noversion 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.so: no version information available (required by ./ggsci)
./ggsci: antdb/app/antdb/client_driver/unixODBC/lib/libodbc.so: no 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) 1995, 2021, 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) 2> edit 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) 5> dblogin USERID ogg, PASSWORD OGG_2024
Successfully logged into database.
GGSCI (greatdb3 as ogg@mydb19c) 6>
GGSCI (greatdb3 as ogg@mydb19c) 6> add 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同步可以实现,可以开始对数据初始化及增量续接同步配置进行测试。

本文作者:陈炎亮(上海新炬中北团队)
本文来源:“IT那活儿”公众号





