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 :

Problèmes de lock sur les tables [2008R2]


Sujet :

MS SQL Server

  1. #1
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut Problèmes de lock sur les tables
    Bonjour à tous,

    Notre société utilise un logiciel de gestion en relation avec une base SQL Server. Cela fait des années que tout fonctionne relativement bien.
    Or depuis vendredi, très régulièrement nous ne pouvons plus valider des enregistrements dans différentes tables (articles, nomenclatures, commandes...). Le message d'erreur est le suivant: "L'enregistrement est actuellement locké".
    Y-a-t-il un moyen pour trouver ce qui ne va pas?

    Merci d'avance
    Xavier

  2. #2
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    bonjour

    Utiliser sql profiler pour détecter les locks

    ou même avec les événements étendu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT session_id,start_time,wait_time,status,wait_type,command,blocking_session_id,transaction_id   
    FROM sys.dm_exec_requests  
    WHERE blocking_session_id <> 0
    Images attachées Images attachées   

  3. #3
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Bonjour, j'ai testé, mais je n'obtiens aucune info, alors que je suis toujours bloqué.
    Xavier

  4. #4
    Membre confirmé
    Homme Profil pro
    Expert SQL Server
    Inscrit en
    Août 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Expert SQL Server

    Informations forums :
    Inscription : Août 2009
    Messages : 61
    Points : 454
    Points
    454
    Par défaut
    Bonjour

    En temps réel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from sys.dm_tran_locks combiné avec sessions, requests et query_plan
    ou bien à postériori :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from sys.dm_db_index_operational_stats
    pour déterminer les objects ayant supporté les plus longues attentes sur le verrouillage.

    Cdlt
    Christophe
    Christophe LAPORTE | Independent Consultant & Trainer
    SQL Server Certified Master | Azure Solution Architect

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 774
    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 774
    Points : 52 746
    Points
    52 746
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Asdorve Voir le message
    Le message d'erreur est le suivant: "L'enregistrement est actuellement locké".
    Y-a-t-il un moyen pour trouver ce qui ne va pas?
    Lorsque vous êtes bloqué, lancez la requête suivante :

    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
    WITH 
    T_SC AS
    (
    SELECT s.session_id, s.database_id, db.name AS DATABASE_NAME,
    	   s.host_name, s.program_name, s.login_name, s.nt_domain, s.nt_user_name, 
    	   c.client_net_address, c.client_tcp_port, q.text AS QUERY_TEXT
    FROM   sys.dm_exec_sessions AS s
    	   INNER JOIN sys.dm_exec_connections AS c
    	   	    ON s.session_id = c.session_id
           OUTER APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) AS q
    	   INNER JOIN sys.databases AS db
    	         ON s.database_id = db.database_id
    ),
    T_BK AS
    (
    SELECT DATEDIFF(second, start_time, GETDATE()) AS SECOND_DURATION_REQUEST,
           DATEDIFF(second, transaction_begin_time, GETDATE()) AS SECOND_DURATION_TRANSACTION, 
    	   r.session_id, r.blocking_session_id,
    	   r.start_time, r.status, r.command, r.open_transaction_count
    FROM   sys.dm_exec_requests AS r
           LEFT OUTER JOIN sys.dm_tran_session_transactions AS st
    	        ON r.session_id = st.session_id
           LEFT OUTER JOIN sys.dm_tran_active_transactions AS at
    	        ON st.transaction_id = at.transaction_id
    WHERE  r.blocking_session_id > 0
      AND  DATEDIFF(second, transaction_begin_time, GETDATE()) > 3
    )
    SELECT 'BLOQUÉ' AS STATUT, SECOND_DURATION_REQUEST, SECOND_DURATION_TRANSACTION, 
           blocking_session_id, start_time, status, command, open_transaction_count, 
    	   T_SC.*, '' AS KILL_COMMAND
    FROM   T_BK JOIN T_SC ON T_BK.session_id = T_SC.session_id
    UNION ALL
    SELECT 'BLOQUANT' AS STATUT, NULL, NULL, NULL, NULL, NULL, NULL, NULL, T_SC.*,
           'KILL ' + CAST(T_SC.session_id AS VARCHAR(16)) + ';'
    FROM   T_BK JOIN T_SC ON T_BK.blocking_session_id = T_SC.session_id
    ORDER  BY SECOND_DURATION_TRANSACTION DESC;
    Ceci vous dira qui bloque qui...

    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/ * * * * *

  6. #6
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    ok, merci.
    Je viens de trouver ce qui pose problème.

    En fait, le responsable informatique avait insérer un bout de code dans le logiciel avec un requête qui lock la base.
    Le problème semble donc résolu.

    Merci pour votre aide.
    Xavier

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Asdorve Voir le message
    En fait, le responsable informatique avait insérer un bout de code dans le logiciel avec un requête qui lock la base.
    Du coup c'est l'ex responsable

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/01/2010, 08h50
  2. [MYSQL] Commentaires sur les tables et les champs
    Par luc2verga dans le forum Requêtes
    Réponses: 10
    Dernier message: 29/05/2007, 23h49
  3. Problème de requêtes sur deux tables
    Par Pymm dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 09h06
  4. verrous sur les tables
    Par rv66 dans le forum Paradox
    Réponses: 2
    Dernier message: 04/09/2005, 20h15
  5. Faire un Lock sur une table pendant l'exec d'un DTS
    Par Pete dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/03/2005, 14h17

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