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

Développement SQL Server Discussion :

Transaction et blocage


Sujet :

Développement SQL Server

  1. #1
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut Transaction et blocage
    Bonjour,

    Une petite question au niveau des transactions.
    Dans une application Windev, lors de l'ouverture d'une fenêtre en modification de données, je lance une transaction et je bloque l'enregistrement WITH (UPDLOCK,ROWLOCK).
    Mes autres enregistrements sont disponibles en lecture et en modification, et l'enregistrement modifié peut être lue mais pas modifié.
    Lorsque j'effectue la mise à jour de cette enregistrement (UPDATE) tant que je n'effectue pas le COMMIT TRANSACTION je ne peux pas accéder à celui-ci en modification mais aussi en lecture.
    Pourquoi j'arrive à le lire avant la mise à jour mais pas après ?
    Aucune aide par MP, utilisez le forum.

  2. #2
    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
    Bonjour,

    UPDLOCK représente un verrou de type U qui est une intention de poser un verrou exclusif pour la mise à jour des données. Ce type de verrouillage prémuni les données contre les autres tentatives de verrous de même type ou exclusif.

    Cependant lorsque vous mettez à jour vos données, ce verrou se transforme en verrou exclusif (X). Ce type de verrou empêche l'accès aux données concernées (sauf si vous effectuez des lectures sales avec le mode d'isolation READUNCOMMITED ou avec un hint nolock).

    Si vous ne validez pas votre transaction ce verrou est maintenu. C'est la raison pour laquelle vous ne pouvez plus accéder à vos données à ce moment.

    ++

  3. #3
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    On ne peux pas effectuer une mise à jour et rester en verrou de type U ?
    Aucune aide par MP, utilisez le forum.

  4. #4
    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
    Non et heureusement ....

    Si une telle chose était permis il serait impossible de respecter les propriétés ACID d'une transaction.

    ++

  5. #5
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Donc je n'ai aucune possibilité de lecture de cette enregistrement tant qu'il n'est pas "COMMIT" ?
    Aucune aide par MP, utilisez le forum.

  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
    Si vous pouvez utiliser le mode d'isolation qui permet les lectures impropes ou sales ... ou le HINT nolock


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    -- Niveau d'isolation READ UNCOMMITED
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
     
    SELECT * FROM maTable;
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    -- Query hint
    SELECT * FROM maTable (nolock)

    Cependant faites attention avec cela car vous allez au devant de problèmes de cohérence de données si vous ne maitrisez pas ce que vous faites

    ++

  7. #7
    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 : 42
    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
    Ou tout simplement ne pas utiliser d'indicateur de requête.

    SQL Server gère les modifications de données tout seul comme un grand, et il est plus au courant que vous (si si) de la meilleure stratégie de verrouillage à utiliser.

    Une autre possibilité est d'utiliser le niveau d'isolation de transaction REPEATABLE READ ou SERIALIZABLE ... mais bannissez ces indicateurs de requête !

    @++

Discussions similaires

  1. [2008R2] Blocage de transaction
    Par Fredo02 dans le forum SSIS
    Réponses: 6
    Dernier message: 23/01/2012, 19h10
  2. blocage (transaction verouillée)
    Par morados dans le forum Développement
    Réponses: 6
    Dernier message: 05/12/2011, 10h45
  3. Blocage de transaction (NOLOCK ?)
    Par Liloye dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/05/2010, 09h01
  4. blocage d'une transaction
    Par richard038 dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/11/2005, 12h00
  5. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21

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