首页主机资讯如何利用Linux工具监控Oracle运行状态

如何利用Linux工具监控Oracle运行状态

时间2026-01-21 21:54:04发布访客分类主机资讯浏览615
导读:Linux下监控Oracle运行状态的实用方案 一 快速健康检查 检查实例进程:使用命令查看是否存在以**ora_pmon_**为代表的后台进程,若存在通常表示实例已启动。示例:ps -ef | grep pmon 或更精确地 ps -e...

Linux下监控Oracle运行状态的实用方案

一 快速健康检查

  • 检查实例进程:使用命令查看是否存在以**ora_pmon_**为代表的后台进程,若存在通常表示实例已启动。示例:ps -ef | grep pmon 或更精确地 ps -ef | grep "ora_pmon_" | grep -v grep
  • 监听状态:确认数据库监听是否正常对外提供服务。示例:lsnrctl status
  • 系统服务状态:若以服务方式管理,可用 systemctl status oracle 查看单元状态。
  • 数据库实例与打开模式:登录 SQL*Plus(如 sqlplus / as sysdba)后执行:
    • select instance_name, status, version, database_status from v$instance; (关注 STATUS 为OPEN、DATABASE_STATUS 为ACTIVE
    • select name, log_mode, open_mode from v$database; (确认处于可读写 OPEN 模式,并了解是否启用ARCHIVELOG
  • 告警日志:及时查看 alert log(实例启动、恢复、错误等关键事件)。

二 系统资源监控

  • 进程与负载:top/htop 观察占用 CPU、内存较高的进程,快速定位异常会话或阻塞。
  • 虚拟内存与 CPU:vmstat 2 查看 CPU、内存、swap、I/O 等系统层面瓶颈。
  • 磁盘 I/O:iostat -x 1 关注 await、r/s、w/s、util% 等指标,识别存储瓶颈。
  • 历史与综合:sar -A 回看历史资源使用;dstat 实时综合展示 CPU、内存、磁盘、网络。
  • 一体工具:nmon 交互式查看 CPU、内存、磁盘、网络等,并支持数据导出。

三 数据库性能与等待事件

  • 实时会话与 SQL:oratop 以类 top 的方式展示进程、SQL、实时等待事件,并支持 ADG 场景,便于快速定位高消耗 SQL 与等待链路。
  • 等待事件与负载洞察:在 SQL*Plus 中查询动态性能视图,例如:
    • select event, count(*), time_waited from v$session_event group by event order by time_waited desc;
    • 结合 v$session, v$sql, v$system_event 等定位热点对象与执行计划变化。
  • 自动化与扩展:
    • 使用 Python + cx_Oracle 编写自定义采集脚本,按需查询性能视图并上报监控平台。
    • 借助 OEMZabbix(agent 或 external check)、Prometheus + oracle_exporter 搭建可视化与告警体系。

四 一键巡检脚本示例

#!/usr/bin/env bash
# 用法:./check_oracle.sh ORACLE_SID

SID=${
    1:?"Usage: $0 <
    ORACLE_SID>
"}
    
export ORACLE_SID=$SID
export ORAENV_ASK=NO
. /usr/local/bin/oraenv >
    /dev/null 2>
    &
    1

echo "=== Instance &
 Listener ==="
ps -ef | grep "ora_pmon_${
SID}
    " | grep -v grep &
    &
     echo "PMON found." || echo "PMON not found!"
lsnrctl status | egrep 'STATUS|TNS'

echo -e "\n=== Database Status ==="
sqlplus -S / as sysdba <
    <
    'SQL'
set lines 200
col status for a10
col database_status for a12
select instance_name, status, database_status from v$instance;
    
select name, open_mode, log_mode from v$database;
    
SQL

echo -e "\n=== Top 5 Wait Events ==="
sqlplus -S / as sysdba <
    <
    'SQL'
set lines 200 pages 1000
col event for a40
select event, count(*), round(time_waited/100,2) sec
from v$session_event
group by event
order by time_waited desc
fetch first 5 rows only;
    
SQL

echo -e "\n=== System Resources ==="
echo "CPU/IO Load:"
vmstat 1 5 | tail -n 3
echo -e "\nDisk Utilization:"
iostat -x 1 3 | egrep '^Device|^sd'
  • 建议配合 crontab 定时执行,将输出重定向到日志或推送至 Zabbix/Prometheus
  • 生产环境请使用低开销账号、限制采集频率,并妥善管理 SQL*Plus 凭据与日志权限。

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


若转载请注明出处: 如何利用Linux工具监控Oracle运行状态
本文地址: https://pptw.com/jishu/789144.html
如何优化Linux上Oracle数据库的查询性能 Ubuntu Python环境如何备份

游客 回复需填写必要信息