2009-09-22 2 views
2

J'ai quelques questions autour du verrouillage des transactions dans la base de données Oracle. Ce que j'ai découvert jusqu'à présent est que:verrou de transaction de distribution dans la base de données oracle

Cause: Le délai d'attente sur un verrou dans une transaction distribuée a été dépassé. Cette heure est spécifiée dans le paramètre d'initialisation DISTRIBUTED_LOCK_TIMEOUT.

Action: Cette situation est traitée comme un interblocage et l'instruction a été annulée. Pour définir un intervalle plus long, ajustez le paramètre d'initialisation DISTRIBUTED_LOCK_TIMEOUT, puis arrêtez et redémarrez l'instance.

D'autres choses que je veux savoir dans plus de détails sont des choses comme:

  1. Il est mentionné qu'un verrou dans « transaction distribuée » est arrivé. Alors, quel type d'opération de base de données peut provoquer? Mise à jour d'un enregistrement? Sélection d'un enregistrement?

  2. Qu'est-ce que 'Distributed' signifie quand même. J'ai vu ce terme inventé partout, mais je n'arrive pas à déduire ce que cela signifie. Que pouvons-nous faire pour réduire les instances d'un tel verrouillage?

  3. Une transaction distribuée signifie que vous avez eu une transaction qui a eu deux participants différents.

+1

documentation en ligne d'Oracle est assez bien. Les réponses à la plupart des questions de nature générale, telles que celle-ci, peuvent être trouvées dans le guide Concepts - http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/toc.htm – APC

Répondre

3

Si vous utilisez PL/SQL, cela implique généralement l'existence de plusieurs bases de données. Mais cela peut simplement indiquer qu'une application utilise un coordinateur de transaction externe dans ses interactions avec la base de données. Une application J2EE, par exemple, peut souhaiter créer une transaction distribuée qui couvre les deux instructions SQL envoyées sur une base de données pour déplacer 100 $ du compte A vers le compte B ainsi que l'action du serveur d'applications pour créer un message JMS pour cette transaction. provoquer l'envoi d'une notification par e-mail du transfert. Dans ce cas, l'application veut s'assurer que l'état du niveau intermédiaire correspond à l'état de l'extrémité arrière.

Les transactions distribuées ne sont pas gratuites. Ils impliquent potentiellement un peu de surcharge supplémentaire car, au minimum, vous devez utiliser le two-phase commit protocol pour vérifier que tous les composants qui font partie de la transaction distribuée sont prêts à être validés et pour vérifier qu'ils ont tous été validés. Cela implique l'envoi d'un nombre de paquets réseau pouvant représenter une fraction importante du temps d'attente d'une transaction OLTP. Les transactions distribuées entraînent également des problèmes d'ordre administratif car vous vous retrouvez avec des cas où la transaction d'un participant échoue après qu'elle a indiqué qu'elle était prête à être validée ou qu'un coordinateur de transaction échouait alors que plusieurs participants avaient des transactions ouvertes. Donc, la première question serait de savoir si votre application a vraiment besoin de transactions distribuées. Parfois, les développeurs constatent qu'ils demandent accidentellement des transactions distribuées alors qu'elles ne sont vraiment pas nécessaires. Si vous n'êtes pas sûr de ce qu'est une transaction distribuée, il est tout à fait possible que vous n'en ayez pas vraiment besoin.

0

Il y a un guide here qui vous guidera à travers les étapes pour simuler un ORA-02049: délai d'attente: transaction distribuée en attente de verrouillage si vous voulez une meilleure compréhension de l'une de ses causes:

Questions connexes