PostgreSQL是一款免费的对象-关系型数据库(ORDBMS),PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也支持各种扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。最后,因为灵活的许可授权,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。
2020年7月,Oracle数据库产品管理部门很高兴宣布Oracle GoldenGate PostgreSQL 的抽取(Capture)支持已全面上市。自GoldenGate 12.1发行以来,GoldenGate已支持到PostgreSQL的交付,并允许用户将数据从GoldenGate支持的异构数据库实时复制到PostgreSQL数据库。现在,除了GoldenGate PostgreSQL Delivery,又增加了从PostgreSQL 10及更高版本的数据库中捕获数据的能力。
该产品除了支持本地PostgreSQL的捕获,它还支持从Amazon PostgreSQL RDS和Amazon PostgreSQL Aurora(或其它基于PostgreSQL内核的RDS)捕获数据,并帮助您将数据复制到其它任何数据平台,如Oracle自治数据库。该数据库是一个云数据库,使用机器学习来自动执行数据库调优、安全设置、备份、打补丁和其他日常由DBA执行的管理任务。与常规数据库不同,自治数据库无需人工干预即可执行所有这些任务以及更多任务。
您可以在OCI Cloud上运行GoldenGate PostgreSQL,并从Amazon PostgreSQL RDS和Amazon PostgreSQL Aurora远程捕获数据,并将数据复制到自治数据库中。
在部署GoldenGate PostgreSQL时,需要考虑的几个限制:
抽取名称在单个部署中必须唯一
不支持针对系统数据库的捕获和投递
数据库版本必须为10或更高
本文就GoldenGate如何从本地PostgreSQL中抽取数据作一简单介绍,以起到抛砖引玉的作用。主要操作步骤如下:
准备DB环境
配置GoldenGate节点的环境变量
配置ODBC
配置GoldenGate
测试
准备PostgreSQL环境
Oracle GoldenGate PostgreSQL通过逻辑日志读取变更数据。Oracle GoldenGate Capture的每个Extract都需要一个replicat slot,应根据您要运行的抽取程序的数量来设置足够的max_replication_slot值。相应的参数需要添加或修改配置文件postgresql.conf,如下:
wal_level= logical
max_replication_slots= 10 #可以比该值更大
max_wal_senders= 10
如果是远程部署GoldenGate,则还需要修改pg_hba.conf,允许远端的主机IP能访问PG对应的主机,如下示例:
host all all 192.168.7.0/24 md5
修改上述参数可能需要重启PostgreSQL才会生效,详情可参考PG的手册。
创建一个testdb,并设置postgres用户的密码为post3214
配置GoldenGate节点的环境
GoldenGate安装
GoldenGate PostgreSQL的安装与其它DB的安装相同,不在本文赘述。
OS环境变量配置
exportPGHOST=192.168.7.98
exportOGG_HOME=/root/ogg4pg
exportLD_LIBRARY_PATH=$OGG_HOME/lib
exportODBCINI=/etc/odbc.ini
unixODBC配置
# yum -y install unixODBC
# vi etc/odbc.ini
[ODBC DataSources]
testdb=DataDirect7.1 PostgreSQL Wire Protocol
[ODBC]
IANAAppCodePage=106
InstallDir=/root/ogg4pg
[testdb]
Driver=/root/ogg4pg/lib/GGpsql25.so
Description=DataDirect7.1 PostgreSQL Wire Protocol
Database=testdb
HostName=192.168.7.98
PortNumber=5432
LogonID=postgres
Password=post3214
执行以下命令,确认odbc配置正确。
$ isql -v testdb postgres post3214
+---------------------------------------+
+---------------------------------------+
|Connected! |
| |
| sql-statement |
| help[tablename] |
|quit |
+---------------------------------------+
SQL>select now();
+---------------------------------+
| now |
+---------------------------------+
|2020-07-18 16:34:08.233492+08 |
+---------------------------------+
SQLRowCountreturns -1
1 rowsfetched
经过以上步骤,确认通过ODBC可以正常访问PostgreSQL。
安装libpq
针对远程抽取,需要在安装GoldenGate的机器上安装pg lib。
# yum -y install postgresql-libs
配置GoldenGate
配置MGR和附加日志
运行ggsci
GGSCI> create subidrs
配置mgr
GGSCI> edit param mgr
Port 7809
确认OGG可以登录到PostgreSQL
GGSCI > dblogin sourcedb testdb, useridpostgres, password post3214
Successfully logged into database.
对需要同步的表,添加附加日志
GGSCI> add trandata test.tb1
GGSCI> add trandata test.tb2
配置抽取进程
GGSCI> edit param ex1
extractex1
sourcedbtestdb, userid postgres, password post3214
exttrail./dirdat/ea
tabletest.*;
注册和添加抽取进程
GGSCI >register extract ex1
2020-07-1816:40:45 INFO OGG-25355 Successfully created replication slot 'ex1_46b13bf0f63b63ba' for EXTRACTgroup 'EX1' in database 'testdb'.
GGSCI> add ext ex1, tranlog , begin now
GGSCI >add exttrail ./dirdat/ea, ext ex1
启动抽取进程
GGSCI > start ex1
GGSCI > info ex1
EXTRACT EX1 Last Started 2020-07-18 16:41 Status RUNNING
CheckpointLag 00:00:00 (updated 00:00:07 ago)
ProcessID 11376
VAM ReadCheckpoint 2020-07-18 16:41:02.708290
ReplicationSlot ex1_46b13bf0f63b63ba is activewith PID 8338 in database testdb
SlotRestart LSN 0/16BAA78
SlotFlush LSN 0/16BAAB0
CurrentLog Position 0/16BAAB0
由上述信息可以看出,GoldenGate可以正常读取数据库日志。
在PostgreSQL上进行数据变更操作
testdb=#insert into test.tb1 values(1,'abc');
INSERT 01
testdb=#insert into test.tb1 values(2,'abc');
INSERT 01
testdb=#update test.tb1 set name='ksaa' where id=1;
UPDATE 1
testdb=#delete from test.tb1 where id=2;
DELETE 1
查看GoldenGate是否能捕获增量数据
GGSCI> stats ex1, total
SendingSTATS request to EXTRACT EX1 ...
Start ofStatistics at 2020-07-18 16:42:28.
Output to./dirdat/ea:
Extractingfrom test.tb1 to test.tb1:
*** Totalstatistics since 2020-07-18 16:41:57 ***
Total inserts 2.00
Total updates 1.00
Total deletes 1.00
Total upserts 0.00
Total discards 0.00
Total operations 4.00
End ofStatistics.
可以看到,GoldenGate已经捕获到变更数据。
GoldenGate配置从PostgreSQL抽取增量数据,与其它数据库的配置完全一样。通过使用GoldenGate PostgreSQL,可以在不同异构环境中,实现更多的数据实时集中和分发,以满足数据同步的需求。针对GoldenGate PostgreSQL更详细的说明可参考官方文档:
https://docs.oracle.com/en/middleware/goldengate/core/19.1/installing/installing-postgresql.html

作者简介
蔡东林,甲骨文云平台数据集成资深咨询顾问,专注于甲骨文数据集成相关产品及解决方案。具有15+年的数据仓库、数据处理经验,熟悉甲骨文相关集成产品,方案和项目实施经验。熟悉电信,银行行业。您可以通过donglin.cai@oracle.com与他联系。
了解更多,敬请关注甲骨文开发者社区......