前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle GoldenGate 状态监控及自启动脚本分享

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

作者头像
JiekeXu之路
发布2024-04-02 16:02:14
1040
发布2024-04-02 16:02:14
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 |

大家好,我是 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》。

正 文

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

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

代码语言:javascript
复制
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 进程。

代码语言:javascript
复制
代码语言:javascript
复制
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 文件。

代码语言:javascript
复制
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
代码语言:javascript
复制

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

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

代码语言:javascript
复制
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 进程监控自启动脚本

代码语言:javascript
复制
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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前 言
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档