ORA-04061: existing state of package/procedure has been invalidated (o estado existente do package/procedure foi invalidado)
OracleO que significa?
O estado existente de um objeto PL/SQL chamado (package, procedure, function) foi invalidado porque um objeto do qual ele depende foi alterado. É uma variante da condição de perda de estado acompanhada de ORA-04068; o estado do package mantido pela sessão não é mais válido.
Por que acontece?
Enquanto uma sessão usava um package, foi aplicado DDL a esse package ou às suas dependências (mudança na estrutura de tabela, recompilação, mudança de grants). Como resultado, o estado existente do package na sessão foi invalidado. Ocorre em ambientes com deploys frequentes quando são feitas mudanças de schema com a aplicação em execução.
Como resolver
A mesma chamada geralmente é bem-sucedida na segunda tentativa (já que o estado foi redefinido); capture este erro na aplicação e repita com segurança. Faça as mudanças de schema com pouco tráfego da aplicação/em uma janela de manutenção. Compile os objetos inválidos em massa: EXEC DBMS_UTILITY.COMPILE_SCHEMA('APP_SCHEMA'); Designs que minimizam o estado de package (variáveis globais) reduzem esse efeito.
Mais entradas deste banco
- ORA-19804cannot reclaim N bytes disk space from M bytes limit (não é possível recuperar N bytes de espaço em disco do limite de M bytes)
- ORA-00494enqueue held for too long by 'inst N, osid M' (enqueue mantido por tempo demais)
- ORA-04021timeout occurred while waiting to lock object (timeout ao aguardar o lock de um objeto)
- ORA-01466unable to read data - table definition has changed (não é possível ler os dados; a definição da tabela mudou)
- ORA-08176consistent read failure; rollback data not available (falha de leitura consistente; dados de rollback indisponíveis)
- ORA-00020maximum number of processes (N) exceeded (número máximo de processos (N) excedido)
- ORA-01113file N needs media recovery