ORA-01652: невозможно увеличить временный сегмент на 128 в табличном пространстве. СИСТЕМА: Как расширить?
У меня есть большая таблица Oracle, которая содержит 542512 строк. Он имеет три столбца, и когда я пытаюсь создать для него индекс с помощью следующей команды:
CREATE INDEX FTS_INDEX ON FILTERED_TEKLI_IIS_TABLOSU (ilAdi,ilceAdi,caddeAdi)
Oracle выдает следующую ошибку:
SQL Error: ORA-01652: unable to extend temp segment by 128 in tablespace SYSTEM
01652. 00000 - "unable to extend temp segment by %s in tablespace %s"
*Cause: Failed to allocate an extent of the required number of blocks for
a temporary segment in the tablespace indicated.
*Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
files to the tablespace indicated.
Я искал эту ошибку и обнаружил, что она возникает, когда у Oracle недостаточно места для хранения промежуточных данных при выполнении таких операций, как объединение таблиц, создание индексов и т. Д. Для больших таблиц. Но я не нашел четкого решения для этого. Эти команды ALTER TABLESPACE и ADD DATAFILE, кажется, делают эту работу, но я не уверен, как их вызывать и с какими параметрами. Любая помощь будет оценена.
1 ответ
Каждое табличное пространство имеет один или несколько файлов данных, которые оно использует для хранения данных.
Максимальный размер файла данных зависит от размера блока базы данных. Я считаю, что по умолчанию у вас остается максимум 32 ГБ на файл данных.
Чтобы узнать, является ли фактический лимит 32 ГБ, выполните следующее:
select value from v$parameter where name = 'db_block_size';
Сравните полученный результат с первым столбцом ниже, и он укажет максимальный размер вашего файла данных.
У меня есть Oracle Personal Edition 11g r2, и при установке по умолчанию он имел размер блока 8192 (32 ГБ на файл данных).
Block Sz Max Datafile Sz (Gb) Max DB Sz (Tb)
-------- -------------------- --------------
2,048 8,192 524,264
4,096 16,384 1,048,528
8,192 32,768 2,097,056
16,384 65,536 4,194,112
32,768 131,072 8,388,224
Вы можете выполнить этот запрос, чтобы найти, какие файлы данных у вас есть, с какими табличными пространствами они связаны, и для чего вы в настоящее время устанавливаете максимальный размер файла (который не может превышать вышеупомянутые 32 ГБ):
select bytes/1024/1024 as mb_size,
maxbytes/1024/1024 as maxsize_set,
x.*
from dba_data_files x
MAXSIZE_SET - это максимальный размер, для которого вы установили файл данных. Также имеет значение, установлен ли параметр AUTOEXTEND в положение ON (его имя соответствует тому, что оно подразумевает).
Если ваш файл данных имеет небольшой максимальный размер или автоматическое расширение не включено, вы можете просто запустить:
alter database datafile 'path_to_your_file\that_file.DBF' autoextend on maxsize unlimited;
Однако, если его размер составляет / около 32 ГБ, автоматическое расширение включено, тогда да, вам нужен еще один файл данных для табличного пространства:
alter tablespace system add datafile 'path_to_your_datafiles_folder\name_of_df_you_want.dbf' size 10m autoextend on maxsize unlimited;