27.02.2016 0 min to read

Как пересоздать табличное пространство TEMP

Category : Статьи

Если что-то случилось с табличным пространством, предназначенным для временного хранения информации (TEMP), то его достаточно просто пересоздать. При этом нет никакой необходимости останавливать БД. Если во временном табличном пространстве возникли ошибки, то сама БД их будет попросту игнорировать, а вот операции DML будут приводить к сбоям.

-- создаем новое табличное пространство
CREATE TEMPORARY TABLESPACE TEMP2 TEMPFILE 'ORACLE_BASE/oradata/temp02.dbf' SIZE 200M;

-- задаем созданное табличное пространство как табличное пространство по умолчанию для хранения временных данных
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;

-- проверяем наличие открытых сессий, работающих со старым табличным пространством TEMP
-- если есть, немедленно их завершаем
SELECT USERNAME, SESSION_NUM, SESSION_ADDR FROM V$SORT_USAGE;
-- вместо SESSION_NUM, SESSION_ADDR в следующем запросе необходимо поставить номер сессии и адрес, полученные предыдущим запросом
SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE SERIAL#=SESSION_NUM;
SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE SADDR=SESSION_ADDR;

ALTER SYSTEM KILL 'SID,SERIAL#' IMMEDIATE;

-- удаляем старое табличное пространство
DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;

-- создаем это табличное пространство заново
CREATE TEMPORARY TABLESPACE TEMP TEMPFILE 'ORACLE_BASE/oradata/temp01.dbf' SIZE 200M;

-- назначаем это пространство временным по-умолчанию
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

-- удаляем табличное пространство, созданное вначале
DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;