GoldenGate 状态监控及自启动脚本分享

2024年 3月 25日 67.2k 0

前 言

Oracle GoldenGate 是一款强大的数据同步软件,支持 1000 多种数据平台组合,本文旨在分享 Linux 平台下从 Oracle 19c 到 kafka 的数据复制。

源端: Oracle 19c,补丁 19.15,OGG 版本为 Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO
目标端:Oracle GoldenGate for Big Data Version 12.3.2.1.1 (Build 005) Version 12.3.0.1.2 OGGCORE_OGGADP.12.3.0.1.2_PLATFORMS_180712.2305

搭建过程可参考本文《使用 OGG12.3 同步 Oracle 部分表到 Kafka》。

正 文

之前同事通过 Zabbix 监控并告警 OGG 的状态和延迟情况,并通过机器人告警到微信群,虽然不知道是怎么操作的,但使用着也是非常的方便,基本满足生产需求。可测试环境也没那么重视,但有时候主机断电或者莫名的重启了,Oracle 单机数据库一般都配置了开机自启动,RAC 默认情况下也会自启动,但是 OGG 则没有正常启动,这就导致了测试环境的归档已经删除了,但是 OGG 还没有启动捕获这部分日志,那么在 Integrated Redo 集成模式下就只能重建 OGG 了,经典模式还有招跳过这部分归档。

首先我们通过命令行交互式 ggsci PARAMFILE mon_ogg.par 检查进程状态,那么我们需要编辑 mon_ogg.par 文件,将“info all” 写入到此文件,这样执行此命令我们就可以查看到 MANAGER 和 EXTRACT 进程的状态了。

op-rac2:/ogg19c(jiekexu2)$ ggsci PARAMFILE $OGG_HOME/mon_ogg.par

Oracle GoldenGate Command Interpreter for Oracle
Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO
Linux, x64, 64bit (optimized), Oracle 19c on Oct 17 2019 21:16:29
Operating system character set identified as US-ASCII.

Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.

GGSCI (op-rac2) 1> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING
EXTRACT RUNNING DPE1 00:00:00 00:00:02
EXTRACT RUNNING EXT1 00:00:04 00:00:01

这样如果 MANAGER 进程没有启动,我们可以将其过滤出来,用以判断执行启动 mgr 命令。然后我们将“start MGR”写入到一个新文件 start_ogg.par,然后通过命令行 ggsci PARAMFILE start_ogg.par 启动 MANAGER 进程。

op-rac2:/ogg19c(jiekexu2)$ $OGG_HOME/ggsci PARAMFILE $OGG_HOME/mon_ogg.par | grep MANAGER | awk '{print $2}'
RUNNING

接下来我们判断 EXTRACT 进程,如果有异常状态的,不是 “RUNNNING” 状态,我们则将其追加写到 start_ogg.par 文件,如果此文件不为空,用以启动 EXTRACT 进程,当执行完后,我们需要清空 start_ogg.par 文件。

ggsci PARAMFILE mon_ogg.par | grep -v "RUNNING" | grep EXTRACT | awk '{print "start " $3}' >> start_ogg.par

ggsci PARAMFILE start_ogg.par

echo /dev/null > start_ogg.par

然后我们通过操作系统级别的定时任务部署这个脚本,当数据库启动后每隔 5 分钟执行这个任务脚本即可,这里没有使用 rc.local 的原因是因为,rc.local 里数据库开启自启动和 OGG 开机自启动不是很好判断顺序,比如数据库还没有正常启动则 OGG 无法连接到数据库,进而 OGG 无法正常启动,考虑到这一点,则将自启动加到 crontab 里,定时去执行即可。如果各位大佬还有更好的办法,欢迎一起交流学习。

最后附整个脚本,你只需要修改脚本中 OGG_HOME 的路径即可。

op-rac2:/ogg19c(jiekexu2)$ more /home/oracle/monitor_ogg.sh
#!/bin/bash

source /home/oracle/.bash_profile

# print date
date

# export OGG_HOME ----> you need edit OGG_HOME PATH
OGG_HOME=/ogg19c

# create ogg monitor command file
echo "info all" > $OGG_HOME/mon_ogg.par

manager_status=$($OGG_HOME/ggsci PARAMFILE $OGG_HOME/mon_ogg.par | grep MANAGER | awk '{print $2}')

# MANAGER status?
if [ "$manager_status" != "RUNNING" ]; then
echo "MANAGER is not running. Starting MANAGER..."
echo "start MGR" >> $OGG_HOME/start_ogg.par
else
echo "MANAGER is running."
fi

# create file start_ogg.par
$OGG_HOME/ggsci PARAMFILE $OGG_HOME/mon_ogg.par | grep -v "RUNNING" | grep EXTRACT | awk '{print "start " $3}' >> $OGG_HOME/start_ogg.par

# check start_ogg.par is null or not null?
if [ -s $OGG_HOME/start_ogg.par ]; then
echo "start_ogg.par is not null,please exec this file..."
# if this file is not null,exec $OGG_HOME/ggsci PARAMFILE start_ogg.par
$OGG_HOME/ggsci PARAMFILE start_ogg.par
else
echo "start_ogg.par is null,No need to execute this command!"
fi

> $OGG_HOME/start_ogg.par

###crontab### */5 * * * * /bin/bash /home/oracle/monitor_ogg.sh >> /home/oracle/start_ogg.log 2>&1

附 目标端 REPLICAT 进程监控自启动脚本

more /home/oracle/monitor_ogg.sh
#!/bin/bash

source /home/oracle/.bash_profile
export JAVA_HOME=/home/oracle/java/jdk1.8.0_181
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/server:$LD_LIBRARY_PATH

#print date
date

# export OGG_HOME ----> you need edit OGG_HOME PATH
OGG_HOME=/soft

# create ogg monitor command file
echo "info all" > $OGG_HOME/mon_ogg.par

manager_status=$($OGG_HOME/ggsci PARAMFILE $OGG_HOME/mon_ogg.par | grep MANAGER | awk '{print $2}')

# MANAGER status?
if [ "$manager_status" != "RUNNING" ]; then
echo "MANAGER is not running. Starting MANAGER..."
echo "start MGR" >> $OGG_HOME/start_ogg.par
else
echo "MANAGER is running."
fi

# create file start_ogg.par
$OGG_HOME/ggsci PARAMFILE $OGG_HOME/mon_ogg.par | grep -v "RUNNING" | grep REPLICAT | awk '{print "start " $3}' >> $OGG_HOME/start_ogg.par

# check start_ogg.par is null or not null?
if [ -s $OGG_HOME/start_ogg.par ]; then
echo "start_ogg.par is not null,please exec this file..."
# if this file is not null,exec $OGG_HOME/ggsci PARAMFILE start_ogg.par
$OGG_HOME/ggsci PARAMFILE $OGG_HOME/start_ogg.par
else
echo "start_ogg.par is null,No need to execute this command!"
fi

> $OGG_HOME/start_ogg.par

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

❤️ 欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
————————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论