ORA-01652 Невозможно расширить временный сегмент в табличном пространстве

Я создаю таблицу как

create table tablename
as
select * for table2

Я получаю сообщение об ошибке

ORA-01652 Unable to extend temp segment by in tablespace

Когда я гуглил, я обычно обнаруживал ошибку ORA-01652, показывающую какое-то значение, например

Unable to extend temp segment by 32 in tablespace

Я не получаю такого значения. Я выполнил этот запрос.

select 
   fs.tablespace_name                          "Tablespace", 
   (df.totalspace - fs.freespace)              "Used MB", 
   fs.freespace                                "Free MB", 
   df.totalspace                               "Total MB", 
   round(100 * (fs.freespace / df.totalspace)) "Pct. Free" 
from 
   (select 
      tablespace_name, 
      round(sum(bytes) / 1048576) TotalSpace 
   from 
      dba_data_files 
   group by 
      tablespace_name 
   ) df, 
   (select 
      tablespace_name, 
      round(sum(bytes) / 1048576) FreeSpace 
   from 
      dba_free_space 
   group by 
      tablespace_name 
   ) fs 
where 
   df.tablespace_name = fs.tablespace_name; 

Взято из: Узнать свободное место в табличном пространстве

и я обнаружил, что в табличном пространстве, которое я использую, в настоящее время имеется около 32 ГБ свободного места. Я даже пробовал создать таблицу вроде

create table tablename tablespace tablespacename
as select * from table2 

но я снова получаю ту же ошибку. Может ли кто-нибудь подсказать мне, в чем проблема и как ее решить. К вашему сведению, оператор select принесет мне 40 000 000 записей.


person Niranjan Sonachalam    schedule 07.08.2012    source источник
comment
у вас файлы данных полны?   -  person Sathyajith Bhat    schedule 07.08.2012


Ответы (4)


Я нашел решение этого. Существует временное табличное пространство под названием TEMP, которое используется внутри базы данных для таких операций, как отдельные, соединения и т. Д. Поскольку мой запрос (который имеет 4 соединения) извлекает почти 50 миллионов записей, в табличном пространстве TEMP не так много места для размещения всех данных. Следовательно, запрос не выполняется, даже если в моем табличном пространстве есть свободное место. Таким образом, после увеличения размера табличного пространства TEMP проблема была решена. Надеюсь, это поможет кому-то с той же проблемой. Спасибо :)

person Niranjan Sonachalam    schedule 07.08.2012
comment
Другой подход, который может помочь, - это проверить, есть ли альтернативный план для запроса, который не требует так много временного пространства - например, избегая сортировки или слияния. Конечно, не всегда легко или возможно. - person Jeffrey Kemp; 08.08.2012
comment
И если вам интересно, как можно сжать табличное пространство TEMP для соответствия данным, см. Этот отличный ответ: stackoverflow.com/a/1878732/210114 - person Philip Daubmeier; 18.02.2015

Создайте новый файл данных, выполнив следующую команду:

alter tablespace TABLE_SPACE_NAME add datafile 'D:\oracle\Oradata\TEMP04.dbf'            
   size 2000M autoextend on;
person Maria Ruchko    schedule 08.04.2013

Вам не нужно создавать новый файл данных; вы можете расширить существующие файлы данных табличного пространства.

Выполните следующее, чтобы определить имя файла для существующего табличного пространства:

  SELECT * FROM DBA_DATA_FILES;

Затем увеличьте размер файла данных следующим образом (замените имя файла именем из предыдущего запроса):

  ALTER DATABASE DATAFILE 'D:\ORACLEXE\ORADATA\XE\SYSTEM.DBF' RESIZE 2048M; 
person Templar    schedule 19.02.2014

Я столкнулся с тем же сообщением об ошибке, но у меня нет доступа к таблице, такой как "dba_free_space", потому что я не dba. Я использую некоторые предыдущие ответы, чтобы проверить доступное пространство, но у меня все еще много места. Однако после уменьшения полного сканирования таблицы как можно больше. Проблема решена. Я предполагаю, что Oracle использует временную таблицу для хранения полных данных сканирования таблицы. Если размер данных превышает лимит, будет отображаться ошибка. Надеюсь, это поможет кому-то с той же проблемой

person Carl Ko    schedule 29.03.2019