Подтвердить что ты не робот

ORA-01652: невозможно продлить временный сегмент на 128 в табличном пространстве. SYSTEM: Как продлить?

У меня есть большая таблица 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 выполняют эту работу, но я не уверен, как их назвать и с какими параметрами. Любая помощь будет оценена.

4b9b3361

Ответ 1

В каждом табличном пространстве есть один или несколько файлов данных, которые он использует для хранения данных.

Максимальный размер файла данных зависит от размера блока базы данных. Я считаю, что по умолчанию это оставляет с вами максимум 32gb на файл данных.

Чтобы узнать, соответствует ли реальный предел 32gb, выполните следующие действия:

select value from v$parameter where name = 'db_block_size';

Сравните результат, который вы получите с первым столбцом ниже, и это будет указывать на ваш максимальный размер файла данных.

У меня есть Oracle Personal Edition 11g r2, и при установке по умолчанию у него был размер блока размером 8 192 (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

Вы можете запустить этот запрос, чтобы узнать, какие файлы данных у вас есть, какие табличные пространства они связаны, и то, что вы установили максимальный размер файла (который не может превышать вышеупомянутый 32gb):

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;

Однако, если его размер равен/около 32gb, включен autoextend, тогда да, вам нужен еще один файл данных для табличного пространства:

alter tablespace system add datafile 'path_to_your_datafiles_folder\name_of_df_you_want.dbf' size 10m autoextend on maxsize unlimited;