直接用dbms_server_alert.set_threshold配置即可,需确保statistics_level为typical/all、metrics_id用预定义常量(如tablespace_pct_full)、warning/critical_value为字符串、object_name大写且精确匹配表空间名。
直接用 dbms_server_alert.set_threshold 配置即可,不需要额外安装或改参数,但必须确保数据库已启用服务器端警报(默认开启)。
确认警报功能是否就绪
Oracle 19c 默认启用服务器端警报,但需验证 statistics_level 是 TYPICAL 或 ALL,否则指标不采集:
- 执行
SELECT value FROM v$parameter WHERE name = 'statistics_level';,返回值不能是BASIC - 若为
BASIC,需先执行ALTER SYSTEM SET statistics_level = TYPICAL SCOPE=BOTH; -
v$metricname中必须存在Tablespace Space Usage对应的metrics_id,可用SELECT metric_id, metric_name FROM v$metricname WHERE metric_name LIKE '%Tablespace%';确认
调用 DBMS_SERVER_ALERT.SET_THRESHOLD 设置阈值
关键不是“写对语法”,而是传参时必须匹配 Oracle 内部定义的常量和类型。例如表空间用量指标的 ID 是固定值,不能手写数字:
- 使用
DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL作为metrics_id,不是查出来的任意 ID -
warning_value和critical_value是字符串(如'80'),不是数字80 -
object_name必须是大写、且与dba_tablespaces.tablespace_name完全一致(如'SYSAUX',不是'sysaux') - 示例命令(监控 SYSAUX 表空间):
EXEC DBMS_SERVER_ALERT.SET_THRESHOLD( metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL, warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE, warning_value => '75', critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE, critical_value => '80', observation_period => 1, consecutive_occurrences => 1, instance_name => NULL, object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE, object_name => 'SYSAUX' );
验证告警是否生效
配置后不会立刻触发,需等下一次指标采集周期(默认每分钟一次)。验证方式不是“等它爆”,而是主动查状态:
- 运行
SELECT * FROM dba_outstanding_alerts WHERE object_name = 'SYSAUX';,空结果表示暂无未清除告警 - 运行
SELECT * FROM dba_alert_history WHERE object_name = 'SYSAUX' AND rownum ,看历史是否有记录 - 真正测试时,可临时往表空间里插数据填到 80% 以上,再等 1–2 分钟检查
dba_outstanding_alerts - 注意:
dba_outstanding_alerts中的告警不会自动消失,必须人工处理后调用DBMS_SERVER_ALERT.DELETE_ALERT清除,否则持续占着视图
常见失败原因和绕过点
最常卡在权限和对象名大小写上,而不是逻辑错误:
- 执行用户必须有
EXECUTE权限 onDBMS_SERVER_ALERT,通常只有DBA角色具备 - 如果提示
PLS-00201: identifier 'DBMS_SERVER_ALERT' must be declared,说明权限缺失,不是包不存在 -
object_name填错(比如多空格、小写、带引号)会导致静默失败:命令执行成功,但实际没注册上任何规则 - 该机制只监控「数据文件总容量」的百分比,不区分是否启用了自动扩展(
autoextensible)。即使文件能扩,只要当前已用比例超阈值,仍会告警
真正难的不是设阈值,而是告警触发后没人看——dba_outstanding_alerts 不推通知,得靠外部轮询或搭配 OEM / Zabbix 才算闭环。别只配完就以为万事大吉。











