ITPub博客

首页 > 数据库 > Oracle > Oracle脚本之自动检测MRP进程异常时修复

Oracle脚本之自动检测MRP进程异常时修复

原创 Oracle 作者:jason_yehua 时间:2025-08-14 17:12:51 0 删除 编辑

[oracle@centos7 tmp]$ more monitor_mrp.sh 

# Oracle 11.2.0.4 RAC 备库 MRP 进程检测 Bash 脚本


# 数据库 SID

DB_SID="orcl"  # e.g., 'orcl'


# 设置 ORACLE_SID

export ORACLE_SID=$DB_SID


# 检查数据库连接的 SQL 查询

CHECK_CONN_SQL="SELECT 1 FROM DUAL;"


# 检查数据库角色的 SQL 查询

CHECK_ROLE_SQL="SELECT DATABASE_ROLE FROM V\$DATABASE;"


# 检查 MRP 进程的 SQL 查询

CHECK_MRP_SQL="SELECT PROCESS || ',' || STATUS FROM V\$MANAGED_STANDBY WHERE PROCESS = 'MRP0';"


check_connection() {

    connOutput=$(echo "$CHECK_CONN_SQL" | sqlplus -S / as sysdba 2>&1)

    if echo "$connOutput" | grep -q "ORA-"; then

        echo "数据库连接失败: $connOutput"

        return 1

    else

        echo "数据库连接成功。"

        return 0

    fi

}


check_role() {

    roleOutput=$(echo "$CHECK_ROLE_SQL" | sqlplus -S / as sysdba | grep "PHYSICAL STANDBY")

    if [ -n "$roleOutput" ]; then

        echo "数据库角色为备库。"

        return 0

    else

        echo "数据库角色不是备库,无需检查 MRP 进程。"

        return 1

    fi

}


# 使用 sqlplus 执行查询

check_mrp() {

    sqlplusOutput=$(echo "$CHECK_MRP_SQL" | sqlplus -S / as sysdba)

    

    if echo "$sqlplusOutput" | grep -q "MRP0,APPLYING_LOG"; then

        echo "MRP 进程正常运行。"

        return 0

    elif echo "$sqlplusOutput" | grep -q "MRP0"; then

        status=$(echo "$sqlplusOutput" | sed 's/MRP0,//')

        echo "MRP 进程异常: 状态为 $status"

        return 1

    else

        echo "未找到 MRP 进程。"

        return 1

    fi

}


handle_abnormal() {

    # 这里可以添加异常处理逻辑,例如发送警报、重启进程等

    echo "检测到 MRP 异常,进行处理..."

    # 示例: 发送邮件或调用其他脚本

    # TODO: 实现具体处理

}


# 主逻辑

if ! check_connection; then

    exit 1

fi

if check_role; then

    if ! check_mrp; then

        handle_abnormal

    fi

fi

[oracle@rhel6 tmp]$ sh monitor_mrp.sh 

数据库连接成功。

数据库角色为备库。

MRP 进程正常运行。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31547506/viewspace-3093485/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-22

  • 博文量
    122
  • 访问量
    99648