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 записей.
Ответы
Ответ 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;