tabla sqlerrm raise_application_error predefinidas obtener manejo linea excepciones errores error ejemplos disparador cursores oracle grails indexing

raise_application_error - sqlerrm oracle ejemplos



¿Alguien puede explicar el error ORA-29861 en inglés simple y su posible causa? (3)

Tengo una aplicación implementada en el marco de Grails utilizando Hibernate subyacente. Después de ejecutarse por un tiempo, recibí un error de Oracle DB y lo resolví reconstruyendo el índice ofensivo. Me pregunto si alguien puede proponer las posibles causas y las formas de evitar que esto suceda.

Causado por: org.springframework.jdbc.UncategorizedSQLException:

Operación de hibernación: no se pudo ejecutar la actualización por lotes JDBC; sin categoría SQLException para SQL [actualizar RSS_ITEM set guid = ?, pubdate = ?, link = ?, rss_source_id = ?, title = ?, description =, rating_raw = ?, rating_tuned = ?, date_created =? date_locked =? donde RSS_ITEM_ID =?]; Estado de SQL [99999]; código de error [29861]; ORA-29861: el índice de dominio está marcado como LOADING / FAILED / UNUSABLE

; la excepción anidada es java.sql.BatchUpdateException: ORA-29861: el índice del dominio está marcado como LOADING / FAILED / UNUSABLE


Los índices de dominio son un tipo especial de índice. Es posible crear nuestro propio OCI, pero es probable que esté usando uno de los tipos de índice que ofrece Oracle Text. Digo esto ya que su tabla parece incluir columnas de texto libre.

El índice de texto más utilizado es el tipo de índice CTXSYS.CONTEXT. El punto sobre este tipo de índice es que no se mantiene transaccionalmente, para minimizar el esfuerzo involucrado en la indexación de documentos grandes. Lo que sucede en su lugar es que un proceso en segundo plano, como un trabajo de base de datos, inicia la sincronización de índices de forma regular. El índice es inutilizable mientras se está sincronizando. Si la resincronización falla por algún motivo, deberá eliminar y volver a crear el índice.

¿Es esto una ocurrencia regular? Si es así, es posible que deba volver a evaluar su solicitud. Quizás un tipo diferente de índice (como CTXSYS.CTXCAT) podría ser más apropiado. Una cosa que me sorprende de su mensaje de error es que su declaración de ACTUALIZACIÓN toca muchas columnas, incluido lo que parece ser la clave principal. Esto me hace pensar que tiene una sola instrucción de actualización genérica que establece cada columna independientemente de si realmente ha cambiado. Esta es una mala práctica con índices normales; matará su aplicación si está utilizando índices de texto.


Para localizar el uso del índice roto:

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'');

Para reconstruir el uso del índice:

alter index INDEX_NAME rebuild;


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

Causa : se ha intentado acceder a un índice de dominio que se está construyendo o está marcado como fallido por un DDL no exitoso o está marcado como inutilizable por una operación DDL.

Acción : Espere si el índice especificado está marcado CARGANDO Descarte el índice especificado si está marcado como FAILED Suelte o reconstruya el índice especificado si está marcado como INUSABLE.

Esperemos que eso sea suficiente contexto. ¿Puedes resolver el problema de eso?