19C RAC环境,利用XAG工具实现GoldenGate高可用

发布时间 2023-09-07 15:28:46作者: 石云华

前言

一套19C RAC预生产环境,上面运行着一套GoldenGate,客户希望GoldenGate能实现高可用,当计算节点出现故障时,GoldenGate能自动切换到其他节点继续运行。

实现GoldenGate高可用,主要有两种方法来完成。一种是自己编写脚本,然后在GI集群中添加资源,调用编写的脚本,实现GoldenGate资源的高可用。另一种是利用xag工具完成GoldenGate的高可用,xag工具实际上是对第一种方式进行了命令行封装,所以实现过程非常简单。

本文主要记录利用xag工具进行配置GoldenGate高可用的步骤。

 

配置过程

整个环境如下表所示。

环境说明

GI版本

19.19

DB版本

19.19

GoldenGate版本

19.1.0.0.4

DB_HOME

/u01/app/oracle/product/19.0.0/dbhome_1

GoldenGate_HOME

/ogg

 

0、下载xag工具。

Xag工具所对应的Patch ID为:31215432,下载后的文件名:p31215432_190000_Generic.zip

 

1、所有节点上都创建xag目录:

[grid@testdb01 grid]$ mkdir -p /u01/app/grid/xaghome

 

2、安装xag软件至所有节点:

[grid@testdb01 grid]$ cd /tmp/xag/

[grid@testdb01 xag]$ ./xagsetup.sh --install --directory /u01/app/grid/xaghome --all_nodes

Installing Oracle Grid Infrastructure Agents on: testdb01

Installing Oracle Grid Infrastructure Agents on: testdb02

Installing Oracle Grid Infrastructure Agents on: testdb03

Updating XAG resources.

Successfully updated XAG resources.

[grid@testdb01 xag]$

只需要在节点1上执行,会自动分发到所有计算节点。

 

3、创建应用VIP:

[root@testdb01 tmp]# appvipcfg create -network=1 -ip=20.78.212.108 -vipname=ggatevip -user=root

[root@testdb01 tmp]# crsctl setperm resource ggatevip -o root

[root@testdb01 tmp]# crsctl setperm resource ggatevip -u user:grid:r-x

 

4、启动应用VIP:

[root@testdb01 ~]# crsctl start resource ggatevip

 

5、配置xag,添加ogg资源:

[root@testdb01 bin]# cd /u01/app/grid/xaghome/bin

[root@testdb01 bin]# ./agctl add goldengate gg_1 --gg_home /ogg --nodes testdb01,testdb02,testdb03 --oracle_home /u01/app/oracle/product/19.0.0/dbhome_1 --vip_name ggatevip --user grid

[root@testdb01 bin]#

[root@testdb01 bin]# crsctl setperm resource xag.gg_1.goldengate -o oracle

 

6、启动ogg资源:

[root@testdb01 bin]# crsctl start resource xag.gg_1.goldengate

 

7、模拟切换:

[root@testdb01 bin]# ./agctl relocate goldengate gg_1 --node testdb02

此时,GoldenGate会自动切换到testdb02节点上继续运行。

 

后记

利用xag工具配置高GoldenGate高可用后,使用crsctl start resource命令启动GoldenGate时,抽取进程启动失败。报错信息如下所示:

2023-09-07T11:01:48.541+0800  ERROR   OGG-00303  Oracle GoldenGate Capture for Oracle, ext_cjjh.prm:  Unable to connect to database using user ogg. Ensure that the necessary privileges are granted to the user. Login to the database as user ogg failed because of error ORA-12162: TNS:net service name is incorrectly specified.

2023-09-07T11:01:48.541+0800  ERROR   OGG-01668  Oracle GoldenGate Capture for Oracle, ext_cjjh.prm:  PROCESS ABENDING.

从报错的日志可以看出,GoldenGate用户(ogg)无法登录数据库,失败的原因是连接数据库的服务名不正确。

查看抽取进程的配置文件,配置文件中可能会引发故障的核心代码如下所示:

GGSCI (testdb01) 3> view params ext_cjjh

 

EXTRACT ext_cjjh

Setenv (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

USERID ogg, PASSWORD AACAAAAAAAAAAAKAIHMGXGPEZEIJMFGBTAMEPIDAQGPHSJZD,encryptkey default

CACHEMGR CACHESIZE 20240MB,CACHEDIRECTORY ./dirtmp 50480MB

DISCARDFILE ./dirrpt/extcjjh.dsc, APPEND, MEGABYTES 1024

DBOPTIONS  ALLOWUNUSEDCOLUMN

。。。。略

从抽取进程的配置文件可以看出,使用ogg用户连接数据库,由于未使用连接串,所以默认使用了oracle用户的环境变量中的ORACLE_SID变量来连接数据库。

如果GoldenGate不使用高可用,这种配置是没有任何问题的,GoldenGate使用SID来连接当前数据库实例。但如果配置了高可用,则GoldenGate会在不同的节点上运行,此时GoldenGate进程的配置文件中就需要写连接数据库的连接串。如下所示:

GGSCI (testdb01) 3> view params ext_cjjh

 

EXTRACT ext_cjjh

Setenv (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

USERID ogg@XCJDB, PASSWORD AACAAAAAAAAAAAKAIHMGXGPEZEIJMFGBTAMEPIDAQGPHSJZD,encryptkey default

CACHEMGR CACHESIZE 20240MB,CACHEDIRECTORY ./dirtmp 50480MB

DISCARDFILE ./dirrpt/extcjjh.dsc, APPEND, MEGABYTES 1024

DBOPTIONS  ALLOWUNUSEDCOLUMN

 

修改完GoldenGate抽取进程的配置文件,成功启动抽取进程。

GGSCI (testdb01) 2> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     RUNNING                                          

EXTRACT     RUNNING     DPE_CJJH    00:00:00      00:00:09   

EXTRACT     RUNNING     EXT_CJJH    00:00:03      00:00:09