Кто-то может объяснить РТЫ 29 861 ошибка на простом английском и его возможной причине?

Мне реализовали приложение в базовом использовании платформы Grails, в спящем режиме. После того, как это работает некоторое время, я получил ошибку DB Oracle и разрешил его путем восстановления незаконного индекса. Интересно, может ли кто-либо предложить возможную причину (причины) и способы предотвратить его.

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

Будьте в спящем режиме операция: не Мог выполнить пакетное обновление JDBC; некатегоризированные SQLException для SQL [обновляют гуид набора RSS_ITEM =?, pubdate =?, ссылка =?, rss_source_id =?, заголовок =?, описание =?, rating_raw =?, rating_tuned =?, date_created =?, date_locked =? где RSS_ITEM_ID =?]; состояние SQL [99999]; код ошибки [29861]; РТЫ 29861: доменный индекс отмечен, БЫТЬ ЗАГРУЖАТЬ/ПРИВОДИТЬ К СБОЮ/НЕПРИМЕНИМЫМИ

; вложенная исключительная ситуация является java.sql. BatchUpdateException: РТЫ 29861: доменный индекс отмечен, БЫТЬ ЗАГРУЖАТЬ/ПРИВОДИТЬ К СБОЮ/НЕПРИМЕНИМЫМИ

26
задан Hoàng Long 11 July 2016 в 03:05
поделиться

2 ответа

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

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

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

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

5
ответ дан 28 November 2019 в 07:06
поделиться

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

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

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

15
ответ дан 28 November 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: