必须通过EM Database Control配置表空间告警,路径为Database Home→Administration→Tablespaces→选中表空间→Edit→Thresholds;需确保statistics_level=TYPICAL/ALL、EM Agent正常运行且非TEMP/UNDO表空间,阈值生效依赖DBA_HIST_TBSPC_SPACE_USAGE每小时采样。
oracle 表空间剩余空间预警必须通过 enterprise manager(em)配置阈值,不能仅靠查询 dba_tablespaces 或 dba_free_space 手动轮询——那只是快照,不是预警。
如何在 EM Database Control 中为表空间设置空间使用率告警
EM Database Control(10g/11g 默认 Web 控制台)支持对单个表空间直接配置百分比阈值。关键路径是:Database Home → Administration → Tablespaces → 选中目标表空间 → Edit → Thresholds。
- 必须先创建表空间(如
TBSALERT),再进入其编辑页,否则Thresholds选项不可见 - 只有启用了自动数据库诊断监视器(ADDM)和统计信息收集的数据库,空间阈值才会被实际触发
- Warning% 和 Critical% 建议设为 60 和 68 —— 这两个值避开 Oracle 默认的 85% 全局阈值,给 DBA 留出干预窗口
- 阈值修改后需点击
Apply,系统会立即校验并生成确认消息,但不会自动刷新监控图表,需手动点Refresh
为什么用 EM 而不是直接改 DBA_THRESHOLDS 视图
DBA_THRESHOLDS 是只读视图,它反映的是 EM 写入 Repository 的配置结果,不是配置入口。所有空间类阈值(包括 Space Used (%)、Tablespace Full)都由 EM 后台服务 oraagent 定期调用 DBMS_SERVER_ALERT 包检查,频率默认为每 5 分钟一次。
- 手动插入或更新
DBA_THRESHOLDS不生效,会被 EM 下次同步覆盖 - EM 的阈值最终落地到
SYSMAN.MGMT_METRICS_RAW表中,属于 Repository 数据库内部机制,不应直连修改 - 如果 EM Agent 停止或 Repository 不可用,阈值告警将完全失效,此时查
DBA_OUTSTANDING_ALERTS会为空
常见告警不触发的三个真实原因
即使阈值已设好,也常因底层依赖缺失导致无通知。最典型的三类问题:
-
DBMS_SERVER_ALERT包未启用:执行SELECT value FROM v$parameter WHERE name = 'statistics_level',若返回BASIC,则必须改为TYPICAL或ALL - 邮件通知未配置:EM 的告警默认只写入
DBA_OUTSTANDING_ALERTS,要发邮件必须在 EM 设置 → Notification Methods 中配 SMTP,并关联到对应规则 - 表空间类型不支持:临时表空间(
TEMPORARY)和撤销表空间(UNDO)无法设置空间使用率阈值,EM 编辑页中Thresholds按钮会灰显
真正容易被忽略的是阈值生效前提:它依赖于 DBA_HIST_TBSPC_SPACE_USAGE 历史视图的数据积累,而该视图每小时才采样一次。刚建完表空间就立刻塞满数据,前 60 分钟内可能收不到告警——这不是配置失败,而是监控延迟固有特性。











