我们发现了一张表的高水位线(hwm)比较大,想尝试使用shrink table(表空间收缩)来优化。

shrink操作需要启用行迁移功能。可以通过执行alter table TTRD_OTC_INSTRUMENT_EVAL enable row movement;来实现。然而,此操作会导致引用该表的对象(如存储过程、包、视图等)变为无效。需要运行utlrp.sql来重新编译这些无效的对象。
但是在我尝试运行时,遇到了错误:ORA-10631 : SHRINK clause should not be specified for this object。
原来是因为表上建立了函数索引。
于是我先删除了这两个索引:
drop index IDX_OTC_INSTRUMENT_EVAL_DATE; drop index IDX_TTRD_OTC_INSTRUMENT_EVAL;
然后开始收缩表:
ALTER TABLE TTRD_OTC_INSTRUMENT_EVAL SHRINK SPACE CASCADE; ALTER INDEX PK_TTRD_OTC_INSTRUMENT_EVAL SHRINK SPACE ;
接着手动收集统计信息:
begin dbms_stats.gather_table_stats(ownname => 'XIR_TRD', tabname => 'TTRD_OTC_INSTRUMENT_EVAL'); end;
结果没有成功,真是让人哭笑不得。下次再研究吧。
本文除注明转载/出处的内容外,均为原创。转载请务必署名并注明出处。最后编辑时间:2021/05/17 17:10:54










