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

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

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

create table tablename
as
select * for table2

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

ORA-01652 Unable to extend temp segment by in tablespace

Когда я googled, я обычно обнаружил ошибку 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 записей.

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

  SELECT * FROM DBA_DATA_FILES;

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

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