Linux下监控Oracle运行状态的实用方案
一 快速健康检查
ps -ef | grep pmon 或更精确地 ps -ef | grep "ora_pmon_" | grep -v grep。lsnrctl status。systemctl status oracle 查看单元状态。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)二 系统资源监控
top/htop 观察占用 CPU、内存较高的进程,快速定位异常会话或阻塞。vmstat 2 查看 CPU、内存、swap、I/O 等系统层面瓶颈。iostat -x 1 关注 await、r/s、w/s、util% 等指标,识别存储瓶颈。sar -A 回看历史资源使用;dstat 实时综合展示 CPU、内存、磁盘、网络。nmon 交互式查看 CPU、内存、磁盘、网络等,并支持数据导出。三 数据库性能与等待事件
oratop 以类 top 的方式展示进程、SQL、实时等待事件,并支持 ADG 场景,便于快速定位高消耗 SQL 与等待链路。select event, count(*), time_waited from v$session_event group by event order by time_waited desc;v$session, v$sql, v$system_event 等定位热点对象与执行计划变化。四 一键巡检脚本示例
#!/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。