暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

一分钟教你配置OGG自启动服务

原创 szrsu 2024-12-11
1283

OGG没有自启动服务,有时候碰到主机重启,没法随主机启动而启动。在 Linux下可以通过创建系统服务来实现自启动,以下是详细步骤:

创建启动脚本

编写一个 Shell 脚本来启动 GoldenGate 进程,例如 ogg_start.sh

$ cat /ogg/ogg_start.sh #!/bin/bash # 设置 GoldenGate 安装路径和日志路径 GG_HOME=/ogg # 替换为实际的 GoldenGate 安装路径 LOG_FILE=$GG_HOME/ogg_start.log # 替换为实际日志文件路径 export LD_LIBRARY_PATH=$GG_HOME:$LD_LIBRARY_PATH source /home/oracle/.bash_profile # 创建日志文件夹(如果不存在) mkdir -p $(dirname $LOG_FILE) # 函数:写日志 log_message() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE } log_message "Starting GoldenGate startup process..." cd $GG_HOME || { log_message "ERROR: Failed to switch to GoldenGate home directory."; exit 1; } # 启动管理器 log_message "Starting manager process..." ./ggsci <<EOF start mgr exit EOF sleep 2 # 检查管理器状态 MGR_STATUS=$(./ggsci <<EOF | grep -i "Manager" | awk '{print $2}' info all exit EOF ) if [ "$MGR_STATUS" != "RUNNING" ]; then log_message "ERROR: Failed to start manager process." else log_message "Successfully started manager process." fi # 动态启动所有非运行状态的抽取和投递进程 log_message "Checking and starting non-running processes..." NON_RUNNING_PROCESSES=$(./ggsci <<EOF | awk '/^(EXTRACT|REPLICAT)/ && ($2 == "STOPPED" || $2 == "ABENDED") {print $3}' info all exit EOF ) if [ -z "$NON_RUNNING_PROCESSES" ]; then log_message "All processes are already running." else for process in $NON_RUNNING_PROCESSES; do log_message "Starting process: $process" ./ggsci <<EOF start $process exit EOF sleep 2 # 检查启动是否成功 STATUS=$(./ggsci <<EOF | grep -i "$process" | awk '{print $2}' info all exit EOF ) if [ "$STATUS" != "RUNNING" ]; then log_message "ERROR: Failed to start process: $process" else log_message "Successfully started process: $process" fi done fi log_message "GoldenGate startup process completed."

关键点:

  1. info all 命令会列出所有进程及其状态。
  2. 使用 awk 筛选出状态为 STOPPEDABENDED 的进程名称。
  3. 依次启动这些进程。

给脚本赋予执行权限:

$ chmod +x /ogg/ogg_start.sh

创建关闭脚本

编写一个 ogg_stop.sh 脚本来停止所有正在运行的进程:

$ cat ogg/ogg_stop.sh 
#!/bin/bash

# 设置 GoldenGate 安装路径和日志路径
GG_HOME=/ogg/  # 替换为实际的 GoldenGate 安装路径
LOG_FILE=$GG_HOME/ogg_stop.log  # 替换为实际日志文件路径
export LD_LIBRARY_PATH=$GG_HOME:$LD_LIBRARY_PATH
source /home/oracle/.bash_profile

# 创建日志文件夹(如果不存在)
mkdir -p $(dirname $LOG_FILE)

# 函数:写日志
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}

log_message "Starting GoldenGate shutdown process..."

cd $GG_HOME || { log_message "ERROR: Failed to switch to GoldenGate home directory."; exit 1; }

# 动态停止所有运行的抽取和投递进程
log_message "Stopping all running processes..."
RUNNING_PROCESSES=$(./ggsci <<EOF | grep "RUNNING" | awk '{print $3}'
info all
exit
EOF
)

if [ -z "$RUNNING_PROCESSES" ]; then
    log_message "No running processes found."
else
    for process in $RUNNING_PROCESSES; do
        log_message "Stopping process: $process"
        ./ggsci <<EOF
stop $process
exit
EOF
        sleep 2
        # 检查停止是否成功
        STATUS=$(./ggsci <<EOF | grep "$process" | awk '{print $2}'
info all
exit
EOF
)
        if [ "$STATUS" != "STOPPED" ]; then
            log_message "ERROR: Failed to stop process: $process"
        else
            log_message "Successfully stopped process: $process"
        fi
    done
fi

# 停止管理器进程
log_message "Stopping manager process..."
./ggsci <<EOF
stop mgr!
exit
EOF
sleep 2
# 检查管理器状态
MGR_STATUS=$(./ggsci <<EOF | grep -i "manager" | awk '{print $2}'
info all
exit
EOF
)

if [ "$MGR_STATUS" != "STOPPED" ]; then
    log_message "ERROR: Failed to stop manager process."
else
    log_message "Successfully stopped manager process."
fi

log_message "GoldenGate shutdown process completed."

关键点:

(1)动态检测运行状态的进程

  • 利用 ggsciinfo all 命令获取所有进程的状态。
  • 使用 grep "RUNNING" 筛选出运行中的进程。

(2)逐一停止运行的进程

  • 循环处理筛选出的进程名,逐一通过 STOP 命令停止它们。

(3)最后停止管理器进程

  • 确保所有抽取和投递进程停止后,再停止 mgr 进程。

给脚本赋予执行权限:

$ chmod +x /ogg/ogg_stop.sh

创建 systemd 服务文件

/etc/systemd/system/ 目录下创建一个服务文件,例如 ogg.service

# cat /etc/systemd/system/ogg.service [Unit] Description=Oracle GoldenGate Service After=network.target [Service] User=oracle Group=oinstall Type=forking RemainAfterExit=yes KillMode=none TimeoutStopSec=60 TimeoutSec=300 ExecStart=/ogg/ogg_start.sh ExecStop=/ogg/ogg_stop.sh Restart=on [Install] WantedBy=multi-user.target

启动服务

# 重新加载 systemd 配置 systemctl daemon-reload # 启动服务 systemctl start ogg # 设置开机启动 systemctl enable ogg

验证服务状态

systemctl status ogg

如果不设置成系统服务,可以在rc.local文件添加启动内容:

# cat /etc/rc.local
sh /ogg/ogg_start.sh
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论