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 :

Trigger d'alerte (email ou non) sur deadlock


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 64
    Points : 20
    Points
    20
    Par défaut Trigger d'alerte (email ou non) sur deadlock
    Bonjour à tous,
    J'aurais besoin de vos lumières pour créer un trigger d'alerte (avec email ou non) lors de la présence d'un deadlock sur ma base SQL SERVER 2008 R2.

    J'ai lu tellement de choses que je préfererais avoir l'avis de professionnels comme les experts de Developpez.com ou autre membre confirmé.

    Merci beaucoup,
    Gwenael

  2. #2
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Sous SQL Server 2008 et + ; tu peux utiliser XEvents pour déclencher ton alerte.
    La requête ci-dessous renvoie un fichier XML montrant les requêtes responsables des deadlocks. Pour plus d'infos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE @xml xml 
    SELECT @xml = CAST(st.target_data as xml) 
    FROM sys.dm_xe_session_targets st 
    INNER JOIN sys.dm_xe_sessions s on s.address = st.event_session_address 
    INNER JOIN sys.server_event_sessions es on s.name = es.name 
    WHERE s.name = 'system_health' AND st.target_name = 'ring_buffer' 
    -- and convert(varchar(8),s.create_time,112) = '20120422' -- cibler une date particulière 
    SELECT @xml.query('/RingBufferTarget/event [@name="xml_deadlock_report"]')

  3. #3
    Expert éminent sénior
    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 : 45
    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
    Points : 12 891
    Points
    12 891
    Par défaut
    Une autre voix :

    Utiliser les Events SQL Server et l'événement DEADLOCK_GRAPH

    >> http://msdn.microsoft.com/en-us/library/ms186385.aspx

    Les Xevents sont un bon moyen également de retrouver cela mais attention car avec 2008 le XML généré par les Xevents n'est pas généré correctement. De plus pour capturer les deadlocks via Xevent je conseille de ne pas utiliser la session 'system_health' qui ne permet pas forcément de garder les événements assez longtemps pour les capturer de façon durable.

    ++

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 64
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup pour vos réponses, je vais regarder tout cela.
    Bon week-end à tous

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Si l'on souhaite simplement être alerté lors de l’occurrence d'un verrou mortel (c'est à dire sans les détails des ressources impliquées dans celui-ci), on peut tout simplement mettre en place une alerte de l'Agent SQL Server :

    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
    USE [msdb]
    GO
     
    -- Ajout d'un opérateur
    -- En fait, c'est un pointeur sur une addresse e-mail
    EXEC msdb.dbo.sp_add_operator
    	@name = N'Deadlock_Operator'
    	, @enabled = 1
    	, @pager_days = 0
    	, @email_address = N'deadlock_operator@deadlock.com'
    GO
     
    -- Ajout d'une alerte sur verrou mortel
    EXEC msdb.dbo.sp_add_alert
    	@name = N'Deadlock'
    	, @message_id = 1205
    	, @severity = 0
    	, @enabled = 1
    	, @delay_between_responses = 0
    	, @include_event_description_in = 1
    GO
     
    -- Attachement de l'opérateur à l'alerte
    EXEC msdb.dbo.sp_add_notification
    	@alert_name = N'Deadlock'
    	, @operator_name = N'Deadlock_Operator'
    	, @notification_method = 1
    GO
    Si la fonctionnalité de Messagerie de Bases de Données est activée, ce qui semble être le cas, c'est du gâteau.

    On peut aussi créer une notification d’évènements, à l'aide de l'événement DEADLOCK_GRAPH, mais la mise en route de Service Broker et la création de la queue, du service et de la notification me semble un peu lourde pour ce faire.

    Si on souhaite en plus avoir les détails, on peut créer une trace SQL Trace côté serveur qui capture tous les deadlocks, et les enregistre dans un fichier de trace.
    On peut tout à fait se limiter à exécuter simplement le script généré avec SQL Server Profiler directement, sans utiliser un travail de l'Agent SQL Server qui enregistrera ceux-ci dans une table à intervalles réguliers. Ainsi lors de la réception de l'alerte, il suffit d'ouvrir le fichier de trace avec SQL Profiler, et le tour est joué.

    @++

Discussions similaires

  1. lien marche sur internet explorer et non sur autre
    Par xman_genius dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/04/2006, 18h11
  2. Réponses: 5
    Dernier message: 06/04/2006, 11h46
  3. connaitre l email par défault sur le pc
    Par hutchuck dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/11/2005, 11h32
  4. OpenGL Texture qui se charge sous Linux et non sur DevCpp
    Par white_angel_22 dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/10/2005, 18h29
  5. Réponses: 2
    Dernier message: 07/07/2005, 08h31

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