Иногда требуется, если сразу не рассчитали потребности. Увеличить не проблема. Уменьшить только через создание нового табличного пространства отмены и отключения прежнего.
Отключение прежнего возможно только если нет сессий, использующих его. Если такие сессии есть, то нужно или дождаться технологического окна для обслуживания и отключить клиентов, либо завершить их:
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;