首页主机资讯Debian下Oracle监控如何实现

Debian下Oracle监控如何实现

时间2025-11-22 00:37:03发布访客分类主机资讯浏览256
导读:Debian下Oracle监控实现指南 一、监控目标与总体架构 建议从四个层面建立可观测性: 监听器层:确认监听进程与端口(默认1521)可达、服务注册正常、日志无异常。 实例与数据库层:会话与SQL、等待事件、表空间、归档/Data...

Debian下Oracle监控实现指南

一、监控目标与总体架构

  • 建议从四个层面建立可观测性:
    • 监听器层:确认监听进程与端口(默认1521)可达、服务注册正常、日志无异常。
    • 实例与数据库层:会话与SQL、等待事件、表空间、归档/Data Guard 延迟、AWR/ASH 基线。
    • 操作系统层:CPU、内存、I/O、网络、进程资源(如 ora_pmon、ora_smon 等)。
    • 告警与可视化:集中展示与阈值告警(如 Zabbix、Prometheus + oracle_exporter、Nagios、OEM)。

二、快速检查与命令行监控

  • 监听器状态与端口
    • 查看监听状态:lsnrctl status
    • 实时查看监听日志:tail -f $ORACLE_HOME/network/log/listener.log
    • 端口连通性:ss -tuln | grep 1521nmap -p 1521 localhost
  • 数据库进程与资源
    • 进程检查:ps -ef | grep ora_
    • 系统资源:top/htopvmstatiostatnmon
  • 活跃会话与长SQL
    • 示例查询(GV$ 视图适配 RAC/多实例):
      select ses.inst_id||':'||ses.sid as inst_sid,
             username,
             (sysdate - sql_exec_start) day(1) to second(0) as sql_exec_start,
             ses.sql_id,
             substr(sql.sql_text,1,40) sql_text,
             substr(case when time_since_last_wait_micro=0 then
                         case wait_class when 'Idle' then 'IDLE: '||event else event end
                       else 'ON CPU' end,1,33) event,
             (case when time_since_last_wait_micro=0 then wait_time_micro
                   else time_since_last_wait_micro end)/1000000 wait_sec
      from gv$session ses, gv$sqlstats sql
      where ses.inst_id||':'||ses.sid <
          >
           sys_context('USERENV','INSTANCE')||':'||sys_context('USERENV','SID')
        and username is not null
        and status='ACTIVE'
        and ses.sql_id = sql.sql_id (+);
          
      
  • Data Guard 备库延迟(ADG)
    • 获取最近已应用的归档时间并与当前时间比较,超过阈值(如1小时/3小时)触发告警。

三、自动化脚本与系统服务

  • 使用 systemd 托管监听器
    • 创建服务文件 /etc/systemd/system/oracle-listener.service
      [Unit]
      Description=Oracle Database Listener
      After=network.target
      
      [Service]
      Type=forking
      User=oracle
      ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl start
      ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl stop
      ExecReload=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl reload
      Restart=on-failure
      
      [Install]
      WantedBy=multi-user.target
      
    • 启用与启动:systemctl daemon-reload & & systemctl enable --now oracle-listener
    • 日志查看:journalctl -u oracle-listener -f
  • 定时巡检与告警
    • 例:每小时记录监听状态到日志
      • crontab -e 添加:0 * * * * /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl status > /var/log/oracle-listener-status.log 2> & 1
    • ADG 延迟脚本(阈值可按负载调整):
      #!/usr/bin/env bash
      export ORACLE_SID=orcl
      export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
      export PATH=$ORACLE_HOME/bin:$PATH
      
      LAST_APPLIED_TIME=$(sqlplus -s / as sysdba <
          <
          'EOF'
      SET HEADING OFF FEEDBACK OFF
      SELECT TO_CHAR(next_time, 'YYYY-MM-DD HH24:MI:SS')
      FROM v$archived_log
      WHERE sequence# = (SELECT MAX(sequence#) FROM v$archived_log WHERE applied='YES');
          
      EXIT;
          
      EOF
      )
      
      if [[ -z "$LAST_APPLIED_TIME" ]];
           then
        echo "[$(date)] ERROR: Cannot get last applied time." >
          >
           /var/log/adg_monitor.log
        exit 1
      fi
      
      CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")
      CURRENT_TS=$(date -d "$CURRENT_TIME" +%s)
      LAST_TS=$(date -d "$LAST_APPLIED_TIME" +%s)
      DIFF=$((CURRENT_TS - LAST_TS))
      
      if (( DIFF >
           3600 ));
       then
        echo "[$(date)] WARN: Last applied $LAST_APPLIED_TIME, diff ${
      DIFF}
          s" >
          >
           /var/log/adg_monitor.log
        # mailx -s "ADG Lag Alert" dba@example.com <
          <
          <
           "Last applied: $LAST_APPLIED_TIME, now: $CURRENT_TIME"
      else
        echo "[$(date)] OK: Last applied $LAST_APPLIED_TIME" >
          >
           /var/log/adg_monitor.log
      fi
      
    • 注意:将脚本中的 ORACLE_HOME、ORACLE_SID、告警方式 按实际环境调整。

四、企业级监控方案与落地

  • 常用平台与适配要点
    • Oracle Enterprise Manager(OEM):图形化监控数据库、监听与主机,适合集中化运维与性能诊断。
    • Zabbix:可通过 ODBC/External Check 采集数据库与监听指标,配置阈值与告警。
    • Prometheus + oracle_exporter:拉取 Oracle 性能指标,配合 Grafana 可视化与 Alertmanager 告警。
    • Nagios:以插件方式检查监听、会话、表空间等关键指标,适合传统监控体系。
    • oratop:Oracle 官方轻量工具,实时查看进程、SQL、等待事件,适合临时排障与巡检。
  • 建议的关键告警与阈值
    • 监听器:端口 1521 不可达、lsnrctl status 异常、listener.log 出现致命错误。
    • 实例smon/pmon 进程缺失、归档/联机日志切换异常、系统表空间使用率超过85%
    • ADG:已应用日志时间滞后超过1小时(高负载可设为30分钟)。
    • OS:CPU 持续> 80%、可用内存低于阈值、I/O 等待高、磁盘使用率> 85%

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Debian下Oracle监控如何实现
本文地址: https://pptw.com/jishu/753907.html
Debian中Oracle性能如何测试 Debian与Oracle集成如何实现

游客 回复需填写必要信息