Ошибка ORA-01652: unable to extend temp segment — решение в СУБД Oracle
- Сложные аналитические отчеты, запросы с
DISTINCT,GROUP BY,ORDER BYили создание индексов падают с кодомORA-01652: unable to extend temp segment by ... in tablespace TEMP. - Временное табличное пространство TEMP заполнено на 100%.
- Запросы выполняют прямой сброс промежуточных данных на диск (Direct Path Read/Write Temp).
1. Мониторинг текущего использования временного пространства
SELECT s.sid, s.serial#, s.username, s.program, u.tablespace,
u.blocks * dt.block_size / 1024 / 1024 AS mb_used, q.sql_text
FROM v$sort_usage u
JOIN v$session s ON u.session_addr = s.saddr
JOIN dba_tablespaces dt ON u.tablespace = dt.tablespace_name
LEFT JOIN v$sql q ON s.sql_id = q.sql_id
ORDER BY mb_used DESC;2. Добавление файла данных во временное табличное пространство
ALTER TABLESPACE temp ADD TEMPFILE '/u01/app/oracle/oradata/DB1/temp02.dbf'
SIZE 4G AUTOEXTEND ON NEXT 1G MAXSIZE 32G;3. Включение авторасширения существующего темпфайла
ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/DB1/temp01.dbf'
AUTOEXTEND ON NEXT 512M MAXSIZE UNLIMITED;4. Тюнинг PGA для снижения дисковой сортировки
Если памяти PGA недостаточно, сортировки сбрасываются в TEMP. Увеличьте PGA:
ALTER SYSTEM SET pga_aggregate_target = 8G SCOPE=BOTH;
ALTER SYSTEM SET pga_aggregate_limit = 16G SCOPE=BOTH; Частые вопросы (FAQ)
Почему ORA-01652 может указывать на постоянное табличное пространство, а не TEMP?
При перестроении индексов (ALTER INDEX REBUILD) или создании таблиц (CTAS) временные сегменты изначально создаются в целевом пользовательском табличном пространстве, и только после успешного завершения транзакции преобразуются в постоянные.
Освобождается ли место в TEMP после завершения сессии?
Oracle не уменьшает физический размер tempfile на диске. Сегменты помечаются как свободные внутри структуры пространства (v$sort_segment) и переиспользуются следующими сессиями.
Как уменьшить раздутый файл TEMP (Shrink)?
Выполните команду: ALTER TABLESPACE temp SHRINK SPACE KEEP 4G; либо пересоздайте временное табличное пространство через ALTER DATABASE DEFAULT TEMPORARY TABLESPACE.
Как 1С использует временные таблицы и TEMP в Oracle?
1С активно использует реальные временные таблицы (TT*), которые при интенсивной вставке и сортировке сотен тысяч строк могут полностью занять TEMP-пространство при неоптимальных запросах конфигурации.