IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Triiger DeadLock Stop trigger


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Triiger DeadLock Stop trigger
    Bonjour

    Je fais mes premiere tentative d'usage d'un trigger ett il me semble avooir reussi a creer un DeadLock

    Toute les tables de la DB intervenant dans le trigger son inaccessible depuis SSMS (Querry s'execute sans fin)
    Pas de problème pour les autres tables

    - Est il possible de debuguer un triger ?
    - Peut on savoir s'il s'est exectuté ou s'il a généré un probleme

    Voici la Syntaxe de mon Trigger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    USE [Clark]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[tg_Total]
    	ON  [Clark].[dbo].[BakMove]
    AFTER INSERT
    AS 
    BEGIN
    	SET NOCOUNT ON
     	IF EXISTS
    	(
    		SELECT	*
    		FROM	inserted
    		WHERE	TotalStatus = 9
    	)
    	BEGIN
    		EXEC Clark.dbo.sp_DoTotal NULL,9;
    		EXEC Clark.dbo.sp_ClarkMail;
    	END
    END
    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Oui vous pouvez utiliser le profiler pour votre déboggage avec les événements qui concernent l'éxecution de votre code + deadlock.

    Locks : Deadlock
    Locks : Deadlock chain
    TSQL: StmtCompleted
    SP : Completed
    ...

    ++

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Postez le code de vos proc :
    Clark.dbo.sp_DoTotal
    Clark.dbo.sp_ClarkMail

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Postez le code de vos proc :
    Clark.dbo.sp_DoTotal
    Clark.dbo.sp_ClarkMail
    Merci SqlPro
    Je n'ai pas acces au server ce matin je les posterai cet apres-midi
    Hier j'ai fini par stopper le service MS Sql pour le relancer (il prenait 100% du CPU)

    J'ai donc supprimé le trigger et ajouté l'appel des deux procedures stockées depuis l'application et ca ne pose pour le moment pas de souci ?

    Ce que je soupconne c'est que l'application genere en boucle une suite d'insert unitaire pour chaque record a inserer dans la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO ...;
    INSERT INTO ...;
    INSERT INTO ...;
     
    -- Plutot qu'un seul insert avec la liste des de chaque row
    INSERT INTO 
    (fields)
    (values..........);
    Meme si ca ne fait qu'une dizaine de row avec deux déclencheur ça a peut etre donné la migraine au trigger

  5. #5
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Un déclenchement en boucle infini de vos TRIGGERS semble plus probable...

    A voir avec le code de vos SP...

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonjour

    Merci de votre aide
    Voici le code des SP

    Mais j'ai aussi contaté que le trigger je j'avais mis en place a une petite nuance de code qui peut etre de taille... Ca peut expliquer la boucle ?

    J'avais écris : (sans les point virgule à la fin des deux EXEC)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BEGIN
    	EXEC Clark.dbo.sp_DoTotal NULL,9
    	EXEC Clark.dbo.sp_ClarkMail
    END
    Voici donc les deux sp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    USE [Clark]
    GO
    /****** Object:  StoredProcedure [dbo].[sp_ClarkMail]    Script Date: 03/09/2011 18:46:56 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[sp_ClarkMail]
    AS
    BEGIN
     
    IF NOT EXISTS 
       (
         SELECT * FROM [TotalChauffeur]
         WHERE  MailStatus=0
        ) 
        RETURN;
     
     
    EXEC msdb.dbo.sysmail_start_sp;
     
    EXEC msdb.dbo.sp_send_dbmail
        @recipients = 'oxg@skynet.com;bartmissa@wareever.com;machin@recutex.com',
        @query = 'SELECT *  FROM [Clark].[dbo].[TotalChauffeur] 
        WHERE CAST(DATE AS DATE)=CAST(GETDATE() AS DATE)
        OR MailStatus=0' ,
        @subject = 'Chauffeur Gedaan !',
        @attach_query_result_as_file = 0 ;
     
       UPDATE [Clark].[dbo].[TotalChauffeur]
       SET MailStatus=1
       WHERE CAST(DATE AS DATE)=CAST(GETDATE() AS DATE)
       OR MailStatus=0;
     
     
    END
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    USE [Clark]
    GO
    /****** Object:  StoredProcedure [dbo].[sp_DoTotal]    Script Date: 03/09/2011 18:47:48 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
    ALTER PROCEDURE [dbo].[sp_DoTotal]
       @ChauffeurID  int,
       @TotalType  int
    AS
    BEGIN
    INSERT INTO Clark.dbo.TotalChauffeur 
    (ChauffeurID,
     ChauffeurName,
     Date,
     Gewicht)
    SELECT ChauffeurID
          ,ChauffeurName
          ,MAX(Date)
          ,SUM(bruto)-sum(tarra)
      FROM 
      Clark.dbo.BakMove
      WHERE ChauffeurID IN (SELECT DISTINCT COALESCE(@ChauffeurID, ChauffeurID) 
                            FROM   BakMove 
                            WHERE  TotalStatus=CASE @TotalType
                                                  WHEN 0 THEN 0
                                                  WHEN 9 THEN 9
                                                  ELSE 0
                                               END)
      GROUP BY ChauffeurID
              ,ChauffeurName
              ,Cast(Date AS DATE)
    END
    BEGIN
    UPDATE
     Clark.dbo.BakMove
      SET TotalStatus=1
      WHERE ChauffeurID IN (SELECT DISTINCT COALESCE(@ChauffeurID, ChauffeurID) 
                            FROM   BakMove 
                            WHERE  TotalStatus=CASE @TotalType
                                                  WHEN 0 THEN 0
                                                  WHEN 9 THEN 9
                                                  ELSE 0
                                               END)
     
    END
              return;

Discussions similaires

  1. Trigger deadlock alter session
    Par tropiko dans le forum Oracle
    Réponses: 9
    Dernier message: 13/12/2012, 10h11
  2. Trigger d'alerte (email ou non) sur deadlock
    Par 2nd Floor dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 31/10/2012, 16h11
  3. Trigger et Deadlock
    Par inh40 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 28/12/2007, 13h39
  4. Procédure stockée déclenchant un trigger et Deadlock
    Par elsuket dans le forum Développement
    Réponses: 1
    Dernier message: 16/07/2007, 14h08
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo