Оптимизировать табличное пространство SYSTEM

В ТП SYSTEM закончилось место. Но так, как часто удалялись, переименовывались и компилировались пакеты, то подозреваю, что индекс I_SOURCE сильно разросся и дефрагментирован. Обычные методы работы с индексами это ТП не допускает.

Подскажите, как можно сжать или добавить место в ТП SYSTEM?


Ответы (1 шт):

Автор решения: 0xdb

Tабличное пространство (ТП) SYSTEM не может переполнится. В этом ТП в принципе не может быть объектов БД, которые приведут к его переполнению. Здесь могут быть только объекты, которые создаются при установке БД, патчей, доп. модулей и ничего более.


Если под учётными записями SYS или SYSTEM были ошибочно созданы объекты БД, то самое оптимальное решение -- перенести их в другие схемы БД. Например, экспортировать их и импортировать с параметром:

impdp sys/pass REMAP_SCHEMA=sys:target_schema <др. параметры>

Как минимум нужно переместить подобные объекты в другие ТП, для SYSTEM это, как правило, SYSAUX.

Например, под уч.з. SYS создадим беcсмысленную таблицу , которая переполнит ТП:

create table bigtab (id number, name varchar2 (4000));
create index bigtab_idx on bigtab (name);
insert into bigtab 
    select level id, rpad ('A', 4000, 'A') name 
    from dual connect by level <= 10e10;

ORA-01653: unable to extend table SYS.BIGTAB by 1024 in tablespace SYSTEM

Найти такие объекты можно так:

select 
    owner, segment_name, segment_type, tablespace_name, blocks, extents,
    round (bytes/1024/1024) sizemb 
from dba_segments 
where tablespace_name = 'SYSTEM' 
order by sizemb desc
fetch first 5 rows only;

OWNER SEGMENT_NAME     SEGMENT_TYPE       TABLESPACE_NAME      BLOCKS    EXTENTS     SIZEMB
----- ---------------- ------------------ ---------------- ---------- ---------- ----------
SYS   BIGTAB_IDX       INDEX              SYSTEM                57344        127        448
SYS   BIGTAB           TABLE              SYSTEM                37888        108        296

И переместить их в другое ТП:

alter table bigtab move tablespace sysaux;
alter index bigtab_idx rebuild tablespace sysaux;

select         
    owner, segment_name, segment_type, tablespace_name, blocks, extents,
    round (bytes/1024/1024, 2) sizemb 
from dba_segments
where segment_name like 'BIG%';

OWNER SEGMENT_NAME     SEGMENT_TYPE       TABLESPACE_NAME      BLOCKS    EXTENTS     SIZEMB
----- ---------------- ------------------ ---------------- ---------- ---------- ----------
SYS   BIGTAB           TABLE              SYSAUX                    8          1        .06
SYS   BIGTAB_IDX       INDEX              SYSAUX                    8          1        .06
→ Ссылка