Des Transactions SQL a été bloquée
Parfois, je reçois ce genre d'exception sur pas très occupé SQL server:
Transaction (Process ID 57) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Line number: 1
Error Number: 1205
Procedure:
Server name: P01
Error Source: .Net SqlClient Data Provider
Error State: 47
Je ne suis pas capable de la reproduire. J'ai essayé d'exécuter plusieurs requêtes de clients différents, en même temps, mais il n'a pas montré.
Quelle est la meilleure façon de gérer ce type de problème lorsqu'il survient à l'intérieur de la procédure ou à l'intérieur de déclencher? Je veux dire, comment relancer la transaction?
Comment faire lorsqu'une exception se produit à l'intérieur de la procédure appelée à partir de la gâchette, qui a été appelé par l'insertion faite par une procédure (qui est: procedure01 -> insert -> déclencheur -> procedure02 !)
Vous devez vous connecter pour publier un commentaire.
Je suggère que vous venez au problème de deux points de vue.
Piège ou Attraper Les Erreurs de blocage de sorte que vous pouvez ré-exécuter la transaction, qui est choisi comme Victime par le moteur de base de données SQL Server.
Savoir quelle est la cause de votre les Événements de Blocage.
Vous pouvez le faire de deux façons, soit en exécution d'un Trace du générateur de profils SQL Server pour capturer et enregistrer l'Événement de Blocage ou vous pouvez activer certains SQL Server indicateurs de suivi qui permettra d'enregistrer les détails de l'Événement de Blocage pour le Journal des Erreurs SQL Server.
Dans le grande majorité des cas, vous pouvez identifier l'origine de votre Blocage des Événements et de remédier à la situation par le biais d'un changement structurel dans le schéma de base de données ou une logique de changement pour le code/responsable de l'Événement de Blocage.
Pour en savoir plus prendre un coup d'oeil à:
J'espère que j'ai répondu à votre question, mais ne laissez-moi savoir si je peux vous aider de quelque façon.
Configurer un serveur SQL trace qui capture les événements du graphique de blocage de sorte que vous pouvez regarder les .le fichier trc avec le générateur de profils SQL. De cette façon, vous pouvez avoir quelque chose en place pour être en mesure de résoudre toute situation de blocage. J'ai fourni le code ci-dessous. Vous devez modifier le chemin d'accès au fichier approprié. Ce serait une bonne idée de configurer ce script à exécuter sur le démarrage de SQL server.
FYI - beaucoup de choses différentes peuvent provoquer un blocage, l'un d'eux étant l'absence d'index.
J'ai résolu comme problème à l'aide de ReadCommited niveau d'isolation.
Je suis résolu cette erreur par:
Exécuter La Requête:
UTILISEZ [master]
MODIFIER la BASE de données name_database
SET MULTI_USER
AVEC LA RESTAURATION IMMÉDIATE
Goodluck!