如何使用段指导_Segment Advisor生成自动空间收缩建议
Segment Advisor未返回收缩建议是因为仅对满足条件的段(如启用ROW MOVEMENT、本地管理表空间、AUTO段空间管理、大小≥10MB等)且HWM下存在显著空闲空间时才生成SEGMENT_SHRINK建议。Segment Advisor 为什么没返回收缩建议segment advisor 默认只对满足特定条件的段(segment)生成自动收缩建议,不是所有表或索引都会触发。它不会主动建议 shrink,除非检测到显著的高水位线(hwm)以下空闲空间,且该段支持在线收缩(即启用了 row movement,且不是 iot、簇表、物化视图日志等受限对象)。常见错误现象:DBMS_SPACE.ASA_RECOMMENDATIONS 返回空结果,或 DBA_ADVISOR_FINDINGS 中无类型为 SEGMENT_SHRINK 的记录。确认段所在表空间是本地管理(EXTENT MANAGEMENT LOCAL),且段空间管理为 AUTO(非 MANUAL)检查是否已启用行移动:SELECT row_movement FROM dba_tables WHERE table_name = 'YOUR_TABLE'; — 必须为 ENABLED避免对含 LONG、LOB(未启用 ENABLE STORAGE IN ROW)、函数索引、域索引运行 Advisor确保段大小超过默认阈值(通常 ≥ 10MB),否则 Advisor 可能跳过评估如何手动触发 Segment Advisor 并获取 shrink 建议依赖 DBMS_ADVISOR 包执行,不能靠 OEM 界面“一键生成”就默认得到 shrink 操作语句 — 它只输出建议类型和目标对象,具体 shrink 命令需人工判断后执行。使用场景:日常空间巡检、归档后清理大表、迁移前压缩段体积。先创建任务:DBMS_ADVISOR.CREATE_TASK(指定 ADVISOR_NAME => 'Segment Advisor')设置目标:DBMS_ADVISOR.SET_TASK_PARAMETER 中设 'SCHEMA' => 'SCOTT' 或 'OBJECT_TYPE' => 'TABLE' 和 'OBJECT_NAME' => 'EMP'执行:DBMS_ADVISOR.EXECUTE_TASK,完成后查 DBA_ADVISOR_FINDINGS,过滤 RECOMMENDATION_TYPE = 'SEGMENT_SHRINK'注意:DBA_ADVISOR_RECOMMENDATIONS 中的 MESSAGE 字段会写明“shrink space compact”还是“shrink space”,后者才真正回收空间shrink space compact vs shrink space:别混用Segment Advisor 建议里的 “shrink space” 不等于你直接执行 ALTER TABLE ... SHRINK SPACE 就完事 — 它分两步,且行为差异直接影响业务可用性。性能与兼容性影响:前者不移动 HWM,仅整理块内碎片,秒级完成;后者移动 HWM 并释放空间给表空间,需独占 DML 锁,可能阻塞写操作。 标贝科技 标贝科技-专业AI语音服务的人工智能开放平台
