Question

Certains des éléments déclencheurs dans ma base de données invalide après certaines modifications sur les tables.Mais il semble qu'ils sont encore à travailler.Le seul problème que j'ai est que si j'utilise SQL Developer il y a des croix rouges sur le côté gauche de la déclencheurs indiquant qu'ils sont invalides.Est-ce un gros problème?

Je sais que je peux recompiler le déclencheur pour corriger ça, mais je ne suis pas sûr si c'est vraiment une question vaut la peine d'inquiétude.Si oui, j'ai besoin de revoir mon précédent des centaines de changements et de trouver ce qui est à l'origine du problème.Je vous remercie.

Était-ce utile?

La solution

Chaque fois que nous déployer un changement à un objet de base de données de n'importe quel code qui en dépend est invalidé.Cela affecte les déclencheurs, les vues et les procédures stockées.Cependant, la prochaine fois que quelque chose d'appels que le code de la base de données sera automatiquement recompiler.

Nous n'avons donc pas besoin de s'inquiéter à ce sujet, à droite?Eh bien, oui, jusqu'à un certain point.Le truc, c'est que l'invalidation de la déclencheurs (ou autre) est un indicateur pour nous qu'une modification a été apportée, ce qui pourrait affecter le fonctionnement du déclencheur, ce qui pourrait avoir des effets secondaires.Le plus évident d'effets secondaires est que le déclencheur ne compile pas.Plus subtilement, le déclencheur compile mais échoue lors de l'exploitation.

Par conséquent, il est une bonne idée de forcer la recompilation de déclencheurs dans un environnement de développement pour s'assurer que le changement n'a pas fondamentalement rien cassé.Mais on peut sauter cette étape lorsque nous déployons notre changement dans la production, parce que nous le faisons confiance pour que tout re-compiler à la demande.Cela dépend de nos nerfs :)

Oracle fournit des mécanismes pour la recompilation de tous les objets non valides dans un schéma.

  • Le plus simple est d'utiliser DBMS_UTILITY.COMPILE_SCHEMA().Mais cela a été un peu louches depuis 8i (parce que le support de Java Procédures Stockées introduit le potentiel de dépendances circulaires) et n'est plus garanti pour compiler tous les objets avec succès la première fois.

  • Dans 9i Oracle nous a donné un script $ORACLE_HOME/rdbms/admin/utlrp.sql qui recompilé les choses.Malheureusement, il nécessite SYSDBA accès.

  • Dans 10g ils ont ajouté la UTL_RECOMP paquet, qui fait de tout ce que ce script fait.C'est l'approche recommandée pour recompiler un grand nombre d'objets.Malheureusement, il nécessite également SYSDBA accès. En savoir plus.

En 11g Oracle a introduit fine-grain de gestion de la dépendance.Cela signifie que les modifications apportées aux tables, sont évalués à une granularité plus fine (essentiellement au niveau des colonnes plutôt que de niveau de la table) , et les seuls objets qui sont directement touchés par les changements sont touchés. En savoir plus.

Autres conseils

Pas un gros problème du tout.

Faites un clic droit sur eux pour recompiler et vous êtes prêt à partir ... J'écris cela de ma propre expérience.

S'il y a des erreurs avec le code que vous venez de changer, ils apparaîtront afin que vous puissiez le réparer.Le compilateur vous dira où sont les problèmes (numéros de ligne, noms de variables, etc.) en cas d'erreur.

Si les déclencheurs fonctionnent, il est probable que Oracle presse une erreur ORA-04068 lorsqu'elle tire la gâchette et réessayer la gâchette après avoir été automatiquement recompalisée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top