19C RAC环境,利用XAG工具实现GoldenGate高可用
前言
一套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 |