Erreur ou BUG de SQL Server 2000

redog26 Messages postés 4 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 28 juin 2010 - 23 mai 2006 à 17:59
cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 - 24 mai 2006 à 12:07
En voulant lancer deux jobs simultanément le message suivant s'est affiché sur l'historique du 2ème job aprés echec :
Exécuté en tant qu'utilisateur : domaine/user1. La transaction (ID du processus 59) a été bloquée sur les ressources lock par un autre processus et a été choisie comme victime. Relancez la transaction. [SQLSTATE 40001] (erreur 1205)  Avertissement : la valeur nulle est éliminée par un agrégat ou par une autre opération définie. [SQLSTATE 01003] (erreur 8153).  L'étape a échoué.

est ce du à un manque  de ressources sur mon serveur SQL ou à ....?

1 réponse

cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 8
24 mai 2006 à 12:07
C'est un deadlock...

La tache 1 bloque une table A parce qu'elle écrit dedans, puis s'aprete à lire dans la table B, tandis que la 2ème tache ecrit dans B puis essaye de lire A.
Donc les 2 attendent que l'autre libère une ressource. SQL server détecte ce genre de chose et choisit au hasard de tuer l'une des tâches (c'est la victime).

Pour résoudre cela il suffit en général de ré-écrire le code des 2 tâches, et faire que les 2 scripts accèdent aux tables dans le même ordre (si c'est possible).
Ou plus simple mais moins efficace à long terme de relancer la tâche qui était la victime (on peut par exemple essayer de la lancer 2 ou 3 fois automatiquement en cas d'echec).

Il faut essayer aussi de ne pas lancer ces tâches 2 ensembles dans le cas présent si c'est possible.

=========
Christian Robert
Winwise
0
Rejoignez-nous