2013-05-02 5 views
0

Mon ami m'a posé cette question et je n'ai pas réussi à la résoudre.Résolution d'un interblocage causé par des déclenchements parallèles dans Oracle

Considérons un scénario où j'ai deux déclencheurs sur table1. Les deux sont des déclencheurs BEFORE INSERT. Les deux déclencheurs tentent de mettre à jour row 1 de table2. Lorsque la requête INSERT est exécutée sur table1, les deux déclencheurs tentent de mettre à jour la même ligne de table2 et un blocage est provoqué. Ceci est un problème simplifié. Dans le cas présent, il existe environ 50 déclencheurs et d'autres raisons à cause desquelles nous ne pouvons pas utiliser COMMIT dans l'un des déclencheurs.

Maintenant s'il vous plaît aidez-moi à résoudre le problème ci-dessus.

  • Y at-il quelque chose par lequel je peux séquencer les déclencheurs.
  • Est-il possible d'utiliser des points de sauvegarde de quelque manière que ce soit pour résoudre ce problème?
  • Ou tout moyen par lequel je dois créer une table temporaire et faire quelque chose avec elle.

Veuillez expliquer si des solutions sont réalisables.

Répondre

1

Les déclencheurs sur la même table sont exécutés successivement dans un ordre non spécifié (en fait, classés par leur ID d'objet). L'exécution de validation à l'intérieur du déclencheur est une mauvaise idée.
Vous pouvez utiliser une table temporaire globale (sur les lignes de suppression de validation) ou des variables de package pour stocker des données temporaires.

4

Est-ce une situation réelle ou hypothétique? Autant que je sache, vous ne pouvez commettre dans un déclencheur avec une transaction autonome, ce qui expliquerait les blocages parce que sinon vous exécutez le code de déclenchement dans la même transaction, et il ne peut pas se bloquer lui-même.

Quoi qu'il en soit, avec 11.2 vous contrôlez l'ordre de déclenchement des triggers avec la clause suivante: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/create_trigger.htm#CJADJGIF

Déclencheurs un soutien à l'application très difficile, en passant, et indiquent souvent nécessaire de faire face à une conception dénormalisé qui est aussi un problème. À éviter autant que possible.

Questions connexes