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;
Другие вопросы по тегам