一、使用Oracle自带工具监控
Oracle提供了多组内置工具,覆盖性能分析、状态检查等核心需求,是监控Oracle数据库的基础手段。
@ORACLE_HOME/rdbms/admin/awrreport.sql生成AWR报告(对比两个快照的性能差异),或执行SELECT * FROM v$active_session_history查看ASH实时数据,可快速定位高负载SQL、等待事件等问题。SELECT * FROM v$sql WHERE elapsed_time > 1000000 ORDER BY elapsed_time DESC;SELECT event, wait_class, COUNT(*) AS wait_count FROM v$session_event GROUP BY event, wait_class ORDER BY wait_count DESC;SELECT a.session_id, a.oracle_username, a.os_user_name, b.object_name, b.object_type FROM v$locked_object a JOIN dba_objects b ON a.object_id = b.object_id;二、利用操作系统工具监控
操作系统层面的监控可辅助识别数据库相关的系统资源瓶颈(如CPU、内存、磁盘I/O)。
top/htop:实时查看进程CPU、内存使用情况,通过%CPU、%MEM排序快速定位占用高的Oracle进程(如ora_pmon、ora_dbw0);htop支持颜色标识和鼠标操作,更直观。vmstat 1:每秒输出系统整体状态,关注r(运行队列长度,>CPU核心数表示CPU瓶颈)、b(阻塞进程数)、wa(I/O等待占比,>5%表示磁盘瓶颈)、free(空闲内存)等指标。iostat -x 1:监控磁盘I/O性能,关注sda(或其他挂载点)的await(平均I/O等待时间,>20ms表示I/O瓶颈)、%util(磁盘利用率,>80%表示繁忙)等指标。free -h:查看内存使用情况,重点关注available(可用内存,包括缓存可释放的部分),若available内存不足,可能需要调整Oracle的SGA/PGA参数。df -h:检查磁盘空间使用率,避免表空间或日志文件占满导致数据库无法写入。sysstat包的sar工具采集历史性能数据(默认保存在/var/log/sa/目录),如sar -u 1 5查看CPU历史使用率,sar -r -f /var/log/sa/sa20查看某天内存使用历史,sar -n DEV查看网络流量历史,用于分析长期性能趋势。三、第三方监控工具
第三方工具可实现更全面的可视化、告警与集中管理,适合大规模环境。
oracle_db_status、oracle_tablespace_usage)和触发器(如表空间使用率>85%时告警),支持Web界面查看仪表盘和告警信息,适合企业级分布式监控。oracledb_exporter采集Oracle数据库指标(如SQL响应时间、等待事件、缓冲区命中率),暴露为Prometheus可抓取的接口;scrape_configs),定期拉取Oracle指标;nrpe插件(运行在Oracle服务器上),配置check_oracle脚本(如check_oracle_db检查数据库连通性、check_oracle_tablespace检查表空间使用率),在Nagios服务器上配置服务监控(如define service { use generic-service host_name oracle service_description DB Check check_command check_nrpe![check_oracle_db]; }),支持邮件、短信告警,适合传统运维场景。四、监控脚本与自动化
通过Shell、Python等脚本实现定制化监控,可定期执行并发送告警。
#!/bin/bash
cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}')
mem=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2}')
disk=$(df -h / | awk 'NR==2{print $5}')
echo "CPU使用率: $cpu, 内存使用率: $mem, 磁盘使用率: $disk" | mail -s "Oracle Server Status" admin@example.com
该脚本可定时(如每5分钟)通过crontab -e添加任务(*/5 * * * * /path/to/script.sh),当指标超过阈值时发送邮件告警。