在 Linux 上监控 Oracle 数据库运行状态,通常可以从 操作系统层面 和 数据库层面 两个维度来进行。下面给你一套实用、可落地的方案。
ps -ef | grep ora_
常见关键进程:
ora_pmon_*:进程监控ora_smon_*:系统监控ora_dbw*:数据写进程ora_lgwr*:日志写进程如果以上进程不存在,数据库大概率未启动或已宕机。
lsnrctl status
或
lsnrctl status listener_name
top
htop
关注:
Oracle 非常依赖内存和 I/O。
iostat -x 1
关注:
%utilawaitsvctmfree -h
vmstat 1
sqlplus / as sysdba
SELECT name, open_mode, status FROM v$database;
或
SELECT instance_name, status FROM v$instance;
正常应为:
OPENstatus = OPENSELECT count(*) FROM v$session;
活跃会话:
SELECT count(*) FROM v$session WHERE status='ACTIVE';
SELECT event, count(*)
FROM v$session_wait
GROUP BY event
ORDER BY 2 DESC;
SELECT
tablespace_name,
round(used_space*8/1024,2) used_mb,
round(tablespace_size*8/1024,2) total_mb
FROM dba_tablespace_usage_metrics;
SELECT * FROM v$log;
路径一般在:
$ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace/alert_$ORACLE_SID.log
实时查看:
tail -f alert_*.log
$ORACLE_BASE/diag/tnslsnr/$HOST/listener/trace/listener.log
官方图形化监控,功能最全。
例如每隔 5 分钟检查数据库是否存活:
*/5 * * * * /home/oracle/check_db.sh
check_db.sh 示例:
#!/bin/bash
ps -ef | grep ora_pmon | grep -v grep > /dev/null
if [ $? -ne 0 ]; then
echo "Oracle is down" | mail -s "Oracle Alert" dba@example.com
fi
| 现象 | 可能原因 |
|---|---|
| ora_pmon 不存在 | 数据库未启动 |
| 监听不通 | listener 未启动 |
| CPU 100% | SQL 性能问题 |
| 磁盘 IO 高 | 大量全表扫描 |
| ORA-00257 | 归档日志满 |
如果你愿意,可以告诉我:
我可以给你一套更精确的监控方案或脚本。