温馨提示×

linux oracle如何监控运行

小樊
49
2026-09-10 10:20:19
栏目: 云计算

在 Linux 上监控 Oracle 数据库运行状态,通常可以从 操作系统层面 和 数据库层面 两个维度来进行。下面给你一套实用、可落地的方案。


一、操作系统层面监控(Linux)

1. 查看 Oracle 进程

ps -ef | grep ora_

常见关键进程:

  • ora_pmon_*:进程监控
  • ora_smon_*:系统监控
  • ora_dbw*:数据写进程
  • ora_lgwr*:日志写进程

如果以上进程不存在,数据库大概率未启动或已宕机。


2. 查看监听状态

lsnrctl status

或

lsnrctl status listener_name

3. 系统资源监控

top
htop

关注:

  • CPU 使用率
  • 内存使用
  • swap 使用

Oracle 非常依赖内存和 I/O。


4. 磁盘 I/O 监控

iostat -x 1

关注:

  • %util
  • await
  • svctm

5. 内存与 Swap

free -h
vmstat 1

二、数据库层面监控(Oracle 内部)

1. 登录数据库

sqlplus / as sysdba

2. 查看数据库状态

SELECT name, open_mode, status FROM v$database;

或

SELECT instance_name, status FROM v$instance;

正常应为:

  • OPEN
  • status = OPEN

3. 查看会话情况

SELECT count(*) FROM v$session;

活跃会话:

SELECT count(*) FROM v$session WHERE status='ACTIVE';

4. 查看等待事件(性能问题)

SELECT event, count(*)
FROM v$session_wait
GROUP BY event
ORDER BY 2 DESC;

5. 查看表空间使用率

SELECT
  tablespace_name,
  round(used_space*8/1024,2) used_mb,
  round(tablespace_size*8/1024,2) total_mb
FROM dba_tablespace_usage_metrics;

6. 查看 redo / 日志切换

SELECT * FROM v$log;

三、日志监控(非常重要)

1. Alert Log(告警日志)

路径一般在:

$ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace/alert_$ORACLE_SID.log

实时查看:

tail -f alert_*.log

2. Listener 日志

$ORACLE_BASE/diag/tnslsnr/$HOST/listener/trace/listener.log

四、自动化监控方案(推荐)

1. Oracle Enterprise Manager(OEM)

官方图形化监控,功能最全。


2. 脚本 + crontab

例如每隔 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

3. 第三方监控

  • Zabbix
  • Prometheus + Node Exporter
  • Grafana + Oracle Exporter

五、常见故障快速判断

现象 可能原因
ora_pmon 不存在 数据库未启动
监听不通 listener 未启动
CPU 100% SQL 性能问题
磁盘 IO 高 大量全表扫描
ORA-00257 归档日志满

如果你愿意,可以告诉我:

  • Oracle 版本(11g / 12c / 19c)
  • 单机还是 RAC
  • 想要 人工巡检 还是 自动告警

我可以给你一套更精确的监控方案或脚本。

0 踩