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