Oracle 监控告警配置

Oracle 监控告警配置

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Oracle 提供多种监控告警机制[1]:

  • Server-Generated Alerts
  • Threshold Alerts
  • Event Alerts
  • OEM 告警

2. Server-Generated Alerts

2.1 概述

  • MMON 进程监控
  • AWR 基线
  • 阈值告警

2.2 查看告警

SELECT 
  reason,
  metric_value,
  alert_type,
  status,
  creation_time
FROM dba_alert_history
ORDER BY creation_time DESC;

2.3 当前告警

SELECT 
  reason, 
  metric_value, 
  message_level
FROM dba_outstanding_alerts;

3. 阈值配置

3.1 表空间使用

BEGIN
  DBMS_SERVER_ALERT.SET_THRESHOLD(
    metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL,
    warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
    warning_value => 80,
    critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
    critical_value => 95,
    observation_period => 1,
    consecutive_occurrences => 1,
    instance_name => NULL,
    object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,
    object_name => 'USERS'
  );
END;
/

3.2 其他指标

指标说明
TABLESPACE_PCT_FULL表空间使用率
SESSIONS_PCT会话数
CPU_USAGE_PCTCPU 使用
BLOCks_PER_SECOND块/秒
RESPONSE_TIME_PER_TXN事务响应时间

3.3 查看阈值

SELECT 
  metrics_name,
  warning_value,
  critical_value,
  status
FROM dba_thresholds;

4. 告警队列

4.1 订阅

-- 告警队列
SELECT * FROM dba_queues WHERE queue_name LIKE '%ALERT%';

4.2 查看

SELECT * FROM alert_que;

5. 常用监控指标

5.1 资源

-- CPU
SELECT metric_name, value FROM v$sysmetric 
WHERE metric_name LIKE '%CPU%'
ORDER BY begin_time DESC;

-- 内存
SELECT metric_name, value FROM v$sysmetric 
WHERE metric_name LIKE '%Memory%'
ORDER BY begin_time DESC;

5.2 性能

-- 响应时间
SELECT metric_name, value FROM v$sysmetric 
WHERE metric_name IN ('Response Time Per Txn', 'SQL Service Response Time')
ORDER BY begin_time DESC;

-- I/O
SELECT metric_name, value FROM v$sysmetric 
WHERE metric_name LIKE '%I/O%'
ORDER BY begin_time DESC;

5.3 容量

-- 表空间
SELECT 
  tablespace_name,
  ROUND(used / total * 100, 2) AS pct_used
FROM (
  SELECT 
    df.tablespace_name,
    SUM(df.bytes) AS total,
    SUM(df.bytes - fs.bytes) AS used
  FROM dba_data_files df, dba_free_space fs
  WHERE df.file_id = fs.file_id(+)
  GROUP BY df.tablespace_name
);

6. 自定义监控

6.1 自定义脚本

-- 表空间监控
CREATE OR REPLACE PROCEDURE check_tablespace AS
  v_pct NUMBER;
BEGIN
  FOR t IN (
    SELECT 
      df.tablespace_name,
      ROUND(SUM(df.bytes - fs.bytes) / SUM(df.bytes) * 100, 2) AS pct
    FROM dba_data_files df, dba_free_space fs
    WHERE df.file_id = fs.file_id(+)
    GROUP BY df.tablespace_name
  ) LOOP
    IF t.pct > 80 THEN
      INSERT INTO alert_log (alert_type, message, alert_time)
      VALUES ('TABLESPACE', 'Tablespace ' || t.tablespace_name || ' at ' || t.pct || '%', SYSDATE);
    END IF;
  END LOOP;
  COMMIT;
END;
/

6.2 调度

BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name => 'check_ts',
    job_type => 'STORED_PROCEDURE',
    job_action => 'check_tablespace',
    start_date => SYSTIMESTAMP,
    repeat_interval => 'FREQ=HOURLY; INTERVAL=1',
    enabled => TRUE
  );
END;
/

7. 邮件告警

7.1 配置 UTL_MAIL

@?/rdbms/admin/utlmail.sql

ALTER SYSTEM SET smtp_out_server = 'smtp.example.com:25' SCOPE=BOTH;

7.2 发送告警

CREATE OR REPLACE PROCEDURE send_alert(p_msg VARCHAR2) AS
BEGIN
  UTL_MAIL.SEND(
    sender => 'oracle@example.com',
    recipients => 'dba@example.com',
    subject => 'Oracle Alert',
    message => p_msg
  );
END;
/

8. OEM Cloud Control

8.1 告警规则

  • 表空间使用
  • 备份失败
  • 性能下降
  • 慢 SQL
  • 锁等待

8.2 通知方式

  • 邮件
  • 短信
  • SNMP
  • HTTP

9. 监控指标建议

9.1 关键指标

指标警告严重
表空间80%95%
FRA80%95%
CPU70%90%
会话80%95%
锁等待60s300s
备份失败-立即

9.2 性能基线

  • AAS
  • 平均响应时间
  • Top SQL 响应

10. 常见坑与排错

10.1 告警不触发

-- 1. 检查阈值
SELECT * FROM dba_thresholds;

-- 2. 检查 MMON
SELECT * FROM v$system_event WHERE event LIKE '%mmon%';

10.2 告警过多

-- 1. 调整阈值
-- 2. 调整 observation_period
-- 3. consecutive_occurrences

10.3 邮件失败

-- 1. 检查 SMTP
-- 2. 测试
EXEC UTL_MAIL.SEND(...);

11. 最佳实践

  1. 关键指标阈值:自动化
  2. 表空间 80/95:常规
  3. 邮件告警:及时
  4. 调度检查:定期
  5. OEM 集中:多库
  6. 历史告警:分析
  7. 避免告警风暴:调优
  8. 响应流程:明确
  9. 定期复审:调整
  10. 文档化:维护

12. 参考资料

[1] Oracle Database Administrator’s Guide 19c, “Monitoring” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/monitoring-database-operations.html