监控规则
Oracle 19c 日常监控指标、检查 SQL、告警条件和第一步处置。
监控范围
监控规则回答四件事:看什么、怎样判断异常、告警后先查什么、何时升级。建议先覆盖以下七类:
| 类别 | 主要指标 | 触发后第一步 |
|---|---|---|
| 可用性 | 实例状态、打开模式、数据库角色、监听和服务 | 确认影响实例/服务范围,检查 alert log 和监听状态 |
| 空间 | 表空间、FRA、归档目的地、文件系统和 inode | 确认剩余空间、增长速度和是否有扩容空间;不要直接删除归档 |
| 性能 | 活跃会话、等待事件、慢 SQL、CPU、磁盘 I/O | 记录时间、SQL_ID、等待事件和主机负载,再比较正常基线 |
| 会话与锁 | sessions/processes 使用量、阻塞会话、长事务 | 找到阻塞链和业务会话,先联系业务确认,不直接 kill |
| Data Guard | 传输延迟、应用延迟、日志缺口、归档目的地状态 | 先看延迟值是否更新,再区分传输中断和应用落后 |
| 备份恢复 | RMAN 作业结果、最近成功时间、归档备份连续性 | 查失败阶段和备份介质状态;必要时安排恢复可用性验证 |
| 连接与作业 | 连接失败、监听服务注册、Scheduler 作业失败 | 区分客户端、网络、监听、数据库服务或作业自身错误 |
示例告警条件
以下数值只作为首次配置的参考,需 DBA 根据业务基线、容量增长和 RPO/RTO 审核。不要把示例值直接当作所有环境的固定标准。
| 指标 | 示例条件 | 告警后的检查 |
|---|---|---|
| 实例/服务状态 | 不符合预期角色或不可连接,立即告警 | 对照维护窗口,确认实例、监听、服务和 alert log |
| 表空间使用率 | 例如 85% 提醒、95% 高级别;同时观察增长速度和可扩展空间 | 查看数据文件 autoextend、最大值及底层存储余量 |
| FRA 使用率 | 例如 80% 提醒、90% 高级别 | 查看可回收空间、归档备份状态和磁盘余量;按保留策略处理 |
| 进程/会话使用率 | 有限配额下持续超过 80% 提醒、90% 高级别 | 查连接来源、连接池和异常会话,确认是否接近参数上限 |
| 阻塞会话 | 超过业务可接受等待时间仍未解除 | 追踪 blocking session、SQL_ID、事务开始时间和业务影响 |
| Data Guard 延迟 | 超过本系统 RPO 或延迟数据停止更新 | 检查网络、归档目的地、日志缺口和备库应用进程 |
| RMAN / Scheduler | 失败,或在计划时间内没有成功记录 | 对照作业计划、日志和存储空间,确认恢复链是否受影响 |
检查 SQL 与命令
以下 SQL 面向 Oracle Database 19c。动态性能视图和 DBA_ 视图需要相应目录读取权限;生产监控账号应由 DBA 按最小权限授权。
可用性
先查询实例状态;实例为 STARTED(NOMOUNT)时可以查询 V$INSTANCE,但尚不能查询 V$DATABASE。数据库已 MOUNT 或 OPEN 后再查询打开模式和主备角色;备库只读打开不应按主库状态误报。
SELECT instance_name, status AS instance_status
FROM v$instance;
-- 仅在数据库已 MOUNT 或 OPEN 时执行。
SELECT name, open_mode, database_role
FROM v$database;INSTANCE_NAME INSTANCE_STATUS
------------- ---------------
orcl OPEN
NAME OPEN_MODE DATABASE_ROLE
---- ---------- -------------
ORCL READ WRITE PRIMARY空间
DBA_TABLESPACE_USAGE_METRICS 给出永久、临时和 UNDO 表空间的使用百分比,分母是最大可用容量;autoextend 的最大空间会受到底层存储余量影响。UNDO 用量包含已过期和未过期的 undo,不能仅凭使用率高判断空间不足。
SELECT tablespace_name,
ROUND(used_percent, 2) AS used_percent
FROM dba_tablespace_usage_metrics
ORDER BY used_percent DESC;TABLESPACE_NAME USED_PERCENT
--------------- ------------
USERS 68.00
SYSAUX 55.00查询 FRA 配额、已用和可回收空间。已用比例高时,先检查归档备份与保留策略,不要直接在操作系统删除归档文件。
SELECT name,
ROUND(space_limit / POWER(1024, 3), 2) AS limit_gb,
ROUND(space_used / POWER(1024, 3), 2) AS used_gb,
ROUND(space_reclaimable / POWER(1024, 3), 2) AS reclaimable_gb,
ROUND(100 * space_used / NULLIF(space_limit, 0), 2) AS used_percent
FROM v$recovery_file_dest;NAME LIMIT_GB USED_GB RECLAIMABLE_GB USED_PERCENT
------------------------------ -------- ------- -------------- ------------
/data_oracle/fast_recovery_area 500.00 210.00 50.00 42.00在数据库服务器检查文件系统空间与 inode;将路径换成数据文件、归档或备份实际所在挂载点:
df -h /u02/oradata
df -i /u02/oradataFilesystem Size Used Avail Use% Mounted on
/dev/sdb1 5.0T 3.1T 1.9T 62% /u02/oradata
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdb1 327680000 9830400 317849600 3% /u02/oradata性能、会话与锁
查看当前活跃用户会话、当前 SQL、等待事件和活跃持续时间。它是当前快照,不代表历史累计情况。
SELECT sid,
serial#,
username,
sql_id,
event,
wait_class,
last_call_et AS active_seconds
FROM v$session
WHERE status = 'ACTIVE'
AND type = 'USER'
ORDER BY last_call_et DESC
FETCH FIRST 20 ROWS ONLY;SID SERIAL# USERNAME SQL_ID EVENT WAIT_CLASS ACTIVE_SECONDS
--- ------- -------- ------------- ----------------------------- ----------- --------------
508 19024 APPUSER 4dfg456uvw789 enq: TX - row lock contention Application 95查看实例保留的 SQL 统计中累计耗时较高的 SQL;V$SQLSTATS 可能在游标移出共享池后继续保留统计。ELAPSED_TIME、CPU_TIME 的单位是微秒;这些值是累计值,并行 SQL 的耗时还会累计查询协调进程和并行进程的时间。对比两次采集的增量比只看单次总量更有意义。
SELECT sql_id,
executions,
ROUND(elapsed_time / 1000000, 1) AS elapsed_seconds,
ROUND(cpu_time / 1000000, 1) AS cpu_seconds,
buffer_gets,
disk_reads,
SUBSTR(sql_text, 1, 100) AS sql_text
FROM v$sqlstats
WHERE executions > 0
ORDER BY elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;SQL_ID EXECUTIONS ELAPSED_SECONDS CPU_SECONDS BUFFER_GETS DISK_READS SQL_TEXT
------------- ---------- --------------- ----------- ----------- ---------- -------------------------
4dfg456uvw789 30 123.0 22.5 102400 2500 SELECT * FROM orders查看 processes 和 sessions 当前用量、实例启动以来的峰值及限制值。LIMIT_VALUE 为 UNLIMITED 时不能按比例计算使用率。
SELECT resource_name,
current_utilization,
max_utilization,
limit_value
FROM v$resource_limit
WHERE resource_name IN ('processes', 'sessions');RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION LIMIT_VALUE
------------- ------------------- --------------- -----------
processes 120 180 1000
sessions 150 220 1500查询当前有明确阻塞会话的等待者,按等待时间排序;进一步沿 BLOCKING_SESSION 查阻塞源头和业务 SQL。
SELECT sid,
serial#,
username,
blocking_instance,
blocking_session,
sql_id,
event,
wait_class,
ROUND(wait_time_micro / 1000000, 1) AS wait_seconds
FROM v$session
WHERE blocking_session_status = 'VALID'
AND state = 'WAITING'
ORDER BY wait_time_micro DESC;SID SERIAL# USERNAME BLOCKING_INSTANCE BLOCKING_SESSION SQL_ID EVENT WAIT_CLASS WAIT_SECONDS
--- ------- -------- ----------------- ---------------- ------------- ----------------------------- ----------- ------------
508 19024 APPUSER 1 421 4dfg456uvw789 enq: TX - row lock contention Application 95.0Data Guard
在备库查看传输延迟、应用延迟及数据更新时间。若 DATUM_TIME 长时间不变,延迟数值可能已经过期,需同时检查连接和日志传输状态。
SELECT name,
value,
time_computed,
datum_time
FROM v$dataguard_stats
WHERE name IN ('transport lag', 'apply lag', 'apply finish time');NAME VALUE TIME_COMPUTED DATUM_TIME
------------- ------------- ------------------- -------------------
transport lag +00 00:00:00 2026-10-26 09:00:00 2026-10-26 08:59:59
apply lag +00 00:00:00 2026-10-26 09:00:00 2026-10-26 08:59:59
apply finish time +00 00:00:00 2026-10-26 09:00:00 2026-10-26 08:59:59在物理备库检查当前恢复分支上阻塞 Redo Apply 的归档日志缺口;处理后应再次查询。无返回行只表示当前视图没有报告缺口,不替代传输/应用状态检查。
SELECT thread#,
low_sequence#,
high_sequence#
FROM v$archive_gap;no rows selected备份与作业
查看近 7 天 RMAN 备份作业类型、状态和耗时。重点检查失败、警告及是否按计划完成全量/增量和归档日志备份。
SELECT input_type,
status,
start_time,
end_time,
time_taken_display
FROM v$rman_backup_job_details
WHERE start_time >= SYSDATE - 7
ORDER BY start_time DESC;INPUT_TYPE STATUS START_TIME END_TIME TIME_TAKEN_DISPLAY
---------- --------- ------------------- ------------------- ------------------
DB INCR COMPLETED 2026-10-26 00:15:00 2026-10-26 01:08:00 00:53:00对恢复能力的验证应另行安排。以下 RMAN 命令会读取备份介质,可能产生较高 I/O;先评估影响并在演练或批准窗口执行:
RESTORE DATABASE VALIDATE;Starting restore
allocated channel: ORA_DISK_1
channel ORA_DISK_1: starting validation of datafile backup set
channel ORA_DISK_1: validation complete
Finished restore查看近 24 小时未成功的 Scheduler 作业。先确认作业是否预期运行,再查看 ERROR# 和作业日志;维护窗口内主动停止的作业可能是预期情况。
SELECT owner,
job_name,
status,
actual_start_date,
run_duration,
error#
FROM dba_scheduler_job_run_details
WHERE log_date >= SYSTIMESTAMP - INTERVAL '1' DAY
AND status <> 'SUCCEEDED'
ORDER BY log_date DESC
FETCH FIRST 50 ROWS ONLY;no rows selected监听与错误日志
在数据库服务器检查监听状态和已注册服务。将 LISTENER 换成现场监听名;监听正常不代表客户端网络和数据库登录一定正常。
lsnrctl status LISTENER
lsnrctl services LISTENERLSNRCTL for Linux: Version 19.0.0.0.0
STATUS of the LISTENER
Alias LISTENER
Listening Endpoints Summary...
(ADDRESS=(PROTOCOL=tcp)(HOST=db01)(PORT=1521))
Services Summary...
Service "pdb1" has 1 instance(s).
Instance "orcl", status READY
The command completed successfully在需要检查的容器中查询最近 24 小时 alert log 内包含 Oracle 错误号的记录。该视图显示当前容器(PDB)的 ADR alert log;先按时间和错误号关联故障现象,背景错误和可恢复错误需结合上下文判断。
SELECT originating_timestamp,
message_text
FROM v$diag_alert_ext
WHERE originating_timestamp >= SYSTIMESTAMP - INTERVAL '1' DAY
AND message_text LIKE '%ORA-%'
ORDER BY originating_timestamp DESC
FETCH FIRST 50 ROWS ONLY;ORIGINATING_TIMESTAMP MESSAGE_TEXT
-------------------------------- -------------------------------------
2026-10-26 08:30:00.000 +08:00 ORA-00060: Deadlock detected.采集与处置
- 可用性、连接和 Data Guard:建议较短周期采集;容量按增长速度设定周期,避免告警时已无处理时间。
- 性能与锁:保留采集时间和实例号,比较一段时间的变化;单个瞬时值通常不足以判定故障。
- 备份与作业:按计划结束时间检查是否成功;重要数据库定期做恢复验证。
- 告警后先保存查询结果、时间、实例、SQL_ID、错误号和主机指标,再按故障排查步骤处理;高风险操作先升级 DBA。
- RAC 环境跨实例查询使用相应
GV$视图并记录INST_ID;多租户环境需明确是在 CDB 还是哪个 PDB 采集。 - AWR/ASH 报告仅在授权许可适用时使用;未确认许可前先用实时会话、动态性能视图和现有监控数据排查。