MSSQLSERVER_1205
Détails
Nom du produit |
SQL Server |
Version du produit |
10.0 |
Numéro de build du produit |
10.00.0000.00 |
ID de l'événement |
1205 |
Source de l'événement |
MSSQLSERVER |
Composant |
SQLEngine |
Nom symbolique |
LK_VICTIM |
Texte du message |
La transaction (ID de processus %d) a été bloquée sur les ressources %.*ls par un autre processus et a été choisie comme victime. Réexécutez la transaction. |
Explication
L'accès aux ressources s'effectue dans un ordre conflictuel sur des transactions distinctes, ce qui cause un interblocage. Par exemple :
Transaction1 met à jour Table1.Row1, tandis que Transaction2 met à jour Table2.Row2.
Transaction1 essaie de mettre à jour Table2.Row2 mais est bloquée car Transaction2 n'est pas encore validée.
Transaction2 essaie alors de mettre à jour Table1.Row1 mais est bloquée car Transaction1 n'est pas encore validée.
Un blocage survient car Transaction1 attend que Transaction2 se termine, alors que Transaction2 attend que Transaction1 se termine.
Le système détectera ce blocage et choisira l'une des transactions impliquées comme 'victime' et émettra ce message, tout en annulant la transaction de la victime. Pour plus d'informations sur les blocages, consultez Interblocage.
Action de l'utilisateur
Exécutez de nouveau la transaction. Vous pouvez également réviser l'application pour éviter les blocages. La transaction qui a été choisie comme victime peut être retentée et réussira probablement, en fonction des opérations qui sont exécutées simultanément.
Pour empêcher ou éviter l'apparition de blocages, faites en sorte que toutes les transactions accèdent aux lignes dans le même ordre (Table1, puis Table2) ; de cette manière, bien qu'un blocage puisse survenir, aucun interblocage ne se produira. Pour plus d'informations sur les actions à entreprendre, consultez Détection et fin des blocages.