发现有一张表的高水位线(HWM)挺大,想试下shrink table(表空间收缩)
shrink必须开启行迁移功能。alter table TTRD_OTC_INSTRUMENT_EVAL enable row movement;
该语句会造成引用表table_name的对象(如存储过程、包、视图等)变为无效。 需要执行utlrp.sql来编译无效的对象。
语法: alter table table_name shrink space [ | compact | cascade] ; alter table table_name shrink space compact ; 收缩表, 相当于把块中数据打结实了, 但会保持high water mark 。 alter table table_name shrink space ; 收缩表, 降低high water mark 。 alter table table_name shrink space cascade ; 收缩表, 降低high water mark, 并把相关索引也要收缩一下。 alter index idx_name shrink space ; 回缩索引。
但是我这边运行报错:ORA-10631 : SHRINK clause should not be specified for this object
原来是表上建有函数索引
Shrink operations can be performed only on segments in locally managed tablespaces with automatic segment space management (ASSM). Within an ASSM tablespace, all segment types are eligible for online segment shrink except these: ■ IOT mapping tables ■ Tables with rowid based materialized views ■ Tables with function-based indexes ■ SECUREFILE LOBs ■ Compressed tables
我这边先删了这两个索引
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