监控体系与工具选型
数据库层关键SQL与检查
SELECT s.inst_id||':'||s.sid AS inst_sid,
s.username,
(SYSDATE - s.sql_exec_start) DAY TO SECOND AS exec_dur,
s.sql_id,
SUBSTR(q.sql_text,1,60) AS sql_text,
CASE WHEN s.wait_time_micro = 0 THEN
CASE s.wait_class WHEN 'Idle' THEN 'IDLE: '||s.event ELSE s.event END
ELSE 'ON CPU' END AS state,
ROUND(CASE WHEN s.wait_time_micro = 0 THEN s.time_since_last_wait_micro
ELSE s.wait_time_micro END / 1e6, 2) AS wait_sec
FROM gv$session s
LEFT JOIN gv$sql q ON q.sql_id = s.sql_id AND q.inst_id = s.inst_id
WHERE s.status = 'ACTIVE'
AND s.username IS NOT NULL
ORDER BY wait_sec DESC NULLS LAST
FETCH FIRST 20 ROWS ONLY;
SELECT sql_id, sql_text,
ROUND(elapsed_time/1e6, 2) AS elapsed_sec,
executions
FROM v$sql
ORDER BY elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;
SELECT a.tablespace_name,
ROUND(a.bytes/1024/1024, 2) AS total_mb,
ROUND((a.bytes - b.bytes)/1024/1024, 2) AS used_mb,
ROUND((a.bytes - b.bytes)/a.bytes*100, 2) AS used_pct
FROM (SELECT tablespace_name, SUM(bytes) AS bytes
FROM dba_data_files GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) AS bytes
FROM dba_free_space GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
ORDER BY used_pct DESC;
-- 查看快照范围
SELECT snap_id, begin_interval_time, end_interval_time
FROM dba_hist_snapshot ORDER BY snap_id DESC;
-- 生成AWR报告(在SQL*Plus中执行,按提示选择开始/结束快照ID)
@?/rdbms/admin/awrrpt.sql
系统层与监听器的监控
自动化与告警落地
#!/usr/bin/env bash
ORACLE_SID=your_sid
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID ORACLE_HOME PATH
THRESHOLD=80
ALERT_EMAIL=dba@example.com
sqlplus -S / as sysdba <<'EOF'
SET HEADING OFF FEEDBACK OFF
SELECT tablespace_name || ':' || ROUND(used_pct, 1)
FROM (
SELECT a.tablespace_name,
ROUND((a.bytes - b.bytes)/a.bytes*100, 1) AS used_pct
FROM (SELECT tablespace_name, SUM(bytes) AS bytes FROM dba_data_files GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) AS bytes FROM dba_free_space GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
)
WHERE used_pct > $THRESHOLD
/
EXIT
EOF
日常巡检清单与阈值建议