Ubuntu系统监控Oracle运行状态的方法
sqlplus / as sysdba
登录数据库,执行SELECT status FROM v$instance;
确认实例状态(返回OPEN
表示运行中);还可查询v$session
(当前会话)、v$sql
(执行SQL)、v$waitstat
(等待事件)等视图获取详细性能信息。top/htop
:实时查看Oracle进程的CPU、内存占用(按Shift+P
按CPU排序,Shift+M
按内存排序);vmstat 2
:每2秒输出系统虚拟内存、进程、CPU使用情况(关注si/so
列判断磁盘I/O瓶颈);iostat -x 2
:监控磁盘I/O负载(关注%util
列,接近100%表示磁盘繁忙);sar -u 2 3
:查看CPU使用率历史趋势(-u
表示CPU,2
为间隔,3
为次数)。tail -f $ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<instance_name>.log
:实时查看数据库错误、警告信息;tail -f $ORACLE_HOME/network/log/listener.log
:监控监听器状态(如连接请求、错误)。sudo apt install libaio1
,下载并解压Oracle Instant Client Basic Lite包,设置LD_LIBRARY_PATH
环境变量);oracledb_exporter
(git clone https://github.com/iamseth/oracledb_exporter.git && cd oracledb_exporter && go build
);config.yml
(添加Oracle数据库的用户名、密码、服务名等信息);oracledb_exporter
(./oracledb_exporter
),默认监听9161
端口;prometheus.yml
中添加scrape_configs
,指向oracledb_exporter
的地址);zabbix_agentd.conf
文件(添加Oracle监控的自定义参数,如UserParameter=oracle.status[*],sqlplus -s / as sysdba @$1
);opatch auto
部署);emca
命令创建管理仓库);7803
),实现数据库实例的实时监控(性能指标、空间使用、资源分配)、自动修复(如重启失败的进程)、备份恢复管理及性能优化建议。oswatcher
工具包(oswatcher.tar.gz
);./oswatcher.sh -o /tmp/osw -t 60 -d 1
(-o
指定输出目录,-t
为采集间隔秒数,-d
为采集持续时间天);SET LINESIZE 200;
COL inst_sid HEADING "INST_ID|:SID" FORMAT A7;
COL username FORMAT A10;
COL machine FORMAT A12;
COL sql_exec_start HEADING "SQL START TIME" FORMAT A20;
COL sql_id FORMAT A13;
COL sql_text FORMAT A40;
COL event FORMAT A33;
COL wait_sec HEADING "WAIT (SEC)" FORMAT 99999;
SELECT
ses.inst_id || ':' || ses.sid AS inst_sid,
ses.username,
ses.machine,
TO_CHAR(ses.sql_exec_start, 'YYYY-MM-DD HH24:MI:SS') AS sql_exec_start,
ses.sql_id,
SUBSTR(sql.sql_text, 1, 40) AS sql_text,
SUBSTR(
CASE
WHEN ses.time_since_last_wait_micro = 0 THEN
CASE ses.wait_class
WHEN 'Idle' THEN 'IDLE: ' || ses.event
ELSE ses.event
END
ELSE 'ON CPU'
END, 1, 33
) AS event,
CASE
WHEN ses.time_since_last_wait_micro = 0 THEN ses.wait_time_micro / 1000000
ELSE ses.time_since_last_wait_micro / 1000000
END AS wait_sec
FROM
gv$session ses
LEFT JOIN
gv$sql sql ON ses.sql_id = sql.sql_id
WHERE
ses.status = 'ACTIVE'
AND ses.username IS NOT NULL
AND ses.inst_id = SYS_CONTEXT('USERENV', 'INSTANCE')
ORDER BY
ses.sql_exec_start, ses.username, ses.sid;
该脚本可监控当前活跃SQL的执行时间、等待事件(如I/O等待、锁等待),帮助定位性能瓶颈。