re_index2.sql

set serveroutput on size 1000000
set line 1024 feed off trimspool on echo off
spool index_rebuild_run.sql

begin
  for c1 in (
      select i.owner, i.index_name, s.tablespace_name,
             i.initial_extent, i.next_extent, i.min_extents,
i.max_extents,
             i.pct_increase, s.bytes
        from sys.dba_segments s, sys.dba_indexes i
       where s.segment_type = 'INDEX'
         and i.index_name   = s.segment_name
         and i.owner not in
('SYSTEM','SYS','DBVISION','MONITOR','TUNING') )
  loop

    if c1.tablespace_name not like '%INDX%' then  -- Make sure we use
the INDEX tablespace
       c1.tablespace_name := 'INDX';
    end if;
    if c1.pct_increase not in (0, 100) then       -- Set PCTINCREASE to
0
       c1.pct_increase := 0;
    end if;
    if c1.bytes/1024/1024 > 200 then              -- Largest extent will
be 200K
       c1.bytes := 200*1024*1024;
    end if;
    if c1.max_extents < 121 then                  -- Set MAXEXTENTS=121
if smaller than 121
       c1.max_extents := 121;
    end if;

    dbms_output.put_line('ALTER INDEX '||c1.owner||'.'||c1.index_name||
      ' REBUILD TABLESPACE '||c1.tablespace_name||' STORAGE ('||
      ' INITIAL '||to_char(c1.bytes)||
      ' NEXT '||to_char(c1.bytes)||
      ' PCTINCREASE '||c1.pct_increase||' MAXEXTENTS
'||c1.max_extents||');');
    dbms_output.put_line('ALTER TABLESPACE INDX COALESCE;');
  end loop;
end;
/

spool off

-- Run the generated script
set echo on time on timing on feed on
spool index_rebuild
@@index_rebuild_run
spool off

! rm index_rebuild_run.sql

exit