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

У меня есть приложение, реализованное в платформе Grails с использованием базового Hibernate. Через некоторое время я получил ошибку БД Oracle и исправил ее, перестроив поврежденный индекс. Интересно, кто-нибудь может предложить возможную причину (ы) и способы предотвратить это.

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

Операция гибернации: не удалось выполнить пакетное обновление JDBC; исключение 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: Индекс домена помечен ЗАГРУЗКА / СБОЙ / НЕПРАВИЛЬНО

; Вложенное исключение - java.sql.BatchUpdateException: ORA-29861: Индекс домена помечен ЗАГРУЗКА / СБОЙ / НЕПРАВИЛЬНО

Ответы [ 3 ]

26 голосов
/ 17 августа 2015

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

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;
13 голосов
/ 08 апреля 2010

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

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

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

4 голосов
/ 06 апреля 2010

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

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

Действие : Подождите, если указанный индекс помечен как ЗАГРУЗКА. указанный индекс, если он помечен как FAILED Удалить или перестроить указанный индекс, если помечено НЕПРАВИЛЬНО.

Надеюсь, этого должно быть достаточно для контекста. Можете ли вы понять проблему из этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...