SET_THRESHOLD调用无效的三大主因是指标未启用、参数类型错误、表空间类型不支持;需先启用Tablespace Used Space指标,严格按常量/字符串/大小写要求传参,并仅对本地管理的永久表空间生效。
能设,但必须绕过三个隐性关卡:指标没启用、参数类型错、表空间类型不支持——否则 dbms_server_alert.set_threshold 执行成功也等于白调。
为什么 SET_THRESHOLD 调了没反应?先查指标有没有注册
最常见假象:PL/SQL块执行成功,DBA_OUTSTANDING_ALERTS 却始终为空。这不是代码问题,是底层监控指标压根没加载。
- 运行
SELECT object_name, metric_name FROM dba_thresholds WHERE object_type = 'TABLESPACE'—— 如果返回空,说明指标未启用 - 必须先执行:
DBMS_SERVER_ALERT.ENABLE('Tablespace Used Space')(注意大小写和空格,不能写成'tablespace used space'或'TABLESPACE_USED_SPACE') -
STATISTICS_LEVEL必须为TYPICAL或ALL;如果当前是BASIC,改完要重启实例才生效 - 只对本地管理表空间(LMT)有效,
TEMP和UNDO表空间永远不支持,调了也不写入DBA_THRESHOLDS
SET_THRESHOLD 参数怎么填?错一个就失效
参数顺序、类型、大小写全敏感,尤其容易栽在字符串 vs 数字、常量 vs 字符串这两处。
-
metrics_id必须用常量:DBMS_SERVER_ALERT.TABLESPACE_UTILIZATION(不是'TABLESPACE_UTILIZATION') -
warning_value和critical_value是字符串类型,必须加单引号,例如'85',不是85 -
object_name填表空间名,区分大小写(如'USERS'),不能填路径或通配符 -
object_type必须显式指定为DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,不能省略 - 想监控剩余空间(字节)?换用
DBMS_SERVER_ALERT.TABLESPACE_BYT_FREE,此时warning_operator要改成DBMS_SERVER_ALERT.OPERATOR_LE,值填字节数字符串,如'10240'表示 10 MB
告警不发邮件?别怪 SET_THRESHOLD
DBMS_SERVER_ALERT 只负责生成记录,不负责投递。它把结果写进 DBA_OUTSTANDING_ALERTS,后续靠 EM Agent 推送。
-
DBA_OUTSTANDING_ALERTS为空 → 不是邮件配置问题,是前面的指标启用或参数填错 - EM Agent 停了、Repository 数据库连不上、或
oraagent进程异常,都会导致告警“静默” - 邮件必须单独配置:EM → Setup → Notification Methods → 配 SMTP;再在 Preferences → General 里填管理员邮箱;最后在 Notification Rules 里关联规则
- 不要去查
alert.log找表空间告警 —— 它们根本不会写进去
临时表空间怎么预警?DBMS_SERVER_ALERT 不行,得自己搭轮子
DBMS_SERVER_ALERT.SET_THRESHOLD 对 TEMP 表空间完全无效,因为 Oracle 不采集它的百分比使用率指标。
-
v$metricname里查不到Temp Tablespace Space Usage类指标 -
DBA_THRESHOLDS视图中永远看不到object_name = 'TEMP'的记录 - 替代方案:用
v$temp_space_header查询真实使用率,公式是ROUND(100 * used_bytes / (used_bytes + NVL(free_bytes, 0)), 2) - 封装成 PL/SQL 脚本,搭配
UTL_MAIL.SEND或 shell +sqlplus -S发邮件,再用DBMS_SCHEDULER每 5–10 分钟跑一次 - 注意兼容性:
v$temp_space_header仅 Oracle 11gR2+ 支持;10g 只能靠v$sort_usage估算,不准
真正容易被忽略的是:阈值依赖每小时一次的 DBA_HIST_TBSPC_SPACE_USAGE 采样,而这个视图又依赖 AWR 快照和统计收集。哪怕所有配置都对,数据库刚重启且还没跑满一小时,第一次告警也可能延迟出现。


















