2009-06-10 10 views
1

Récemment this question a été posté sur la définition de ce qu'est une transaction dans un contexte général. Une réponse commune à cette question était qu'une transaction devrait être une unité de travail atomiqueTransaction Processing: Quand une annulation se produit-elle?

Ma question concerne cette atomicité (je pense) Je vois souvent des appels explicites à ROLLBACK dans des procédures stockées SQL.

Est-ce que les systèmes de traitement des transactions exigent généralement que les annulations soient explicitement demandées?

Est-ce qu'une annulation se produit automatiquement si une erreur se produit lors de la validation?

Répondre

2

Dans les systèmes de TP, rollback peut se produire en fonction:

  • une demande explicite, comme un appel à ROLLBACK ou similaire
  • exception uncaught ou une erreur. Celles-ci pourraient inclure:
    • perte de communication avec un participant (dans une transaction distribuée)
    • invalide ou hors de la plage de valeurs ou d'un paramètre
    • un délai d'attente, en raison de l'incapacité d'un verrou par exemple ou retard de l'utilisateur.
  • en deux phases commit transaction distribuée, une défaillance de l'un des participants de voter pour commettre

Un rollback ne doit pas se produire comme vous le dites « lors de la commission », par lequel je suppose que vous signifie "en essayant de commettre". Une transaction peut être annulée à tout moment après sa création.

+0

oui, je voulais dire une tentative de commettre, c'est une distinction que j'aurais vraiment dû faire des remerciements pour l'avoir signalé – Crippledsmurf

0

Dans certains cas, une annulation se produira automatiquement en raison d'un déclencheur ou d'une violation de contrainte. Dans d'autres (comme vous l'avez vu), la procédure stockée elle-même fait le rollback. Aiden a raison de dire que l'auto-commit varie.