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 :

[SQL SERVER 2005] équivalent Lock table


Sujet :

MS SQL Server

  1. #1
    Membre confirmé Avatar de valoji
    Inscrit en
    Septembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Septembre 2005
    Messages : 124
    Par défaut [SQL SERVER 2005] équivalent Lock table
    Bonjour,

    je suis en train de migrer mes applis sous informix vers SQL server 2005.

    Mon problème c'est que je ne trouve pas d'équivalence lock table sous SQL SERVER

    Voilà mon code qui fonctionnait trés bien sous informix :
    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
    try
        with (Query_General) do
        begin
          close;
          sql.clear;
          sql.add('LOCK TABLE imlim IN SHARE MODE');
          if not (prepared) then
          begin
            prepare;
          end;
          execsql;
        end;
      except
        on E:Exception do
        begin
          AfficheSedIncident('CLO01 -> ', E.Message, 0, 0);
        end;
      end;
    Valoji.
    Vista pro
    SQL SERVER 2005
    Delphi 2007

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Vous devez le faire explicitement pour chaque table dans la requête... Mais quel est l'intérêt de cela ? En général lorsqu'une requête est lancée il y a un verrou automatiquement de posé !

    Approfondissez votre demande...

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

  3. #3
    Membre confirmé Avatar de valoji
    Inscrit en
    Septembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Septembre 2005
    Messages : 124
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Vous devez le faire explicitement pour chaque table dans la requête... Mais quel est l'intérêt de cela ? En général lorsqu'une requête est lancée il y a un verrou automatiquement de posé !

    Approfondissez votre demande...

    A +
    Bonjour,

    J'ai besoins de bloquer mes tables le temps de mon traitement.
    J'ai une dizaine de tables qui sont utilisées par plusieurs modules, et il faut absolument que je bloque ces tables afin d'éviter de nouveaux enregistrements par d'autres utilisateurs.
    Lorsque je lance ma transaction (je suis d'accord qu'un verrou est posé). Mais pour les tables où je fait un select rien n'empêche à un autre utilisateur de créer un enregistrement sur celle-ci.

    Vous devez le faire explicitement pour chaque table dans la requête...
    D'accord, mais comment faire ??? car SQL SERVER n'accepte pas LOCK TABLE

    Merci pour votre aide,
    Valoji

  4. #4
    Membre confirmé Avatar de valoji
    Inscrit en
    Septembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Septembre 2005
    Messages : 124
    Par défaut
    Bonjour,

    J'ai trouvé la solution : http://sqlpro.developpez.com/cours/s...r/transactsql/

    Le verrouillage est la technique de base pour assurer les concurrences d'accès aux ressources.
    On peut observer les verrous posés lors des manipulations de données à l'aide de la procédure stockée sp_lock. De même on peut savoir qui utilise quoi à l'aide de la procédure stockée sp_who.


    SQL Server pose en principe les bons verrous lors des requêtes. Mais il peut arriver que l'on souhaite :


    soit se débarrasser des contraintes de verrouillage, notamment pour faire du "dirty read" (lecture seule)
    soit poser des verrous plus contraignant pour s'assurer du traitement
    Dans les deux cas il faut compléter les ordre SQL par une description des verrous attendus.


    Voici les paramètres de verrouillage que l'on peut spécifier :

    Verrou
    NOLOCK aucun verrou
    HOLDLOCK maintient du verrou jusqu'à la fin de la transaction
    UPDLOCK pose un verrou de mise à jour au lieu d'un verrou partagé
    PAGLOCK force la pose d'un verrou de page
    TABLOCK force un verrou partagé sur la table
    TABLOCKX force un verrou exclusif sur la table pendant toute la durée de la transaction

    Ces paramètres se précisent dans un ordre SQL après le nom de la table et le mot clef WITH en utilisant le parenthèsage.

  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 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Non, ce n'est pas comme cela qu'il faut agir. Il faut de préférence utiliser la notion d'isolation des transactions, en particulier dans votre cas, si vous avez peur de l'ajout d'une ligne au niveau SERIALIZABLE.

    La page que vous avez données est une de celles que j'ai écrite. Mais le recours au verrous explicites ne doit être fait qu'en dernière instance.

    Si vous nous donniez tout le mécanisme de cette transaction, nous pourrions vous conseiller plus en avant !

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

Discussions similaires

  1. [SQL Server 2005] Exec et Table temporaire
    Par nox75 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/09/2008, 18h03
  2. Réponses: 2
    Dernier message: 13/04/2007, 13h37
  3. [SQL SERVER 2005] Exporter une table en Access
    Par Golzinne dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/03/2007, 17h08
  4. [SQL SERVER 2005] Ouvrir une table en exclusif
    Par olbi dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 02/03/2007, 18h58
  5. [SQL Server 2005] création de table
    Par LeNeutrino dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/11/2006, 14h38

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