oracle oem表空间容量监控非实时,依赖5分钟采样与每小时快照;告警失效主因是statistics_level非typical/all、em agent异常、临时/回滚表空间不支持、邮件未配置;阈值需在tablespaces→edit→thresholds中设置,且依赖dba_hist_tbspc_space_usage每小时采样生效。
oracle oem(enterprise manager)里没法靠“实时”监控表空间容量——它的空间告警本质是采样驱动的,最小粒度是 5 分钟一次检查,且依赖历史视图 dba_hist_tbspc_space_usage 每小时快照。所谓“实时”,其实是误读;真要看到当前占用率,得查 dba_tablespace_usage_metrics 或手动算 dba_data_files 和 dba_free_space。
为什么 Space Used (%) 阈值不触发告警
最常见原因是底层支撑没开齐,不是配置本身错了:
-
statistics_level必须是TYPICAL或ALL,查v$parameter返回BASIC就直接失效 -
EM Agent进程挂了或连不上 Repository 数据库,DBA_OUTSTANDING_ALERTS会一直为空 - 目标表空间是
TEMPORARY或UNDO类型,EM 编辑页里Thresholds按钮直接灰显,不能点 - 邮件通知根本没配:EM 默认只写数据库告警表,不发邮件;必须进
Setup → Notification Methods配 SMTP 并绑定规则
在 OEM 中正确设置 Space Used (%) 阈值的路径
路径固定,少一步就找不到入口:
- 先确保表空间已存在(比如
TBSALERT),否则进入Administration → Tablespaces后选中它,Edit里压根没有Thresholds选项卡 - 点击
Thresholds→ 找到Space Used (%)区域 → 点Specify Thresholds -
Warning%建议填60,Critical%填68:避开 Oracle 默认的85%全局硬阈值,留出 DBA 处理窗口 - 点
Apply后看确认消息,但监控图表不会自动刷新,必须手动点页面右上角Refresh
DBA_THRESHOLDS 视图不能直接改
这个视图是只读的,它只是 EM 配置结果的镜像,不是配置源:
- 手动
INSERT INTO DBA_THRESHOLDS或UPDATE不生效,下次 EM 同步就会被覆盖 - 真正生效的配置落在
SYSMAN.MGMT_METRICS_RAW表里,属于 EM Repository 内部机制 - 所有空间类阈值检查,最终都由后台服务
oraagent定期调用DBMS_SERVER_ALERT包执行,频率默认 5 分钟一次
最容易被忽略的是:阈值生效的前提不是“你点完了 Apply”,而是 DBA_HIST_TBSPC_SPACE_USAGE 有最新采样数据——它每小时才刷一次,所以即使你刚设完阈值,也要等至少一小时后第一次采样入库,告警逻辑才可能跑起来。











