ORA-04061: existing state of package/procedure has been invalidated (se invalidó el estado existente del package/procedimiento)
Oracle¿Qué significa?
El estado existente de un objeto PL/SQL llamado (package, procedimiento, función) se invalidó porque cambió un objeto del que depende. Es una variante de la condición de pérdida de estado que acompaña a ORA-04068; el estado del package que mantiene la sesión ya no es válido.
¿Por qué ocurre?
Mientras una sesión usaba un package, se aplicó DDL a ese package o a sus dependencias (cambio de estructura de tabla, recompilación, cambio de grants). Como resultado, se invalidó el estado del package existente en la sesión. Se ve en entornos con despliegues frecuentes cuando se hacen cambios de esquema con la aplicación en ejecución.
Cómo solucionarlo
La misma llamada suele funcionar en el segundo intento (ya que el estado se ha restablecido); capture este error en la aplicación y reintente de forma segura. Haga los cambios de esquema con poco tráfico de aplicación/en una ventana de mantenimiento. Compile en bloque los objetos no válidos: EXEC DBMS_UTILITY.COMPILE_SCHEMA('APP_SCHEMA'); Los diseños que minimizan el estado de los packages (variables globales) reducen este efecto.
Más entradas de este motor
- ORA-19804cannot reclaim N bytes disk space from M bytes limit (no se pueden recuperar N bytes de espacio en disco del límite de M bytes)
- ORA-00494enqueue held for too long by 'inst N, osid M' (enqueue retenido demasiado tiempo)
- ORA-04021timeout occurred while waiting to lock object (timeout al esperar el bloqueo de un objeto)
- ORA-01466unable to read data - table definition has changed (no se pueden leer los datos; la definición de la tabla ha cambiado)
- ORA-08176consistent read failure; rollback data not available (fallo de lectura consistente; datos de rollback no disponibles)
- ORA-00020maximum number of processes (N) exceeded (se superó el número máximo de procesos (N))
- ORA-01113file N needs media recovery