Le déclencheur n'est pas valide dans Oracle
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. Merci.
source d'informationauteur newguy
Vous devez vous connecter pour publier un commentaire.
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.
Donc nous n'avons pas besoin de vous inquiéter à ce sujet, non? 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.
Pas un gros problème.
Juste à droite, cliquez sur eux pour recompiler et vous êtes bon pour aller... je suis en train d'écrire ce à partir de ma propre expérience.
Si il y a des erreurs avec le code que tu viens de changer, ils apparaissent de sorte que vous pouvez le fixer. Le compilateur va vous dire où sont les problèmes (les numéros de ligne, les noms de variables, etc) en cas d'erreurs.
Si les éléments déclencheurs de travail, alors il est probable que Oracle est le piégeage de l'ORA-04068 erreur lorsqu'il active le déclencheur et de rejouer le déclencheur après avoir été recompilé automatiquement.