O Oracle DBA 运维知识库

监控规则

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;

空间

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;

查询 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;

在数据库服务器检查文件系统空间与 inode;将路径换成数据文件、归档或备份实际所在挂载点:

df -h /u02/oradata
df -i /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;

查看实例保留的 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;

查看 processes 和 sessions 当前用量、实例启动以来的峰值及限制值。LIMIT_VALUE 为 UNLIMITED 时不能按比例计算使用率。

SELECT resource_name,
       current_utilization,
       max_utilization,
       limit_value
FROM   v$resource_limit
WHERE  resource_name IN ('processes', 'sessions');

查询当前有明确阻塞会话的等待者,按等待时间排序;进一步沿 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;

Data Guard

在备库查看传输延迟、应用延迟及数据更新时间。若 DATUM_TIME 长时间不变,延迟数值可能已经过期,需同时检查连接和日志传输状态。

SELECT name,
       value,
       time_computed,
       datum_time
FROM   v$dataguard_stats
WHERE  name IN ('transport lag', 'apply lag', 'apply finish time');

在物理备库检查当前恢复分支上阻塞 Redo Apply 的归档日志缺口;处理后应再次查询。无返回行只表示当前视图没有报告缺口,不替代传输/应用状态检查。

SELECT thread#,
       low_sequence#,
       high_sequence#
FROM   v$archive_gap;

备份与作业

查看近 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;

对恢复能力的验证应另行安排。以下 RMAN 命令会读取备份介质,可能产生较高 I/O;先评估影响并在演练或批准窗口执行:

RESTORE DATABASE VALIDATE;

查看近 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;

监听与错误日志

在数据库服务器检查监听状态和已注册服务。将 LISTENER 换成现场监听名;监听正常不代表客户端网络和数据库登录一定正常。

lsnrctl status LISTENER
lsnrctl services LISTENER

在需要检查的容器中查询最近 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;

采集与处置

  • 可用性、连接和 Data Guard:建议较短周期采集;容量按增长速度设定周期,避免告警时已无处理时间。
  • 性能与锁:保留采集时间和实例号,比较一段时间的变化;单个瞬时值通常不足以判定故障。
  • 备份与作业:按计划结束时间检查是否成功;重要数据库定期做恢复验证。
  • 告警后先保存查询结果、时间、实例、SQL_ID、错误号和主机指标,再按故障排查步骤处理;高风险操作先升级 DBA。
  • RAC 环境跨实例查询使用相应 GV$ 视图并记录 INST_ID;多租户环境需明确是在 CDB 还是哪个 PDB 采集。
  • AWR/ASH 报告仅在授权许可适用时使用;未确认许可前先用实时会话、动态性能视图和现有监控数据排查。

On this page