segment advisor建议需主动查询视图或oem查看,最快方式是执行dbms_space.asa_recommendations;权限不足会报ora-00904,reclaimable_space10mb才需深入分析。
segment advisor 的建议结果不会自动弹窗或写入日志文件,必须主动查视图或进 oem 才能看到 —— 直接连上数据库后执行 select 是最快确认有无有效建议的方式。
用 dbms_space.asa_recommendations 查最新建议
这是最轻量、最常用的方法,适合快速筛查哪些段值得收缩。它不依赖任务 ID,只读内部缓存结果:
-
dbms_space.asa_recommendations('FALSE','FALSE','FALSE')返回最近一次自动运行的建议(不含手动任务) - 三个参数分别控制:
all_runs(是否查全部历史)、show_manual(是否包含手动任务)、show_finding(是否只显示问题不显示修复语句) - 常见错误:权限不足报
ORA-00904: "DBMS_SPACE"."ASA_RECOMMENDATIONS": invalid identifier—— 需确保用户有EXECUTE权限 onDBMS_SPACE,且不是普通应用用户(通常需 DBA 或已显式授权) - 返回字段中
RECLAIMABLE_SPACE是关键:小于 1MB 基本不值得 shrink;大于 10MB 才建议跟进
查 dba_advisor_executions + dba_advisor_findings 定位具体任务
当你手动跑过 DBMS_ADVISOR.EXECUTE_TASK,或者想确认某次自动运行是否真产出了建议,就得联查这几个视图:
- 先看
dba_advisor_executions找出task_name和状态:STATUS = 'COMPLETED'才算成功跑完 - 再用该
task_id关联dba_advisor_findings查具体建议文本,重点字段是MESSAGE和MORE_INFO - 注意:自动任务名通常带
auto space advisor前缀;手动任务名是你自己指定的,比如'BIG_TABLE Advice' - 容易踩坑:直接
SELECT *可能返回空 —— 因为dba_advisor_findings只存“有建议”的对象,没发现空间浪费的段根本不会写入此视图
OEM 中查看 Segment Advisor 建议(12c+ 云控控制台)
OEM 不是单纯展示结果的地方,它把建议和操作绑在一起,适合生产环境谨慎执行:
- 路径:Database Home → Advisor Central → Segment Advisor
- 这里能看到「自动运行时间」「最近建议数」「按表空间/所有者分组的可回收空间 TOP 10」
- 点击某条建议后的「Fix It」按钮,会自动生成并预检
ALTER TABLE ... SHRINK SPACE语句,还会检查ENABLE ROW MOVEMENT是否已开 - 限制:OEM 默认只显示过去 7 天的建议;如果没看到预期结果,先确认
DBA_AUTO_SEGADV_SUMMARY里END_TIME是否在近期
真正容易被忽略的是:自动 Segment Advisor 默认只分析「空间压力大」的表空间 —— 即使某个大表碎片严重,只要它所在表空间使用率低于阈值(默认约 85%),就不会被自动扫描。手动触发时也得注意对象是否在 ASSM 表空间里,非 ASSM 下 SHRINK 不可用,顾问只会建议 DBMS_REDEFINITION,那成本就高多了。











