温馨提示×

centos系统oracle数据库如何监控

小樊
47
2025-11-19 21:11:07
栏目: 云计算

监控目标与总体架构

  • 建议从四个层面建立可观测性:主机层(CPU、内存、I/O、网络)、监听与连接层(监听器状态、端口连通)、数据库层(实例可用性、会话与SQL、等待事件、表空间)、备份与恢复(RMAN 备份结果)。
  • 工具选型建议:企业级统一监控优先用 Oracle Enterprise Manager Cloud Control 13c/14c;开源方案可用 Zabbix(ODBC)Prometheus + oracle_exporter;命令行与脚本用于快速排障与补充采集。
  • OEM 提供现成的监控、告警、事件压缩、维护窗口(Blackouts)与自动修复(更正措施),适合集中化管理多套数据库与中间件。

快速检查与命令行监控

  • 主机与进程
    • 查看 Oracle 相关进程:ps -ef | grep ora_
    • 资源与 I/O:top/htopiostat -xz 1 1vmstat 1 5sar -n DEV 1 5nmon
  • 监听与网络
    • 监听状态:lsnrctl status;启动监听:lsnrctl start
    • 端口连通:netstat -tlnp | grep <端口号>(如 1521
  • 数据库可用性与会话
    • 登录数据库:sqlplus / as sysdba
    • 实例与进程:select instance_name, status from v$instance;select name, open_mode from v$database;
    • 会话与负载:select count(*), status from v$session group by status;
  • 表空间使用率
    • 快速查询:
      col TABLESPACE_NAME for a20
      select tbs_used_info.tablespace_name,
             tbs_used_info.alloc_mb,
             tbs_used_info.used_mb,
             tbs_used_info.max_mb,
             tbs_used_info.free_of_max_mb,
             tbs_used_info.used_of_max || '%' used_of_max_pct
      from (
        select a.tablespace_name,
               round(a.bytes_alloc/1024/1024) alloc_mb,
               round((a.bytes_alloc - nvl(b.bytes_free,0))/1024/1024) used_mb,
               round((a.bytes_alloc - nvl(b.bytes_free,0))*100/a.maxbytes) used_of_max,
               round((a.maxbytes - a.bytes_alloc + nvl(b.bytes_free,0))/1048576) free_of_max_mb,
               round(a.maxbytes/1048576) max_mb
        from (select f.tablespace_name,
                     sum(f.bytes) bytes_alloc,
                     sum(decode(f.autoextensible,'YES',f.maxbytes,'NO',f.bytes)) maxbytes
              from dba_data_files f group by f.tablespace_name) a,
             (select f.tablespace_name, sum(f.bytes) bytes_free
              from dba_free_space f group by f.tablespace_name) b
        where a.tablespace_name = b.tablespace_name(+)
      ) tbs_used_info
      order by tbs_used_info.used_of_max desc;
      
  • 备份与归档
    • RMAN 备份检查:rman target / list backup;
  • 性能与等待
    • 实时会话与等待:select event, count(*) from v$session_wait group by event order by count(*) desc;
    • SQL 负载:select sql_text, executions, elapsed_time from v$sql order by elapsed_time desc where rownum <= 10;
  • 性能工具
    • 使用 oratop(官方轻量工具)实时查看进程、SQL、等待事件与 ADG 相关信息。

企业级与开源监控方案

  • Oracle Enterprise Manager Cloud Control
    • 统一监控 Oracle Database/Exadata/Autonomous Database/中间件/应用,提供丰富的预警与通知(邮件、SNMP、工单)、事件压缩与生命周期管理、维护窗口(Blackouts)、Always-On Monitoring、Metric Extensions、模板与权限传播、自动化更正措施与 Runbook,适合大规模与合规化管理。
  • Zabbix 无代理监控 Oracle(ODBC)
    • 在 Zabbix Server/Proxy 安装 Oracle Instant Client(Basic、SQL*Plus、ODBC),解决依赖(如 libaio、libnsl),配置 ODBC DSN,导入开箱即用的 Oracle 模板后即可采集数据库、表空间、ASM 等指标;用 sqlplus 验证连通性,Zabbix 通过 ODBC 定时抓取指标并告警。
  • Prometheus + oracle_exporter
    • 部署 oracle_exporter 暴露 Oracle 指标,Prometheus 拉取并存储,Grafana 做可视化与阈值告警;适合云原生与容器化环境,可与主机与日志系统统一观测。
  • 其他可选
    • Datadog、Nagios、SolarWinds 等平台可集成 Oracle 监听日志、会话与性能数据,提供可视化与告警能力。

关键告警阈值与巡检清单

  • 建议阈值与动作
    • 表空间使用率:>80% 预警、>90% 严重(扩容/清理回收站/调整自动扩展)
    • 会话数:接近 PROCESSES/SESSIONS 上限(检查异常连接/应用泄漏)
    • 长时间运行 SQL:超过阈值(如 600s)触发终止或优化
    • 等待事件:如 db file sequential/scattered read、log file sync 持续偏高(定位 I/O 或提交瓶颈)
    • 备份:最近一次 RMAN 备份失败归档断档(立即核查通道/磁盘/保留策略)
    • 监听器:端口 1521 不可达或 lsnrctl status 异常(重启监听/网络排障)
  • 日常巡检清单(示例)
    • 主机:top/free/df -h/iostat/vmstat/sar/nmon;检查系统日志与内核参数
    • 监听:lsnrctl statusnetstat -tlnp | grep 1521
    • 实例:select instance_name, status, database_status from v$instance;
    • 表空间:上述 SQL 排名前 5 的表空间
    • 备份:rman target / list backup summary; validate backup;
    • 作业与调度:select job_name, next_date, failures from dba_scheduler_jobs where enabled='TRUE';
    • 补丁与版本:opatch lspatchessqlplus -version

自动化脚本与维护窗口示例

  • 监听自愈脚本(每分钟检查并自动拉起)
    #!/bin/bash
    if ! command -v lsnrctl &> /dev/null; then
      echo "lsnrctl not found"; exit 1
    fi
    status=$(lsnrctl status 2>/dev/null)
    if echo "$status" | grep -q "LISTENER"; then
      echo "Listener is running."
    else
      echo "Listener is DOWN, starting..."
      lsnrctl start
    fi
    
    • 加入定时任务:* * * * * /path/to/monitor_listener.sh
  • 维护窗口与告警静默
    • 使用 OEM Blackouts 在变更/升级期间屏蔽告警,避免误报;启用 Always-On Monitoring 确保关键事件仍可通知。

0