如何利用Linux工具监控Oracle运行状态
导读: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 编写自定义采集脚本,按需查询性能视图并上报监控平台。
- 借助 OEM、Zabbix(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
