Oracle DB, изменение размера UNDOTABLESPACE

Иногда требуется, если сразу не рассчитали потребности. Увеличить не проблема. Уменьшить только через создание нового табличного пространства отмены и отключения прежнего.

Отключение прежнего возможно только если нет сессий, использующих его. Если такие сессии есть, то нужно или дождаться технологического окна для обслуживания и отключить клиентов, либо завершить их:

ALTER SYSTEM KILL SESSION 'SESSION_ID'

Выяснить номера сессий запросом

SELECT *
FROM V$SESSION
WHERE SADDR IN (SELECT T.SES_ADDR
FROM V$TRANSACTION T, DBA_ROLLBACK_SEGS RBS
WHERE T.XIDUSN = RBS.SEGMENT_ID AND RBS.TABLESPACE_NAME IN ('UNDO_OLD'));

Выяснить какие табличные пространства отмены сейчас есть, файлы данных и размер:

SELECT TABLESPACE_NAME T_NAME,FILE_NAME, BYTES/1024/1024 MB 
  FROM DBA_DATA_FILES 
 WHERE TABLESPACE_NAME = 
                        (SELECT UPPER(VALUE) 
                           FROM V$PARAMETER 
                          WHERE NAME = 'undo_tablespace') 
                          ORDER BY FILE_NAME;

Затем

-- создать табличное пространство отмены
CREATE UNDO TABLESPACE UNDOTBS02 DATAFILE
'/opt/oracle/oradata/EDUPDBS/ACADEMY02/UNDOTBS02.dbf' 
SIZE 5000M;
-- применить новое табличное пространство отмены 
ALTER SYSTEM SET 
UNDO_TABLESPACE = UNDOTBS02 
SCOPE=BOTH;
-- удалить старое табличное пространство отмены
DROP TABLESPACE UNDOTBS1 
INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;

Если не удаляется, необходимо убедиться, что старое табличное пространство отмены уже не используется, после появления статуса OFFLINE оно удалится

SELECT TABLESPACE_NAME, STATUS, COUNT(*) FROM DBA_ROLLBACK_SEGS GROUP BY TABLESPACE_NAME, STATUS;

Close Menu