You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19c FRA使用率过高触发邮件通知的实现问题求助

Oracle 19c标准版FRA使用率告警邮件通知实现方案

下面提供两种可直接落地的实现方式,均适配标准版功能限制,无需额外付费选件:

方案1:最小改动适配原有逻辑

你原有方案不生效的核心原因是存储过程的异常没有正确传递到DBMS_SCHEDULER层面,调度器默认仅当接收到RAISE_APPLICATION_ERROR抛出的-20000~-20999区间的未捕获自定义错误时,才会判定作业运行失败。

修正步骤:

  1. 调整存储过程逻辑,不要在最外层捕获阈值超限的自定义异常,直接向外抛出:
CREATE OR REPLACE PROCEDURE check_fra_usage(p_threshold NUMBER DEFAULT 80) AS
  v_used_percent NUMBER;
BEGIN
  -- 取FRA总使用率
  SELECT ROUND(USED_PERCENT,2) INTO v_used_percent 
  FROM V$FLASH_RECOVERY_AREA_USAGE 
  WHERE FILE_TYPE = 'TOTAL';

  IF v_used_percent >= p_threshold THEN
    -- 抛出标准自定义错误,无外层捕获直接传递给调度器
    RAISE_APPLICATION_ERROR(-20001, 'FRA超限:当前'||v_used_percent||'%,阈值'||p_threshold||'%');
  END IF;
END;
/
  1. 创建调度作业时job_type指定为STORED_PROCEDURE,不要将存储过程套在匿名PL/SQL块中调用,避免异常被吞。
  2. 配置DBMS_SCHEDULER.add_job_email_notification触发条件为job_failed即可正常触发告警邮件。

方案2:更稳定的直接发邮件方案(推荐)

无需依赖作业失败状态触发,直接在存储过程中判断阈值后调用UTL_MAIL发邮件,逻辑更直观,故障率更低。

前置配置:

  • 授予作业执行用户UTL_MAIL权限:GRANT EXECUTE ON UTL_MAIL TO <作业执行用户名>;
  • 配置数据库SMTP参数:ALTER SYSTEM SET smtp_out_server = '<SMTP服务器地址:端口>' SCOPE=BOTH;

存储过程示例:

CREATE OR REPLACE PROCEDURE check_fra_send_alert(
  p_threshold NUMBER DEFAULT 80,
  p_receiver VARCHAR2 -- 告警接收人邮箱,多个用逗号分隔
) AS
  v_used_percent NUMBER;
  v_subject VARCHAR2(200);
  v_content VARCHAR2(1000);
BEGIN
  SELECT ROUND(USED_PERCENT,2) INTO v_used_percent 
  FROM V$FLASH_RECOVERY_AREA_USAGE 
  WHERE FILE_TYPE = 'TOTAL';

  IF v_used_percent >= p_threshold THEN
    v_subject := '【告警】Oracle FRA使用率超出阈值';
    v_content := '实例名:'||SYS_CONTEXT('USERENV','INSTANCE_NAME')||CHR(10)||
                 '当前使用率:'||v_used_percent||'%'||CHR(10)||
                 '配置阈值:'||p_threshold||'%'||CHR(10)||
                 '请及时清理归档/备份文件或扩容FRA空间。';
    -- 直接发送告警邮件
    UTL_MAIL.SEND(
      sender => '<发件人邮箱地址>',
      recipients => p_receiver,
      subject => v_subject,
      message => v_content
    );
  END IF;
END;
/

调度配置:

创建DBMS_SCHEDULER定时作业直接调用上述存储过程即可,支持自定义检测频率(推荐每小时检测一次,比每日检测时效性更高),无需额外配置作业失败通知规则。

补充注意点

  • 若SMTP服务器需要SSL/TLS加密,可替换UTL_MAIL为UTL_SMTP自定义发信逻辑适配加密要求
  • 可在存储过程中增加告警去重逻辑,比如同一阈值的告警24小时内仅发送一次,避免短时间内重复发信骚扰
  • 所有用到的功能均为Oracle 19c标准版原生支持,无需额外购买企业版选件

内容的提问来源于stack exchange,提问作者bluefox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:36:06