Оптимизировать табличное пространство SYSTEM
В ТП SYSTEM закончилось место. Но так, как часто удалялись, переименовывались и компилировались пакеты, то подозреваю, что индекс I_SOURCE сильно разросся и дефрагментирован. Обычные методы работы с индексами это ТП не допускает.
Подскажите, как можно сжать или добавить место в ТП SYSTEM?
Ответы (1 шт):
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