在Ubuntu上监控Oracle数据库前,需确保以下条件满足:
sudo apt update && sudo apt install libaio1安装基础依赖,再下载Oracle Instant Client包并配置环境变量(如LD_LIBRARY_PATH);lsnrctl是Oracle提供的监听器管理工具,用于检查监听器是否正常运行及监听服务状态。
lsnrctl status,输出内容包括监听器名称、版本、启动时间、监听地址(如IP:端口)及绑定的服务名(如ORCL);lsnrctl services,可获取每个服务的状态(如READY表示正常)、当前连接数、服务类型(如数据库服务);tail -f $ORACLE_HOME/network/log/listener.log实时跟踪监听器日志,快速定位连接失败、服务注册异常等问题。SQL*Plus是Oracle自带的命令行工具,可通过SQL查询获取实例状态、性能指标及活跃会话信息。
SELECT status FROM v$instance;,若返回OPEN则表示实例正常运行;SELECT COUNT(*) FROM v$session;,可统计当前数据库连接总数;SELECT sql_text, executions, elapsed_time FROM v$sqlarea WHERE executions > 100 ORDER BY elapsed_time DESC FETCH FIRST 5 ROWS ONLY;,可找出执行次数多、耗时长的TOP SQL(需替换条件适配业务场景);SELECT event, COUNT(*) FROM v$session_wait GROUP BY event ORDER BY COUNT(*) DESC;,可识别数据库当前的瓶颈(如db file sequential read表示磁盘I/O瓶颈)。Oracle数据库的性能与Ubuntu系统的CPU、内存、磁盘I/O密切相关,可通过以下命令监控:
top -u oracle过滤出Oracle相关进程;vmstat 1 5(每1秒采样1次,共5次)可查看内存使用、进程阻塞、I/O等待等情况;iostat -x 1可查看磁盘的读写速率、I/O等待时间(%util接近100%表示磁盘繁忙);free -h可直观显示内存总量、已用内存、剩余内存及缓存。OEM是Oracle官方提供的全面监控工具,支持图形化界面、实时性能监控、告警配置及历史数据查询。
http://<server-ip>:7802/em),使用DBA账号登录;适用于需要自定义监控及长期存储的场景,通过oracledb_exporter采集Oracle性能指标,Prometheus拉取数据,Grafana展示可视化面板。
oracledb_exporter源码并编译(go build);config.yml配置Oracle连接信息(用户名、密码、服务名);oracledb_exporter(./oracledb_exporter -config.file=config.yml);oracledb_exporter的端口(默认9161);Oracle Database Monitoring模板),即可查看CPU、内存、SQL执行等可视化图表。企业级开源监控工具,支持Oracle数据库监控模块,可实现表空间、缓存命中率、死锁等指标的监控与告警。
orabbix_export_full.xml);UserParameter=oracle.tablespace.usage[*],sqlplus -s /nolog <<EOF CONNECT username/password@service; SELECT (total_space - used_space)/total_space*100 FROM dba_tablespace_usage_metrics WHERE tablespace_name='$1'; EOF);$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<instance_name>.log,可通过tail -f实时查看或grep过滤关键错误;$ORACLE_HOME/network/log/listener.log,用于排查连接失败问题。AWR(Automatic Workload Repository)是Oracle自带的性能分析工具,可生成数据库性能基线报告,用于对比分析性能变化。
@?/rdbms/admin/awrrpt.sql(SQL*Plus中),选择两个时间点(如当前时间与1小时前),生成HTML格式的报告;可将常用监控命令封装成Shell/Python脚本,通过cron定时执行,实现自动采集数据与告警。
#!/bin/bash
# 监控Oracle实例状态
INSTANCE_STATUS=$(sqlplus -s /nolog <<EOF
CONNECT sys/password@service AS SYSDBA;
SELECT status FROM v\$instance;
EXIT;
EOF
)
if [ "$INSTANCE_STATUS" != "OPEN" ]; then
echo "[$(date)] Oracle instance is not running!" | mail -s "Oracle Alert" admin@example.com
fi
# 监控表空间使用率
TABLESPACE_USAGE=$(sqlplus -s /nolog <<EOF
CONNECT sys/password@service AS SYSDBA;
SELECT tablespace_name, ROUND((total_space - used_space)/total_space*100, 2) AS usage_percent
FROM dba_tablespace_usage_metrics;
EXIT;
EOF
)
echo "Tablespace Usage:\n$tableSPACE_USAGE" >> /var/log/oracle_monitor.log
crontab -e添加任务(如每5分钟执行一次):*/5 * * * * /path/to/script.sh。