Pergunta

Alguns dos gatilhos no meu banco de dados tornar-se inválido, depois de algumas alterações nas tabelas.Mas parece que eles ainda estão trabalhando.O único problema que eu tenho é que se eu usar o SQL Developer há cruzes vermelhas no lado esquerdo da dispara indicando que eles são inválidos.É um grande problema?

Eu sei que pode recompilar o gatilho para corrigir isso, mas eu não tenho certeza se isso é realmente um problema que vale a pena para preocupação.Se assim for eu vou precisar rever o meu anterior centenas de alterações e descobrir o que está causando o problema.Obrigado.

Foi útil?

Solução

Sempre que implantar uma alteração em um objeto de banco de dados qualquer código que depende é invalidado.Isso afeta disparadores, modos de exibição e procedimentos armazenados.No entanto, a próxima vez que algo chamadas de código de banco de dados será automaticamente recompilá-lo.

Por isso não precisa se preocupar com isso, certo?Bem, sim, até um certo ponto.A coisa é, a invalidação dos gatilhos (ou o que) é um sinalizador para nós que foi feita uma alteração que possa afetar a operação do gatilho, o que pode ter efeitos secundários.O mais óbvio efeito colateral é que o gatilho não vai compilar.Mais sutilmente, o gatilho compila, mas não durante as operações.

Por isso, é uma boa idéia para forçar a recompilação de gatilhos em um ambiente de desenvolvimento, para garantir que a nossa mudança não tem fundamentalmente quebrado alguma coisa.Mas podemos pular essa etapa quando nós implantar a mudança na produção, porque nós temos tanta confiança de que tudo vai re-compile demanda.Depende do nosso nervo :)

A Oracle fornece mecanismos para automaticamente recompilar todos os objetos inválidos em um esquema.

  • A mais simples é usar DBMS_UTILITY.COMPILE_SCHEMA().Mas isso foi desonesto desde 8i (porque o suporte para Java Procedimentos Armazenados introduziu o potencial de dependências circulares) e não é mais garantida para compilar todos os objetos com êxito primeira vez.

  • No Oracle 9i nos deu um script $ORACLE_HOME/rdbms/admin/utlrp.sql que recompilado coisas.Infelizmente, ele requer SYSDBA de acesso.

  • Em 10g ele acrescentou que o UTL_RECOMP pacote, que basicamente faz tudo o que o script faz.Esta é a abordagem recomendada para recompilar um grande número de objetos.Infelizmente, ele também requer SYSDBA de acesso. Saiba mais.

No 11g Oracle introduziu refinadas gerenciamento de dependência.Isto significa que as alterações tabelas são avaliados em uma granularidade mais fina (basicamente de nível de coluna em vez de nível de tabela) , e apenas os objetos que são diretamente afetados pelas alterações são afetados. Saiba mais.

Outras dicas

Não é um grande problema.

Basta clicar com o botão direito neles para recompilar e você é bom para ir ... Estou escrevendo isso da minha própria experiência.

Se houver algum erro com o código que você acabou de alterar, eles aparecerão para que você possa consertá-lo.O compilador dirá onde estão os problemas (números de linha, nomes variáveis, etc) em caso de erros.

Se os gatilhos estiverem funcionando, é provável que a Oracle esteja prendendo um erro ora-04068 quando disparar o gatilho e voltando o gatilho depois que ele foi automaticamente recompilado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top