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;