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

Может ли кто-нибудь объяснить ошибку ORA-29861 на простом английском и ее возможную причину?

У меня есть приложение, реализованное в рамках Grails с использованием базового Hibernate. После того, как он работает некоторое время, я получил ошибку Oracle DB и разрешил ее, восстановив индекс-нарушитель. Интересно, может ли кто-нибудь предложить возможную причину и способы предотвратить ее.

Вызвано: org.springframework.jdbc.UncategorizedSQLException:

Операция спящего режима: не удалось выполнить пакетное обновление JDBC; unategorized SQLException для SQL [обновление RSS_ITEM set guid =?, pubdate =?, link =?, rss_source_id =?, title=?, description =?, rating_raw =?, rating_tuned =?, date_created =?, date_locked =? где? RSS_ITEM_ID =]; Состояние SQL [99999]; код ошибки [29861]; ORA-29861: индекс домена отмечен "LOADING/FAILED/UNUSABLE"

; Вложенное исключение: java.sql.BatchUpdateException: ORA-29861: индекс домена отмечен "LOADING/FAILED/UNUSABLE"

4b9b3361

Ответ 1

Чтобы найти испорченное использование индекса:

select index_name,index_type,status,domidx_status,domidx_opstatus from user_indexes where index_type like '%DOMAIN%' and (domidx_status <> 'VALID' or domidx_opstatus <> 'VALID');

Чтобы перестроить использование индекса:

alter index INDEX_NAME rebuild;

Ответ 2

Индексы домена - это особый тип индекса. Возможно, мы построим наш собственный OCI, но, скорее всего, вы используете один из типов индексов, предлагаемый Oracle Text. Я говорю это, так как ваша таблица, как представляется, содержит бесплатные текстовые столбцы.

Наиболее часто используемым текстовым индексом является тип индекса CTXSYS.CONTEXT. Дело в том, что этот тип индекса заключается в том, что он не поддерживается транзакционно, чтобы свести к минимуму усилия, связанные с индексацией больших документов. Вместо этого происходит то, что фоновый процесс, например задание базы данных, запускает синхронизацию индекса на регулярной основе. Индекс недоступен, пока он синхронизируется. Если по какой-либо причине не удалось выполнить повторную синхронизацию, вам нужно будет сбросить и воссоздать индекс.

Является ли это регулярным явлением? Если это так, вам может потребоваться переоценить ваше выражение. Возможно, более подходящим может быть другой тип индекса (например, CTXSYS.CTXCAT). Одна вещь, которая поражает меня в вашем сообщении об ошибке, заключается в том, что ваш оператор UPDATE касается большого количества столбцов, включая то, что выглядит как первичный ключ. Это заставляет меня думать, что у вас есть один общий оператор обновления, который устанавливает каждый столбец независимо от того, действительно ли он изменился. Это плохая практика с нормальными индексами; он будет убивать ваше приложение, если вы используете текстовые индексы.

Ответ 3

http://ora-29861.ora-code.com/

Причина. Была предпринята попытка получить доступ к индексу домена, который построено или помечено несоответствующим неудачный DDL или отмечен непригодным для использования с помощью DDL-операции.

Действие. Подождите, если указан указанный индекс. LOADING. указанный индекс, если он отмечен FAILED Отбросьте или перестройте указанный индекс, если он отмечен UNUSABLE.

Это, надеюсь, будет достаточно контекста. Вы можете решить эту проблему?