作者 | JiekeXu
来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)
如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)
大家好,我是 JiekeXu,江湖人称“强哥”,很高兴又和大家见面了,今天和大家一起来看看 GoldenGate 状态监控及自启动脚本,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!
前 言
在这篇文章开始之前,先跟大家推荐一位 PG 大佬公众号,一直深耕 PostgreSQL 多年,混迹于各大互联网公司和各种大会,也属于数据库老司机,云计算泥石流,开源 RDS —— Pigsty 大本营,感兴趣的朋友可以关注下。
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》。
————————————————————————————
微信公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————
正 文
之前同事通过 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 分钟执行这个任务脚本即可,这里没有使用 /etc/rc.local 的原因是因为 /etc/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之路】,第一时间一起学习新知识!————————————————————————————
公众号:JiekeXu DBA之路
CSDN :https://blog.csdn.net/JiekeXu
墨天轮:https://www.modb.pro/u/4347
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————
分享几个数据库备份脚本
一文搞懂 Oracle 统计信息
我的 Oracle ACE 心路历程
Oracle 主流版本不同架构下的静默安装指南
关机重启导致 ASM 磁盘丢失数据库无法启动
Oracle SQL 性能分析(SPA)原理与实战演练
Oracle 11g 升级到 19c 需要关注的几个问题
Windows 10 环境下 MySQL 8.0.33 安装指南
SQL 大全(四)|数据库迁移升级时常用 SQL 语句
OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)
Oracle 大数据量导出工具——sqluldr2 的安装与使用
从国产数据库调研报告中你都能了解哪些信息及我的总结建议
使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践
在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?