DBAtlas · Atlas de operações de banco de dados

ORA-04061: existing state of package/procedure has been invalidated (o estado existente do package/procedure foi invalidado)

Oracle

O 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.

Abrir no DBAtlas →

Mais entradas deste banco