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

来源:互联网 发布:福州市网络家长学校umu 编辑:程序博客网 时间:2024/06/05 07:04


     提供给客户的代码中执行了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步,查看块的使用情况,效果出来了。不过错误没有重现,问题应该不是出在代码上,继续分析