GoldenGate是否必须部署在数据库服务器上,它能部署在独立的第三方服务器上吗,能通过TNS的方式连接源端数据库进行数据的抽取吗?如果可以实现的话,这就是正真的非侵入式了,关于侵入式的危害,我们能列举出来一堆。比如最近爆出的某云服务商通过嵌入式的程序,收集客户信息数据的恶型事件。
针对这个问题在查阅了相关技术资料并在Docker环境上快速搭建了2个Oracle数据库并建立一个包含了Oracle database12C 客户端的IaaS环境,在它们之间进行了GoldenGate 12C基于TNS方式连接进行数据抽取的测试。关于如何使用Docker建立Oracle数据库的文章,请参考前几期的文章分享。
从Oracle Goldengate 11g版本开始,oracle引入了一种新的capture mode,称为Integrated Capture Mode。传统的capture mode被称为classic capture mode。
在classic capture mode中,goldengate extract进程直接读取oracle redo log,捕获数据变化,存为Goldengate的trail file格式,然后利用pump进程将这些trail file传输到目标数据库,目标数据库上的replicat进程读取这些trail file,再利用sql将这些变化apply到目标数据库里。而在新的integrated capture mode中,goldengateextract进程不再直接读取oracle redo log,而是通过与数据库log mining server整合来捕获数据变化:log mining server负责以LCR的格式从数据库日志中捕获数据变化,然后extract进程再将这些抓取的数据存成trail file的格式。与classic capture mode相比,这种integratedcapture mode的主要差别就是extract不再直接读取oracle redo log,而交由数据库内部的log mining工具来完成。由于extract进程是由操作系统来管理的,身处数据库系统之外,integratedcapture mode的这种改变所带来的主要好处体现在兼容性方面:支持更多的数据类型和存储类型,以及由于与数据库更紧密的整合,不再需要为Oracle RAC,ASM和TDE作更多额外的配置工作。
使用Integrated Extract,数据库有如下的限制:
Must be at least 11.2.0..3
Database patch 1411356.1 must be installed.
测试环境:
Source:模拟源端数据库 Oracle 12C IP:129.191.26.214
Stage:安装Oracle Database 12C Client并部署GoldenGate 12C抽取和投递进程,完成源端数据库向目标端数据库数据同步的工作 IP:129.191.27.7,在源端数据库和目标端数据库服务器都不再部署GoldenGate软件。
Target:模拟目标端数据库 Oracle 12C IP:129.191.26.216

测试过程:
1、目标端数据库配置
1.1、 建立数据库用户

数据库用户oggtrg是目标数据库对象,oggadmin,用于GoldenGate的数据同步。
1.2、 使用oggtrg登录目标数据库,建立如下的数据库对象

1.3、 在部署Goldengate的服务器上建立指到目标数据库的TNS连接如下:

1.4、 登录Goldengate的服务器进行配置

1.5、 登录Goldengate的服务器进行mgr进程的配置

1.6、 在GoldenGate中建立基于目标端数据库oggadmin数据库用户的连接认证


1.7、 在GoldenGate中建立用于数据投递的Replication进程


2、源端数据库配置
2.1、建立源端数据库用户
2.2、建立源端数据库测试数据
2.3、登录部署GoldenGate的服务器,建立连接源端数据库的TNS
2.4、设置GoldenGateMGR进程
2.5、在Goldengate中建立连接源端数据库的连接认证

2.6、为源端复制表添加数据库表级附加日志

2.7、在Goldengate中增加源端数据库数据抽取进程

2.8、在GoldenGate中增加数据泵进程

3、进行数据同步测试
3.1、启动GoldenGate的相关进程,参考如下方法依次启动数据抽取、网络传输、数据投递进程

3.2、在源端数据库插入数据

3.3、在目标端数据检查数据是否被同步过来

检查发现,数据从源端数据库同步到目标端数据。
通过这次测试,验证了Goldengate的integrated抽取的工作原理和模式,证明了通过TNS的方式可以实现完全隔离的非侵入式数据同步,降低了侵入式工作方式带来的资源占用和运行风险。
在Oracle公有云上使用docker技术搭建整个测试环境并完成GoldenGate的非侵入部署和测试,总共用时1个小时。我们看到使用Oracle公有云技术来进行的测试是多么的快捷和方便。这也是为什么我们极力推荐大家使用公有云的原因吧。
附录
GoldenGate使用TNS信息如下:
target=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =129.191.26.216)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1.localdomain)
)
)
source=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =129.191.26.214)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orc12.my.domain.com)
)
)
部署GoldenGate的相关命令参考:
addcredentialstore
altercredentialstore add user oggadmin@target password oracle alias oggadmin
dbloginuseridalias oggadmin
addreplicat repin integrated exttrail ./dirdat/pn
altercredentialstore add user C##GGADMIN@source password Welcome_123#oggadminsource\
dbloginuseridalias oggadminsource
addtrandata PDB1.oggsrc.* allcols
registerextract extin DATABASE CONTAINER (PDB1)
addextract extin, integrated tranlog, begin now
addexttrail ./dirdat/in, extract extin, megabytes 10
addextract pump, exttrailsource ./dirdat/in
addrmttrail ./dirdat/pn, extract pump, megabytes 10Goldengate 进程相关参数:
1、Mgr进程:
PORT 7809
Dynamicportlist 7740-7760
-- For IPADDR, enter IP ADDRESS of this GoldenGate Cloud Service VM
--ACCESSRULE, PROG COLLECTOR, IPADDR 11.111.111.111, ALLOW
PurgeOldExtracts ./dirdat/*, UseCheckPoints, MinKeepHours 2
AUTORESTART Extract *, WaitMinutes 1, Retries 3
2、extin进程
EXTRACT EXTIN
useridalias oggadminsource
TranlogOptions IntegratedParams (max_sga_size 256)
EXTTRAIL ./dirdat/in
DISCARDFILE ./dirrpt/EXTIN.dsc, APPEND Megabytes 50
LOGALLSUPCOLS
UPDATERECORDFORMAT COMPACT
REPORTCOUNT EVERY 2 HOURS, RATE
Table PDB1.OGGSRC.*;
3、pump进程
extract pump
--UserIdAlias oggadminsource
RMTHOST 127.0.0.1, MGRPORT 7809
--, socksproxy 127.0.0.1:9000
RMTTRAIL ./dirdat/pn
discardfile ./dirrpt/pump.dsc, APPEND Megabytes 50
REPORTCOUNT EVERY 2 HOURS, RATE
PASSTHRU
Table PDB1.OGGSRC.*;
4、repin进程
REPLICAT REPIN
useridalias oggadmin
DBOPTIONS INTEGRATEDPARAMS(parallelism 6)
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/REPIN.dsc, Purge
REPORTCOUNT EVERY 5 records, RATE
-- MAP <source schema name>.<table name>, TARGET <tablename>;
MAP PDB1.oggsrc.*, TARGET oggtrg.*;




