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 :

Cet élément est en cours d'utilisation. :(


Sujet :

Administration SQL Server

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Cet élément est en cours d'utilisation. :(
    Bonjour à tous

    Tout d'abord, merci pour tout ce que j'ai appris grâce à ce forum depuis des années.

    Si je prend la plume virtuelle c’est que je n’ai pas réussi à trouver mon bonheur cette fois.


    Je cherche à identifier les logins windows qui me bloque l’accès à certaines tables.

    Par exemple à la table F_DOCENTETE.

    Je sais identifier la liste des documents ouverts grâce à cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DECLARE
    	@lBase int,
    	@lTable int,
    	@lRes int
     
    SELECT @lBase = DB_ID()
    SELECT @lTable = OBJECT_ID(@cbFile)
    EXECUTE master..xp_CBIsRecordLock @@SPID,@lBase,@lTable,@cbMarq,@lRes OUTPUT
    RETURN @lRes
    Je peux savoir qui se cache derrière un processus, mais il faut que je connaisse son ID.
    Je pourrais me servir d'une requête dans ce genre-là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NT_USERNAME,* FROM MASTER..SYSPROCESSES WHERE spid = @@SPID
    Bref, je sais quels documents sont bloqués.
    Je sais comment identifier si j’ai l’ID, mais je ne sais pas identifier qui bloque quoi ou qui est sur quoi.

    Une idée ?

    Précision d'importance, il faut que cela fonctionne sous SQL2000.

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

    Sous SQL Server 2000, la seule solution me semble de requêter la table master.dbo.sysprocesses.

    Sous SQL Server 2005 et 2008, vous pouvez utilisez les vues et fonctions de gestion dynamiques :
    - sys.dm_exec_sessions
    - sys.dm_exec_connections
    - sys.dm_exec_requests
    - sys.dm_exec_sql_text

    Pour savoir quelle tâche en bloque d'autres, et extraire l'instruction en cours d'exécution qui provoque le bloquage

    @++

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci de votre réponse déjà.

    Je n'ai que SQL2000 à disposition, donc je ne peux utiliser que master.dbo.sysprocesses

    J'ai regardé, on ne voit pas quelle table est en cours d'utilisation.

    J'ai l'impression que je ne suis pas en face d'un vrai blocage, mais plutôt
    d'un système de flag qui verrouille la ligne sans utiliser les blocages SQL.

    La colonne "blocked" est à 0 partout dans master.dbo.sysprocesses.

    Je cherche comment savoir qui utilise quoi et je ne vois pas.

  4. #4
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Est ce que sp_lock repond a votre attente ?

    http://msdn.microsoft.com/en-us/libr...4(SQL.80).aspx

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Non, malheureusement.

    Ni
    ou
    Merci quand même.

    Je soupçonne qu'il y ai une information mémorisée quelque part
    dans une table spécifique, mais je ne sais pas où.

    Cette base, est une base Sage.
    Elle utilise des verrous qui ne sont pas des blocages SQL.

    Ce n'est pas gagné mon histoire.

    Bref, je craint que je n'aurais pas de réponses vu que les verrous
    sont spécifiques.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 741
    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 741
    Points : 52 454
    Points
    52 454
    Billets dans le blog
    5
    Par défaut
    je pense que vous confondez verrous et privilèges d'exécution.

    Un privilège est la possibilité pour un utilisateur d'accéder à telle ou telle table ou vue pour une commande SQL précise (SELECT, UPDATE, INSERT, DELETE). Lisez ce que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/sqlaz/dcl/

    Un verrou est un mécanisme interne au moteur destiné à protéger l'accès à la ressource (ligne, page, table....) le temps d'une lecture ou d'une mise à jour.

    Sous SAGE les tables sont protégées de la mise à jour par des mécanismes de CHECKSUM spécifique afin des les bidouilleurs n'aillent pas foutre la m... en polluant les données. Ceci pour des questions de responsabilité juridiques parfaitement justifiées.

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

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci de votre réponse.

    Non, je ne confond pas.

    Mon besoin est assez simple.

    Quand un utilisateur est sur un document précis, aucun autre ne
    peut y accéder.

    Même pas pour le lire...

    Mon but est d'arriver à identifier qui est l'utilisateur qui bloque le document
    afin de lui demander de sortir au plus vite.

    Là, en l'état, dans une entreprise, il faut téléphoner à tous les utilisateurs
    de Sage pour savoir qui est sur le document qu'on veut ouvrir.

    Dès que le "bloqueur" ferme son document, on peut y accéder.
    Mais il faut savoir qui c'est.
    Il n'est pas question de faire des bidouilles, mais simplement de faire une liste.

    Je ne pense pas que ce soit les privilèges dans ce cas.
    Car dès que le document est fermé, on y a accès.

    J'ai mis un traceur dans la base et je n'ai trouvé que des appels à des DLL
    spécifique à Sage, donc pas d'info après cela.

  8. #8
    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
    Citation Envoyé par SQLpro Voir le message
    Sous SAGE les tables sont protégées de la mise à jour par des mécanismes de CHECKSUM spécifique afin des les bidouilleurs n'aillent pas foutre la m...
    A +
    Je ne vois vraiment pas la suite

    Bref redevenons sérieux. Comme vous le dites vous n'êtes pas dans un cas de verrou posé par le moteur SQL. J'ai eu l'occasion de travailler avec un logiciel qui faisait exactement ce que vous voulez. Pour pouvoir faire cela, l'information était trappée dans la base avec l'ID du document, l'ID et le nom de l'utilisateur.

    Dans votre cas il serait bon d'ajouter cette information en rajoutant une colonne par exemple à votre table ...

    ++

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    La procédure qui met le lock Sage est ci-dessous.

    On voit que l'ID utilisateur est utilisé effectivement.
    Ainsi que le nom de la base et de la table.


    Code sql : 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
    CREATE PROCEDURE [dbo].[CB_LockRecord] @cbFile sysname, @cbType smallint, @cbMarq int AS 
    BEGIN
    	DECLARE 
    		@lBase int,
    		@lTable int,
    		@lRes int
     
    	SET NOCOUNT ON
    	SELECT @lBase = DB_ID()
    	SELECT @lTable = OBJECT_ID(@cbFile)
    	EXECUTE @lRes = master..xp_CBLockRecord @@SPID,@lBase,@lTable,@cbType,@cbMarq
    	IF @lRes <> 0
    	BEGIN
    		RAISERROR(@lRes,11,1) WITH SETERROR
    		RETURN
    	END
    END


    Je continue mes recherches.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 741
    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 741
    Points : 52 454
    Points
    52 454
    Billets dans le blog
    5
    Par défaut
    xp_CBLockRecord est une procédure étendue codée en C++ et probablement éditée par SAGE afin de protéger les éléments de la base des mauvaises intentions des utilisateurs....

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

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    J'ai appelé Sage l'éditeur (je travaille pour un revendeur)

    Ils me disent que ce n'est pas eux qui ont créer xp_CBLockRecord, mais
    qu'ils l'utilisent dans leurs traitements de verrous.

    Ils ont une procédure dans chaque base qui appelle xp_CBLockRecord de la base master.

    Ils disent qu'ils ne savent pas ou vont les données gérer par cette procédure
    de la base master.

    Bref, j'ai une solution.

    Je peux au moment de l'appel de cette procédure ajouter un petit
    traitement spécifique qui mémorise les données dans une table spécifique.

    Mais je n'aime pas trop cela.

    Ca équivaut à modifier une procédure stockées de l'éditeur.

  12. #12
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Vous pouvez penser a executer la procedure en tournant une trace sur votre serveur. De ce fait, vous parviendrez peut etre a voir ce qu'il se passe en coulisses.

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Déjà fait.

    Appel de la procédure Sage de la base en cours nommé CB_LockRecord

    Procédure qui appelle elle-même xp_CBLockRecord de la base Master.

    Après, aucune info...

  14. #14
    Futur Membre du Club
    hotliner niv 2 gescom et bases de données
    Inscrit en
    Avril 2006
    Messages
    4
    Détails du profil
    Informations professionnelles :
    Activité : hotliner niv 2 gescom et bases de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut même pb
    J'ai exactement le même pb avec une Gescom Sage 100

    Mon client se retrouve d'un seul coup avec plein de commandes impossibles à ouvrir. J'ai le message "ce document est en cours d'utilisation".

    Si tous les utilisateurs quittent l'appli, les commandes redeviennent "ouvrables", mais il y a 30 utilisateurs et certains sur des sites distants.

    J'aimerais moi aussi savoir comment retrouver l'utilisateur qui bloque.

Discussions similaires

  1. La ressource demandée est en cours d'utilisation
    Par Romantic_a dans le forum IIS
    Réponses: 0
    Dernier message: 29/05/2008, 18h36
  2. [SQL] Tester si un fichier est en cours d'utilisation
    Par obordelow dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/04/2007, 15h07
  3. Réponses: 14
    Dernier message: 07/07/2006, 17h27
  4. Réponses: 1
    Dernier message: 31/03/2006, 12h24
  5. savoir si un module est en cours d'utilisation
    Par stoyak dans le forum Bioinformatique
    Réponses: 4
    Dernier message: 22/02/2006, 13h07

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