Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec les deadlock

3 réponses
Avatar
Test recherche
Bonjour,
Je dispose d'un serveur SQL 2000 sous Windows 2003 server
Je rencontre des problèmes lors de l'execution de certaines procédures
stockées
l'erreur remontée est La transaction (ID du processus 272) a été bloquée sur
les ressources lock
Pourtant cette procédure ne fait rien d'exceptionnelle, elle récupère une
valeur dans une table, certe consutée,
insert un enregistrement dans une autre et récupère la valeur de
l'identifiant de l'enregistrement crée.
Tous ceci s'exécute au sein d'une transaction.

Quand deux traitements s'éxecute en même temps, il y en a toujours un qui
plante en remontant cette erreur.
Est ce que quelqu'un aurait une idée pour éviter que cela se reproduise

Merci d'avance
Très cordialement
Stéphane

3 réponses

Avatar
bruno reiter
lance une trace (profiler) et trap l'évènement "deadlock graph" pour voir
ec qui est en cause

BR

"Test recherche" wrote in message
news:gl1g9c$e2i$
Bonjour,
Je dispose d'un serveur SQL 2000 sous Windows 2003 server
Je rencontre des problèmes lors de l'execution de certaines procédures
stockées
l'erreur remontée est La transaction (ID du processus 272) a été bloquée
sur les ressources lock
Pourtant cette procédure ne fait rien d'exceptionnelle, elle récupère une
valeur dans une table, certe consutée,
insert un enregistrement dans une autre et récupère la valeur de
l'identifiant de l'enregistrement crée.
Tous ceci s'exécute au sein d'une transaction.

Quand deux traitements s'éxecute en même temps, il y en a toujours un qui
plante en remontant cette erreur.
Est ce que quelqu'un aurait une idée pour éviter que cela se reproduise

Merci d'avance
Très cordialement
Stéphane



Avatar
zoltix
On 19 jan, 12:16, "Test recherche" wrote:
Bonjour,
Je dispose d'un serveur SQL 2000 sous Windows 2003 server
Je rencontre des problèmes lors de l'execution de certaines procédure s
stockées
l'erreur remontée est La transaction (ID du processus 272) a été bl oquée sur
les ressources lock
Pourtant cette procédure ne fait rien d'exceptionnelle, elle récupè re une
valeur dans une table, certe consutée,
insert un enregistrement dans une autre et récupère la valeur de
l'identifiant de l'enregistrement crée.
Tous ceci s'exécute au sein d'une transaction.

Quand deux traitements s'éxecute en même temps, il y en a toujours un qui
plante en remontant cette erreur.
Est ce que quelqu'un aurait une idée pour éviter que cela se reprodui se

Merci d'avance
Très cordialement
    Stéphane



J'aimerais voir ta procédure car ce sera plus facile.......mais tu
travailles avec des curseurs(voici ma déclaration pour DECLARE
cursor_name CURSOR LOCAL STATIC....)? peut être changer l'isolation
des tes requêtes ou la stratégie(-

http://www.mssqlcity.com/Articles/Adm/SQL70Locks.htm

SET TRANSACTION ISOLATION LEVEL
{
READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE
}

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
GO
DBCC USEROPTIONS
GO
Avatar
Test recherche
Voici la procédure stockée


ALTER Procedure [dbo].[SPEditionBatchPDFTransfert_Record_Set2]
@a_id_EditionBatchPDFTransfert int, /* Identifiant d'un transfert d'information
de fichier PDF d'un lot d'édition */
@a_id_EditionBatchPDFTransfert_Section int, /* Identifiant d'une tranche
liées au transfert des fichiers PDF */
@a_PDFFileName varchar (260), /* Nom du fichier PDF */
@a_IndexStartNumberPDFFile int, /* Numéro d'index de début dans le
fichier PDF */
@a_IndexEndNumberPDFFile int, /* Numéro d'index de fin dans le fichier
PDF */
@a_LogicalDocumentBeginNumber int, /* Numéro de début de document
logique */
@a_LogicalDocumentEndNumber int, /* Numéro de fin de document logique
*/
@a_id_EditionBatchPDFTransfert_RecordType tinyint, /* Identifiant d'un
type d'enregistrement de fichier PDF */
@a_id_EditionBatchPDFTransfert_Record bigint Output, /* Identifiant d'un
enregistrement de fichier PDF d'un lot d'édition */
@a_id_Error smallint Output, /* Identifiant d'une erreur */
@a_id_ErrorSeverity smallint Output, /* Niveau de sévérité de l'erreur
*/
@a_ErrorMessage varchar (500) Output /* Message lié à l'erreur */
AS
Declare @l_UseTransaction bit /* Indique si l'on peut utiliser les
transactions */
Declare @l_ReturnCode int /* Code de retour */
Declare @l_RecordNumberOfFront int /* Nombre de face de l'enregistrement
*/
Declare @l_UniqueIdentifier uniqueidentifier /* Identifiant unique */

Set @a_id_EditionBatchPDFTransfert_Record = 0
Set @a_id_Error = 0
Set @a_id_ErrorSeverity = 0
Set @l_ReturnCode = 0
Set @l_UseTransaction = 0
Set @l_RecordNumberOfFront = 0

Set @a_ErrorMessage = ''

If @a_IndexEndNumberPDFFile <> 0
Set @l_RecordNumberOfFront = @a_IndexEndNumberPDFFile -
@a_IndexStartNumberPDFFile + 1

/***************************************************************************/ /* Contrôle que les numéros de document logique se situent dans la tranche*/ /***************************************************************************/ If Exists ( Select * From TEditionBatchPDFTransfert_Sections Where id_EditionBatchPDFTransfert_Section =@a_id_EditionBatchPDFTransfert_Section And ( @a_LogicalDocumentBeginNumber < SectionBeginNumber Or @a_LogicalDocumentEndNumber > SectionEndNumber ) ) Begin Set @a_id_Error = 489 /* le numéro de document logique n'est pas situédans la tranche demandée */ Exec @l_ReturnCode = SPManageError @a_id_Error = @a_id_Error, @a_id_ErrorSeverity = @a_id_ErrorSeverity Output, @a_ErrorMessage = @a_ErrorMessage Output /* Si erreur ou niveau de sévérité de type erreur ou plus, on sort */ If @l_ReturnCode <> 0 Or @a_id_ErrorSeverity >= 3000 Return @l_ReturnCode End If @@Trancount = 0 Begin /* On ouvre une transaction */ Begin Transaction /* On précise que l'on peut utiliser les transactions */ Set @l_UseTransaction = 1 End /* On génère un identifiant unique */ Set @l_UniqueIdentifier = NewId () /* Création de l'enregistrement pour ce transfert */ Insert TEditionBatchPDFTransfert_Records ( id_EditionBatchPDFTransfert, RecordNumber, PDFFileName, IndexStartNumberPDFFile, IndexEndNumberPDFFile, rowguid, id_EditionBatchPDFTransfert_Section, LogicalDocumentBeginNumber, LogicalDocumentEndNumber, RecordNumberOfFront, id_EditionBatchPDFTransfert_RecordType ) Select @a_id_EditionBatchPDFTransfert, IsNull (Max(RecordNumber), 0) + 1, @a_PDFFileName, @a_IndexStartNumberPDFFile, @a_IndexEndNumberPDFFile, @l_UniqueIdentifier, @a_id_EditionBatchPDFTransfert_Section, @a_LogicalDocumentBeginNumber, @a_LogicalDocumentEndNumber, @l_RecordNumberOfFront, @a_id_EditionBatchPDFTransfert_RecordType From TEditionBatchPDFTransfert_Records Where id_EditionBatchPDFTransfert = @a_id_EditionBatchPDFTransfert /* Récupèration du code erreur */ Set @l_ReturnCode = @@Error /* Si erreur, on sort */ If @l_ReturnCode <> 0 Goto Erreur /* Récupèration de l'identifiant de l'enregistrement du transfert */ Select @a_id_EditionBatchPDFTransfert_Record =id_EditionBatchPDFTransfert_Record From TEditionBatchPDFTransfert_Records Where rowguid = @l_UniqueIdentifier/* /* Mise à jour de l'état de la tranche */ Update TEditionBatchPDFTransfert_Sections Set id_EditionBatchPDFTransfert_SectionState = 1 Where id_EditionBatchPDFTransfert_Section =@a_id_EditionBatchPDFTransfert_Section And id_EditionBatchPDFTransfert_SectionState <> 1 /* Récupèration du code erreur */ Set @l_ReturnCode = @@Error /* Si erreur, on sort */ If @l_ReturnCode <> 0 Goto Erreur /* On calcul le nombre de faces totales */ Select @l_RecordNumberOfFront = SUM (RecordNumberOfFront) From TEditionBatchPDFTransfert_Records Where id_EditionBatchPDFTransfert = @a_id_EditionBatchPDFTransfert If @l_RecordNumberOfFront IS NULL Set @l_RecordNumberOfFront = 0 /* On met à jour le nombre de face total */ Update TEditionBatchPDFTransfert Set TotalNumberOfFront = @l_RecordNumberOfFront Where id_EditionBatchPDFTransfert = @a_id_EditionBatchPDFTransfert /* Récupèration du code erreur */ Set @l_ReturnCode = @@Error /* Si erreur, on sort */ If @l_ReturnCode <> 0 Goto Erreur*/ /* Si l'on peut utiliser les transactions */ If @l_UseTransaction = 1 /* Pas d'Erreur : fin de la transaction */ Commit Transaction Return @l_ReturnCode /* Gestion de l'erreur */ Erreur: /* Si l'on peut utiliser les transactions */ If @l_UseTransaction = 1 /* On annule la transaction */ Rollback Transaction Return @l_ReturnCodeGoMerciStéphane"zoltix" a écrit dans le message de news: 19 jan, 12:16, "Test recherche" wrote:> Bonjour,> Je dispose d'un serveur SQL 2000 sous Windows 2003 server> Je rencontre des problèmes lors de l'execution de certaines procédures> stockées> l'erreur remontée est La transaction (ID du processus 272) a été bloquéesur> les ressources lock> Pourtant cette procédure ne fait rien d'exceptionnelle, elle récupère une> valeur dans une table, certe consutée,> insert un enregistrement dans une autre et récupère la valeur de> l'identifiant de l'enregistrement crée.> Tous ceci s'exécute au sein d'une transaction.>> Quand deux traitements s'éxecute en même temps, il y en a toujours un qui> plante en remontant cette erreur.> Est ce que quelqu'un aurait une idée pour éviter que cela se reproduise>> Merci d'avance> Très cordialement> StéphaneJ'aimerais voir ta procédure car ce sera plus facile.......mais tutravailles avec des curseurs(voici ma déclaration pour DECLAREcursor_name CURSOR LOCAL STATIC....)? peut être changer l'isolationdes tes requêtes ou la stratégie(-http://www.mssqlcity.com/Articles/Adm/SQL70Locks.htmSET TRANSACTION ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | REPEATABLE READ | SERIALIZABLE }SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDGODBCC USEROPTIONSGO