DBAtlas · Atlas de operaciones de bases de datos

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.

Abrir en DBAtlas →

Más entradas de este motor