有一个图片表,数据量很大,每个月都会定期删除一些过期的数据,因系统必须24小时运行,不能间断,所以不能采用先drop 再重建表的方式,采用以下方式时执行第二步报错:ora-10662 segments has long columns。表中确实有一个Long类型的字段,请问如何处理?或者其它更好的办法?1、--shrink必须开启行迁移功能。
alter table img_file enable row movement ;
2、--保持HWM
alter table img_file shrink space compact;
3、--回缩表与HWM
alter table img_file shrink space;
4、--回缩表与相关索引
alter table img_file shrink space cascade;
5、--回缩索引
alter index img_file_idx01 shrink space;
alter table img_file enable row movement ;
2、--保持HWM
alter table img_file shrink space compact;
3、--回缩表与HWM
alter table img_file shrink space;
4、--回缩表与相关索引
alter table img_file shrink space cascade;
5、--回缩索引
alter index img_file_idx01 shrink space;
是这样直接做的:只有两步
alter table enable row movement;
alter table shrink space;
至于你说的long字段引起的,我不是很清楚shrink space是否会对long类型有要求
alter table img_file shrink space ;
也报同样的错。
Cause: Shrink was issued on a segment with long columns. This is not supported.
Action: Nonehttp://www.oracle86.com/ora_doc/server.111/b28278/e9858.htm
然后truncate 现在的表
在重新插入。可以不?
然后truncate 现在的表,再重新插入也不好操作。
cluster中的表;
有long类型的表;
有on_commit物化视图的表;
有基于rowid物化视图的表;
大对象(LOB)索引。
------------楼主想其它办法吧
应该shrink都会中断访问的对oracle不懂,这是我查的2点:
--数据重组需要在表上加RX锁,对业务影响比较小
--HWM调整,在表上加X锁,表上的所有DML语句阻塞很难理解lz的24小时不间断。据我所知,csdn晚上都有个时间会中断一下服务的。我的想法,能否在操作不频繁的时候,将前台的操作临时指向一个与该表结构一致的临时表呢?或者说写入时写到临时表,读取时从镜像表里去读。等你从容处理完后在把这段时间写入的数据插入到原来的表中。如有说错请见谅。