не получается создать UNIQUE. ORA-01652

km
Дата: 03.10.2004 16:21:15
Привет, всем !
Необходимо создать UNIQUE по двум полям для большой таблицы.
Tаблица "TBL1" хранится в TABLESPACE "TS2" (места там еще много), принадлежит пользователю "USR1", для которого :
Default tablespace : "TS1",
Temporary tablespace: "TSTemp"

пытаюсь поднять UNIQUE :
ALTER TABLE TBL1 ADD UNIQUE (field1, field2) deferrable NOVALIDATE

В ответ, после 30 мин. работы, получаю:
ORA-01652: unable to extend temp segment by 18206 in tablespace TS1

Тут чувствую, что мне просто не хватает знаний, я не могу понять почему сервер пытается выделить место для temp segment не в Temporary tablespace владельца таблицы и UNIQUE и даже не в TABLESPACE где хранится таблица....
Читаю доку, пока без просвета...

Может кто разяснит логику сервера ( Oracle 8.1.7.4.0)

Заранее благодарен!
Markelenkov
Дата: 03.10.2004 17:25:27
km
...я не могу понять почему сервер пытается выделить место для temp segment не в Temporary tablespace владельца таблицы...

/topic/126882

km
...и даже не в TABLESPACE где хранится таблица...

ALTER TABLE TBL1 ADD UNIQUE (field1, field2) deferrable using index tablespace TS2 NOVALIDATE
km
Дата: 03.10.2004 17:34:34
Спасибо большое!
щас попробую.
тред /topic/126882 я читал, но выводов не сделал :(
Markelenkov
Дата: 03.10.2004 17:59:49
Дело в том, что при создании индекса Oracle сначала создает временный сегмент в том табл. пр-ве, где и будет расположен индекс, и при успешном завершении его создания переименовывает его. Сделано это для того, чтобы не потребовалось копировать данные созданного индекса из временного табл. пр-ва в постоянное. Поэтому и появляется немного сбивающее с толку сообщение ...unable to extend temp segment...
km
Дата: 03.10.2004 18:49:51
Спасибо ! Теперь стало гораздо яснее что да как :)
правда я опять получил
ORA-1652: unable to extend temp segment by 40964 in tablespace TS2
хотя там достаточно места, на мой взгляд...
А как можно оценить кол-во места которое займет индекс если таблица из 2-х полей, по которой он строится, занимает 1 Гб ?
Markelenkov
Дата: 03.10.2004 19:38:58
В данном случае, если я правильно понял, в таблице всего 2 поля - по ним и строится индекс. Тогда индекс при тех же параметрах хранения (pctfree, blocksize и т.д.) приблизительно будет занимать те же 1Gb.

В качестве возможности уменьшения размера индекса можно посмотреть на опцию COMPRESS команды CREATE INDEX, выбрав оптимальный порядок столбцов такого индекса.
km
Дата: 03.10.2004 19:41:32
ок. понял. я в принципе так и предпологал :)
спасибо большое за объяснения !!!