Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как создать CTXSYS.CONTEXT индекс на живой базе большого объема, чтобы не прерывать работу  [new]
Victor_Anc
Member

Откуда:
Сообщений: 2
Есть "живая" база большого объема.
По расчетам построение индекса типа CTXSYS.CONTEXT займет несколько дней, за выходные не управиться.
Во время выполнения CREATE INDEX попытка INSERT UPDATE DELETE на данную таблицу приводит к сообщению ORA-29861: индекс домена помечен как LOADING/FAILED/UNUSABLE

Подскажите, как "порционно" создать индекс в ночное время, чтобы в дневное время не остановить работу с этой таблицей.

Пока на ум приходит только идея: оставить несколько тысяч записей, ожидаемое время индексации которых вложится в ночь. Остальной "хвост" выгрузить в дамп и удалить из таблицы.
Потом выполнить CREATE INDEX..., после чего импортировать из дампа "хвост".
Последующие ночи неиндексированный "хвост записей" уменьшать на несколько тысяч записей, выгружать в дамп, удалять из таблицы,
выполнять EXECUTE CTX_DDL.SYNC_INDEX..., после чего импортировать из дампа "хвост".
7 май 08, 13:11    [5636058]     Ответить | Цитировать Сообщить модератору
 Re: Как создать CTXSYS.CONTEXT индекс на живой базе большого объема, чтобы не прерывать работу  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862

Victor_Anc wrote:

> Во время выполнения CREATE INDEX попытка INSERT UPDATE DELETE на данную
> таблицу приводит к сообщению ORA-29861: индекс домена помечен как
> LOADING/FAILED/UNUSABLE

CREATE INDEX ... ONLINE не помогает?

Posted via ActualForum NNTP Server 1.4

7 май 08, 13:34    [5636284]     Ответить | Цитировать Сообщить модератору
 Re: Как создать CTXSYS.CONTEXT индекс на живой базе большого объема, чтобы не прерывать работу  [new]
flop
Member

Откуда:
Сообщений: 76
Создать индекс с параметром nopopulate. (создатся только сруктура индекса).
На ночь делать примерно так: update table set index_field = index_field where id between 1 and 100.
(1 и 100 - кол-во строк строк которые смогут проиндексировться за ночь). После этого апдейта, (эти строки попадут в очередь на индексацию) можно запускать ctx_ddl.sync_index. На следующий день начинать со 101 айдишника.
7 май 08, 14:12    [5636590]     Ответить | Цитировать Сообщить модератору
 Re: Как создать CTXSYS.CONTEXT индекс на живой базе большого объема, чтобы не прерывать работу  [new]
Victor_Anc
Member

Откуда:
Сообщений: 2
спасибо, кажись
CREATE INDEX ... ONLINE
пошло. Еще потестирую...
7 май 08, 17:11    [5638035]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить