Pregunta

Algunos de los factores desencadenantes en mi base de datos de ser válida después de ciertos cambios en las tablas.Pero parece que todavía están trabajando.El único problema que tengo es que si puedo usar SQL Developer hay cruces rojas en el lado izquierdo de los gatillos, lo que indica que no son válidos.Es un gran problema?

Sé que puedo volver a compilar el gatillo para arreglar eso, pero no estoy seguro de si esto es realmente un problema digno de preocupación.Si es así tendré que revisar mi anterior cientos de cambios y averiguar qué está causando el problema.Gracias.

¿Fue útil?

Solución

Siempre que vamos a implementar un cambio a una base de datos de objetos de cualquier código que depende de lo que se invalida.Esto afecta a los disparadores, procedimientos almacenados y vistas.Sin embargo, la próxima vez que algo llama a que el código de la base de datos automáticamente compilar.

Así que no necesita preocuparse acerca de esto, ¿verdad?Bueno, sí, hasta un punto.La cosa es, la invalidación de los factores desencadenantes (o lo que sea) es un indicador para nosotros que se ha hecho un cambio que pudiera afectar la operación de que el gatillo, la cual podría tener efectos secundarios.El más evidente el efecto secundario es que el gatillo no se compilará.Más sutilmente, el gatillo se compila, pero no durante las operaciones.

Por lo tanto, es una buena idea fuerza de la recompilación de los disparos en un entorno de desarrollo, para asegurar que nuestro cambio fundamental no ha roto nada.Pero podemos saltar este paso cuando desplegamos nuestras cambio en la producción, porque estamos tan seguros de que todo va a volver a compilar en la demanda.Depende de nuestros nervios :)

Oracle proporciona los mecanismos para automáticamente volver a compilar todos los objetos no válidos en un esquema.

  • El más sencillo es el uso de DBMS_UTILITY.COMPILE_SCHEMA().Pero esto ha sido complicados ya que 8i (debido a que el soporte para Java Procedimientos Almacenados introdujo el potencial de las dependencias circulares) y ya no está garantizada para compilar todos los objetos correctamente la primera vez.

  • En 9i de Oracle nos dio una secuencia de comandos $ORACLE_HOME/rdbms/admin/utlrp.sql que volver a compilar cosas.Por desgracia, se requiere SYSDBA de acceso.

  • En 10g se agregó el UTL_RECOMP paquete, que básicamente hace todo lo que el script no.Este es el enfoque recomendado para volver a compilar un gran número de objetos.Por desgracia, también requiere de SYSDBA de acceso. Averigüe más.

En 11g, Oracle presentó de grano fino de gestión de la dependencia.Esto significa que los cambios en las tablas son evaluados en una granularidad más fina (básicamente a nivel de columna en lugar de a nivel de tabla) , y sólo los objetos que están directamente afectados por los cambios que se ven afectados. Averigüe más.

Otros consejos

No es un gran problema en absoluto.

Haz clic derecho en ellos para volver a compilar y estás listo ... Estoy escribiendo esto de mi propia experiencia.

Si hay algún error con el código que acaba de cambiar, aparecerá para que pueda solucionarlo.El compilador le dirá dónde se encuentran los problemas (números de línea, nombres de variables, etc.) en caso de errores.

Si los disparadores están funcionando, es probable que Oracle esté atrapando un error ORA-04068 cuando incendió el gatillo y vuelva a intentar el gatillo después de que se haya recompilado automáticamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top