oracle下执行alter index .. shrink space cascade错误分析(一)

在执行表收缩操作时遇到ORA-600错误,通过创建表、插入和删除大量数据并尝试收缩表空间来复现问题。最终发现错误可能与表空间类型有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


     提供给客户的代码中执行了alter table .. shrink space cascade的语句,这句在执行的时候会顺便收缩索引,也即执行alter index .. shrink space cascade。


    在执行这个的时候报错,ora-600错误。


    手动执行验证了一把,分别在客户端和代码中执行alter table .. shrink space cascade,查看是否报错。


    验证过程如下:


  1.首先创建一张表:


   create table hr.ext237(c1 varchar2(255)) -- 开始测试的时候放在system表空间中,执行出错。因为system表空间不是本地自动扩展管理策略,不能实现收缩。


   2.执行如下语句插入数据:


   begin
     for i in 1 .. 200000 loop
       insert into hr.ext237 values ('test' || i);
     end loop;
   end;


   3.统计表使用的块数:


  analyze table hr.ext237 compute statistics 


  4.使用如下两句查询表ext237所分配的总块数 、使用的块数、空余的块数。

  select segment_name,extents,blocks,initial_extent/1024/1024 init from dba_segments where segment_name='EXT237';


   select table_name,blocks,empty_blocks from dba_tables where table_name='EXT237'


   5.删除数据:


   delete from hr.ext237 where rownum <=130000

    

  6.重新执行3到4步,查看块的使用情况。


  7.分别在客户端和代码中执行:


  alter table hr.ext237 enable row movement

   alter table hr.ext237 shrink space cascade


   均没有错误。(绕了很大一圈)


  8.再重新执行3到4步,查看块的使用情况,效果出来了。不过错误没有重现,问题应该不是出在代码上,继续分析



    

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值