在 Linux + Oracle 环境下,“监控进程”通常分两类:
1️⃣ 操作系统层面(Linux 进程)
2️⃣ Oracle 数据库内部进程(后台进程 / 用户会话)
下面按实际使用场景系统说明。
ps -ef | grep oracle
ps -ef | grep ora_
常见进程:
ora_pmon_实例名ora_dbw0_实例名ora_lgwr_实例名ora_ckpt_实例名ora_smon_实例名ps -ef | grep tnslsnr
lsnrctl status
top -u oracle
htop # 需安装
按 CPU / 内存排序,关注:
ora_* 进程lsof -u oracle
lsof -p <PID>
SELECT name, description
FROM v$bgprocess
WHERE paddr <> '00';
SELECT
sid,
serial#,
username,
status,
program,
machine,
osuser
FROM v$session
WHERE type != 'BACKGROUND';
SELECT s.sid, s.serial#, s.username, q.sql_text
FROM v$session s
JOIN v$sql q ON s.sql_id = q.sql_id
WHERE s.status = 'ACTIVE';
SELECT
l.session_id,
s.username,
o.object_name,
l.locked_mode
FROM v$locked_object l
JOIN dba_objects o ON l.object_id = o.object_id
JOIN v$session s ON l.session_id = s.sid;
SELECT
blocking_session,
sid,
serial#,
username,
event
FROM v$session
WHERE blocking_session IS NOT NULL;
ALTER SYSTEM KILL SESSION 'sid,serial#';
系统层面(慎用):
kill -9 <PID>
@?/rdbms/admin/awrrpt.sql
@?/rdbms/admin/ashrpt.sql
crontab + shell 定期记录进程Prometheus + node_exporter + oracle_exporterZabbix(带 Oracle 模板)| 问题 | 排查方式 |
|---|---|
| 数据库卡 | top → v$session → v$sql |
| 连接不上 | lsnrctl status + ps -ef |
| 锁表 | v$locked_object |
| CPU 高 | top + v$session + AWR |
如果你能告诉我:
我可以给你更精确的脚本或方案。