作者:曹 挚(iyft_hws150@sina.com)
京弘达(上海)医疗科技有限公司
【引言】
顾名思义,Oracle GoldenGate (以下简称OGG)的Archived Log Only(以下简称ALO、单一归档日志)模式是仅仅抽取已归档日志的数据同步方式,或许正因为该模式没有将缺省状态下的联机日志纳入同步范围才显得格外“冷门”,以至于你稍不留意,官方文档寥寥几句的扼要介绍就像夏日的风一样的让人忽略了它的存在。更甭提博客、论坛里少的可怜的介绍文章,然而,它却是本文得以成形的理由。
ALO模式可支持本地与远程、操作系统同构与异构等跨平台多种工作方式。本文以同构条件下的远程捕获为例,搭建经由“前置机”负责采集源端数据库的ALO变动轨迹(trail)日志,并通过OGG的数据泵(data pump)进程将采集到的轨迹日志文件传送到目标端,从而实现“非侵入”式的、不增加负荷的OGG异机部署,达到源端与目标端的数据同步。
至于远程异构条件下的ALO部署,用户可考虑利用Docker、WSL(Windows Subsystem for Linux)等手段加以变通,尽管该种部署会比本文给出的步骤复杂些,但其原理与大体过程则与本文无异,兹不赘述。
一 . 实验环境
| 角色 | 软件环境 | 说明 |
|---|---|---|
| 源数据库 | Windows Server 2008 R2; Oracle Datatbase 10.2.0.5(Win64) | 目前为单实例文件系统,对于RAC+ASM,需满足2点:一是所有归档日志要么保存在共享存储(集群文件CFS、网络文件系统NFS、ASM磁盘)组中,要么在RAC当前节点可读取所有节点的归档日志;二是当所有日志保存在ASM时,需在RAC某一可访问ASM的节点上开启ASM实例的TNS监听,使得OGG前置机可以访问到该ASM实例。 |
| OGG前置机 | Windows 10 1903 ; Oracle Datatbase 11.2.0.4(Win64); Oracle GoldenGate 11.2.1.0.1 (Win64) | 对于单实例,需要定义到源库的TNS和共享源库的归档日志目录;当源库是RAC+ASM模式时,需定义连接到源库和ASM两个实例的TNS。OGG软件支持读取ASM磁盘组上的文件 |
| 目标数据库 | Windows Server 2012 R2; Oracle Datatbase 11.2.0.4(Win64); Oracle GoldenGate 11.2.1.0.1(Win64) | 目标端OGG负责接收OGG前置机端传送的trail文件,通过复制进程(replicate)将变动轨迹(trail)文件应用到目标库。 |
注:以下假定Oracle Database安装在D:\Oracle目录下,归档日志位于V:\archivelogs目录下,OGG软件安装在C:\GoldenGate目录下。
二 . 部署过程
- 在源数据库端,建立归档日志所在目录的只读共享,对于Linux,需安装网络文件系统(NFS)服务,对于Windows,使用net share命令;
- 在OGG前置机端,安装NFS服务,查看、挂载、卸载源端共享目录:
1). 显示已挂载的目录明细
C:\Users\Win10\> mount
本地 远程 属性
-----------------------------------------------------------
2). 列举远程服务器共享目录
C:\Users\Win10\>showmount -e 192.168.50.156
导出列表在 192.168.50.156:
/ archivelogs 所有计算机
3). 挂载归档日志目录
C:\Windows\system32>mount \\192.168.50.156\archivelogs v:
v: 现已成功连接到 \\192.168.50.156\archivelogs
4). 卸载远程目录
C:\Windows\system32\>umount
用法: [-f] <-a | drive_letters | network_mounts>
-a 删除所有 NFS 网络装入点
-f 强制删除 NFS 网络装入点
C:\Windows\system32\>umount -a
你拥有下列活动的 NFS 连接:
v: \192.168.50.156\archivelogs
如果继续,将取消连接。
要继续此操作吗? (Y/N) [N]:y
正在断开连接 v: \\192.168.50.156\archivelogs
命令已成功完成。
- 在OGG前置机端,根据源数据库归档日志的存储路径建立符号链接,对于跨平台,可参考第三节的问题对策中的路径转义对动态性能视图(V$ARCHIVED_LOG)进行强制转义。
1). 创建已映射到本地的网络驱动器的符号链接
C:\> mklink /d c:\rchivelogs V:\archivelogs
为 c:\archivelogs <<===>> V:\archivelogs. 创建的符号链接
2). 创建未映射到本地的网络路径的符号链接
##建立d:receivfiles链接目录,指向远程服务器上的e盘的对应目录。
C:\> mklink /d d:\recivefiles \\138.20.1.141\e\$\recivefiles
3). 删除本地的符号链接
#删除虚拟的链接目录,并不会删除远程文件夹真实文件,注意千万不能用del,del会删除远程的真实文件。
C:\> rmdir c:\archivelogs
C:\> rmdir d:\recivefiles
- 在OGG前置机端,配置extract进程,其参数示例如下:
EXTRACT ext_src
EXTTRAIL ./dirdat/xa
userid ogg@dbserver, password ogg2020
WILDCARDRESOLVE DYNAMIC
DYNAMICRESOLUTION
TRANLOGOPTIONS ARCHIVEDLOGONLY
TRANLOGOPTIONS ALTARCHIVELOGDEST PRIMARY V:\archivelogs
TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT LOG%t_%s_%r.ARC
FETCHOPTIONS, NOUSESNAPSHOT, NOUSELATESTVERSION, MISSINGROW REPORT
STATOPTIONS REPORTFETCH
table comm.*;
table inpadm.*;
table medrec.*;
table outpadm.*;
- 在OGG前置机端,配置pump传输进程,其参数示例如下:
EXTRACT pup_src
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
PASSTHRU
RMTHOST 192.168.50.98, MGRPORT 7801
RMTTRAIL ./dirdat/pa
TABLE COMM.DEPT_DICT;
TABLE INPADM.BED_REC;
TABLE MEDREC.PAT_VISIT;
TABLE OUTPADM.CLINIC_MASTER;
- 在目标数据库端,配置replicat复制进程;
- 依次启动OGG前置机端的extract、pump进程,最后启动目标端replicat进程,至此ALO远程部署结束。
三.问题对策
在ALO模式的远程部署中,归档日志的网络共享与路径转义是一个绕不开的话题,在Oracle的RAC+ASM(实时应用集群+自动存储管理)的架构中,归档日志的保存方式也给这个问题增添了配置的复杂度和不稳定性。笔者在实验环境中也不止一次出现过网络路径映射正常,符号链接也未见异常,但OGG的抽取(extract)进程却不能正常捕获的困惑,这种故障在前置机或源端服务器重新启动以后很多见,目前尚不清楚问题的根源所在。以下仅就归档文件路径的符号链接、路径转义以及RAC环境等问题做三点说明:
- 同平台归档日志文件的路径链接:
鉴于OGG是根据Oracle的动态性能视图V$ARCHIVED_LOG查找数据库的归档日志,故OGG前置机上必须有且仅有和源数据库相同的归档日志目录及文件,否则OGG的捕获进程会异常中止(Status状态为STOPPED或ABENDED)。为了解决与源端在相同位置上共享文件的问题,需要用到本文第二节中的路径挂载与符号链接,达到将源数据库的归档日志映射到OGG前置机相同位置上的目的,也就是说,OGG前置机的同名目录上存在一个指向源数据库归档日志路径的“指针”,源数据库的归档日志为两个不同机器的相同路径所同时“拥有”,文件实际保存在源端,前置机端只不过以符号链接到源端而已。 - 跨平台归档日志文件的路径转义:
跨平台的最大不同在于路径的表示方法不同,Windows使用斜线(“\”)而Linux使用反斜线(“/”)表示路径分隔符。为了实现路径的转义,可以尝试将动态性能视图V$ARCHIVED_LOG进行私有视图的“重载”,将其它平台的路径“翻译”成本地可以访问的路径,然后在本地路径建立指向源端的“指针”链接,该方法还可以解决相同平台路径各异的“转义”。总之,只要使得OGG连接到源数据库的OGG管理员能在本地读取到源端的归档日志问题就得以解决。 - RAC+ASM的特别之处:
对RAC环境来说,OGG软件本地部署有如下要求:在部署GOLDENGATE软件的这个RAC节点(Node)上,必须能读取所有节点的归档日志,因此,推荐将归档路径存放在共享存储(集群文件CFS、网络文件系统NFS、ASM磁盘)中,因为GOLDENGATE软件能访问到ASM磁盘组。
RAC架构通常有两种归档文件的保存方式:一是归档日志保存在各个节点的本地文件系统中,其余节点需要通过共享才能访问全部归档日志文件,该种方式在数据库备份、恢复过程中有诸多不便,二是将归档日志保存在共享存储(如集群文件CFS、网络文件系统NFS、ASM磁盘)中,如此以来,则所有能够访问ASM实例的节点或第三方均可以共享式访问归档日志文件,前提是需要在某一个节点或公共虚拟IP(PUBLIC VIP)地址上提供ASM实例的TNS监听(TNS Listener)服务,以便建立访问ASM实例的专用(DEDICATED)连接。
四 . 实验小结
本文对于OGG远程ALO捕获、异机部署模式做了些初步的尝试,旨在解决对于源数据库的“非侵入”式、不增加负荷的状况下,完成异构平台、异机抽取等复杂环境下的轻量级同步实验,为某数据中心的多源数据集成提供样例,也是为某卫生管理机构“十四五”建设现代化医疗大数据中心课题——准实时数据仓库——从技术路线、可行性等方面做出的初步探索。
由于笔者的技术有限,错误在所难免,恳请各位同仁批评指正。
2022-05-10




