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

Administration SQL Server Discussion :

[2014] Consulter les erreurs d'exécution des requêtes


Sujet :

Administration SQL Server

  1. #1
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 421
    Points
    7 421
    Billets dans le blog
    1
    Par défaut [2014] Consulter les erreurs d'exécution des requêtes
    Bonjour,

    SQL Server garde-t-il la trace des erreurs d'exécutions SQL ?

    Par exemple, si une application lance un "insert" dans une PK et viole une clé primaire, peut-on retrouver quelque part, en dehors de l'application consommatrice, une trace de cette erreur ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    regarder dans sys.dm_os_ring_buffers avec ring_buffer_type = 'RING_BUFFER_EXCEPTION'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    declare @ts_now bigint
    select @ts_now = ms_ticks from sys.dm_os_sys_info
    select dateadd(ms, -1 * (@ts_now - [timestamp]), GetDate()) as EventTime, 
    cast(convert(xml, record) as char(8000)) as record
    from sys.dm_os_ring_buffers
    where ring_buffer_type='RING_BUFFER_EXCEPTION'
    GO

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    J'ajoute qu'un ring buffer est par définition limité en taille, donc il ne garde pas tout l'historique des erreurs mais seulement les 256 dernières entrées.

    HTH

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 421
    Points
    7 421
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse.

    Les 256 dernières entrées, c'est amplement suffisant.

    Je cherche à comprendre pourquoi un WebService provoque régulièrement des erreurs. A priori, c'est toujours la même, donc pas de souci.

    En revanche, j'ai un léger souci...

    Ta requête me retourne ça (les 3 dernières entrées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Record id="30" type="RING_BUFFER_EXCEPTION" time="239432185"><Exception><Task address="0x00000002713E68C8"/><Error>2627</Error><Severity>14</Severity><State>1</State><UserDefined>0</UserDefined><Origin>1</Origin></Exception><Stack><frame id="0">0X00007FFFE915B91A</frame><frame id="1">0X00007FFFEB41BC2D</frame><frame id="2">0X0000000069D78A40</frame><frame id="3">0X0000000069D70463</frame><frame id="4">0X00007FFFF966CED3</frame><frame id="5">0X00007FFFE9E6F517</frame><frame id="6">0X00007FFFE9E8CEBE</frame><frame id="7">0X00007FFFE9E8CCB9</frame><frame id="8">0X00007FFFE9E6A058</frame><frame id="9">0X00007FFFE9E6B66B</frame><frame id="10">0X00007FFFE9E6AC2E</frame><frame id="11">0X00007FFFE9E72267</frame><frame id="12">0X00007FFFE9E79087</frame><frame id="13">0X00007FFFE90F49D0</frame><frame id="14">0X00007FFFE90F47B4</frame><frame id="15">0X00007FFFE90F45B6</frame></Stack></Record>
    <Record id="29" type="RING_BUFFER_EXCEPTION" time="239432185"><Exception><Task address="0x00000002713E68C8"/><Error>2627</Error><Severity>14</Severity><State>1</State><UserDefined>0</UserDefined><Origin>0</Origin></Exception><Stack><frame id="0">0X00007FFFE911C8D9</frame><frame id="1">0X00007FFFECD7D56D</frame><frame id="2">0X00007FFFECD6350B</frame><frame id="3">0X00007FFFEC359E9B</frame><frame id="4">0X00007FFFEC165726</frame><frame id="5">0X00007FFFEC1655B6</frame><frame id="6">0X00007FFFEC16FE80</frame><frame id="7">0X00007FFFE95C1437</frame><frame id="8">0X00007FFFEC16E7CE</frame><frame id="9">0X00007FFFEC10B1D6</frame><frame id="10">0X00007FFFEC10B1D6</frame><frame id="11">0X00007FFFEC10E29D</frame><frame id="12">0X00007FFFEC12E6EF</frame><frame id="13">0X00007FFFE9E6F517</frame><frame id="14">0X00007FFFE9E8CEBE</frame><frame id="15">0X00007FFFE9E8CCB9</frame></Stack></Record>
    <Record id="28" type="RING_BUFFER_EXCEPTION" time="204136359"><Exception><Task address="0x0000000271604108"/><Error>2627</Error><Severity>14</Severity><State>1</State><UserDefined>0</UserDefined><Origin>1</Origin></Exception><Stack><frame id="0">0X00007FFFE915B91A</frame><frame id="1">0X00007FFFEB41BC2D</frame><frame id="2">0X0000000069D78A40</frame><frame id="3">0X0000000069D70463</frame><frame id="4">0X00007FFFF966CED3</frame><frame id="5">0X00007FFFE9E6F517</frame><frame id="6">0X00007FFFE9E8CEBE</frame><frame id="7">0X00007FFFE9E8CCB9</frame><frame id="8">0X00007FFFE9E6A058</frame><frame id="9">0X00007FFFE9E6B66B</frame><frame id="10">0X00007FFFE9E6AC2E</frame><frame id="11">0X00007FFFE9E72267</frame><frame id="12">0X00007FFFE9E79087</frame><frame id="13">0X00007FFFE90F49D0</frame><frame id="14">0X00007FFFE90F47B4</frame><frame id="15">0X00007FFFE90F45B6</frame></Stack></Record>
    Je décode ça comment ?
    Car là, j'ai pas la moindre idée de quoi faire de ces messages

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 421
    Points
    7 421
    Billets dans le blog
    1
    Par défaut
    Pour le numéro de l'erreur, ça correspond bien à ce que je pensais : 2627 => Violation de clé unique.

    Cependant, comment savoir quel code SQL à provoqué l'erreur ?

    Je sais que c'est une PS (mais laquelle ?).
    J'aimerais savoir son nom et si possible les valeurs passées en paramètre.

  6. #6
    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
    Pour cela tu peux utiliser 2 sessions d'événements étendues avec d'un côté une session A avec l'événement error_reported et ton numéro d'erreur avec l'activation de l'option TRACK_CAUSALITY
    De l'autre côté une autre session A avec l'événement RPC_Completed et un filtre assez restrictif de préférence (base de données et autre si possible ...) avec l'option TRACK_CAUSALITY.

    Il te suffit après de corréler les événements trouvées dans la session A et celles de la session B

    ++

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 862
    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 : 21 862
    Points : 53 012
    Points
    53 012
    Billets dans le blog
    6
    Par défaut
    À mon avis le code de votre web service doit "calculer" une clé avant d'insérer des données et votre développeur à juste dû oublier que des accès parallèles peuvent être effectués... D’où télescopage fréquent de valeurs identiques.
    Transformez ce web service pour appeler une procédure stockée et utilisez un niveau d'isolation approprié entre REPEATBLE READ et SERILIZABLE.

    A +

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 421
    Points
    7 421
    Billets dans le blog
    1
    Par défaut
    J'ai fini par comprendre le souci, et je l'ai corrigé.

    En fait, avant d'insérer les données, il y avait une procédure de recherche qui vérifiait l'existence de la donnée (enfin, c'est un peu plus complexe, mais dans les grandes lignes).

    Et il y a deux tables assez similaire qui selon le contexte sont utilisée pour faire des jointures. Pas de chance, dans procédure appelait la mauvaise table, et ne trouvait pas une donnée qui en réalité existait bel et bien !

    Merci à Visual Studio qui a bien voulu faire tourner mon WebService en mode pas à pas !

Discussions similaires

  1. [AOP] Logger les temps d'exécution des requêtes
    Par HadanMarv dans le forum Spring
    Réponses: 2
    Dernier message: 17/11/2014, 10h39
  2. Erreur OEM 10gR2 - Temps d'exécution des requêtes
    Par fabien.morel2002 dans le forum Administration
    Réponses: 0
    Dernier message: 30/11/2009, 16h00
  3. Réponses: 4
    Dernier message: 06/06/2008, 19h22
  4. exécuter des requêtes tout les X jours
    Par Hypnocrate dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/10/2007, 11h37
  5. récupérer les erreurs php dans des exceptions
    Par jeanvincent dans le forum Langage
    Réponses: 6
    Dernier message: 14/10/2005, 16h26

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