我们发现了一张表的高水位线(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
以上就是记一次失败的shrink table(表空间收缩)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号