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 :

Déconnecter des sessions actives


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut Déconnecter des sessions actives
    Bonjour,

    Je gère une base de donnée utilisée par une centaine d'opérateurs via des applicatifs access codés en vba.
    Chaque applicatif fait appel a un fichier contenant des fonctions communes.

    Quand j'ai besoin de faire des modifications dans ce fichier je dois forcer la déconnexion de tous les utilisateurs. Je fais ceci via une commande vba qui est contenu dans chaque applicatif et qui reboucle régulièrement sur une variable contenu dans une table. Quand cette variable est false, l'applicatif reste ouvert, quand elle est true l'applicatif se ferme.
    Cependant quand un utilisateur vérouille sa session windows tout en laissant l'applicatif ouvert, la macro de déconnection ne fonctionne plus!

    Y a t'il un moyen via sql server de forcer la déconnection de tous les utilisateurs ou d'un utilisateur spécifique? Faut il avoir des droits particuliers?

    Merci d'avance

  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,

    Tu peux toujours supprimer tes sessions "inactives" avec la commande KILL mais cela ne reste pas très propre. Après il faut également déterminer si une session peut être supprimée ou non ...

    On a déjà eu ce genre de problème avec Access et on avait mis en place une tâche planifiée dans Windows qui permettait de forcer la fermeture des formulaires Access la nuit. En effet certains utilisateurs ne se déconnectaient pas le soir et verrouillaient certaines tables durant la nuit.

    A voir si cela colle avec ton contexte.

    ++

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    Alors je n'y connais pas grand chose en tâches planifiées mais comme le nom l'indique il faut j'imagine définir une périocité d'exécution.
    Dans mon cas, le besoin de forcer la fermeture des sessions access n'est pas du tout planifié. Ca peut être n'importe quand dans la journée.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 596
    Points : 34 279
    Points
    34 279
    Par défaut
    salut,

    pour les connections en cours, dans le tuto de fadace, on avait ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    USE master
    GO
    SELECT 'kill', spid
    FROM sysprocesses
    WHERE dbid = db_id('MaBase')
    GO
    /*Exécution de l'output de la commande ci-dessus afin de libérer la base */
    GO
     
    --RESTORE DATABASE MaBase FROM DISK=N'D:\BACKUP\MaBase.bal'
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    Je ne dois pas être doué car je n'arrive pas à faire fonctionner ton code.
    J'écris donc ce script:

    USE master
    GO
    SELECT 'kill', spid
    FROM sysprocesses
    WHERE dbid = db_id('Hybrides')
    GO

    ça me retourne tout un tableau avec plusieurs lignes seulement ça ne déconnecte personne de la base...

    PS: je ne suis que process_admin sur le serveur et db_owner sur la base Hybrides

  6. #6
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    --> Quelles sont les sessions/applications/utilisateurs connectés ?
    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
     
    SELECT
    c.session_id [session_id],
    c.net_transport [protocol],
    c.auth_scheme [authentification],
    s.login_time,
    c.last_read ,
    c.last_write,
    s.hostname [client],
    s.loginame,
    @@SERVERNAME AS [server],
    s.program_name,
    s.status
    FROM sys.dm_exec_connections c INNER JOIN sys.sysprocesses s ON c.session_id = s.spid
    WHERE session_id <> @@SPID
    --> Comment Killer les sessions/applications/utilisateurs connectés ?
    il faut utiliser le numéro de la (les) session_id listés ci-dessus et faire ensuite

    Etienne ZINZINDOHOUE
    Billets-Articles

  7. #7
    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 exécuter ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER DATABASE [Nom de db] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    Après votre maintenance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER DATABASE [Nom de db] SET MULTI_USER;

  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
    Ce qui me gène dans la méthode est de forcer la déconnexion depuis SQL Server à tout moment.

    Que se passe-t-il si une personne est en train de travailler à ce moment là ? On arrête son travail ? Il est probable qu'il n'y ait pas le choix mais quand même ...

    Chaque applicatif fait appel a un fichier contenant des fonctions communes.
    On parle de fichier ou de bases de données ? Juste pour être certain ...

    ++

  9. #9
    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
    Je suppose que les utilisateurs sont avertis à l'avance par email de la fenetre de maintenance.
    Qu'une procédure "d'arrêt de leur travail" (ou comment ne pas perdre de données... tout fermer et tout cela) leur a été communiquer.
    Que la maintenance a été approuvée.
    Bref, il y a un travail à faire en amont sinon c'est clair que c'est barbare et pas très propre.

    Après, s'il faut commencer a attendre que le gars qui est parti en vacances 3 semaines et qui a locké sa session windows revienne pour qu'il ferme sa session proprement et ainsi de suite, on est pas prêt d'avancer.

  10. #10
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    En fait les applicatifs sont des projets access (.adp) qui ont tous une référence commune qui est un autre projet acces (.ade)
    A chaque fois que je dois réaliser une maintenance sur le fichier ade je dois faire en sorte que personne ne l'utilise.
    Un message s'affiche alors a tous les utilisateurs en les prévenant qu'une opération des maintenance est en cours. A partir de la ils ont 5 minutes pour finir ce qu'ils ont à faire et après leur applicatif se fermera automatiquement.
    En parallèle personne ne peut ouvrir d'applicatifs.
    Seulement les personnes qui laisse un appli ouvert avec leur session windows verrouillée, empêche la fermeture automatique d'access.
    Donc rien de trop violent, les utilisateurs sont bien avertis.

    Les solutions de déconnexion de zinzineti et Ptit_Dje fonctionnent très bien, dans le sens ou les utilisateurs sont bien déconnectés mais les applicatifs restent ouverts et ont toujours pour référence le fichier commun.
    Donc en fait déconnecter les users de la base ne résoud malheureusement pas mon problème. Ils faudrait en fait forcer la fermeture d'access sur leur pc et la je crois que ça devient très compliqué...

    Une petite idée peut être?

  11. #11
    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
    Méthode barbare, regarder et fermer les handles sur le fichier en utilisant process explorer.

  12. #12
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    Alors je n'ai pas les droits administrateur sur mon pc donc je ne peux rien installer dessus.
    En fouillant un peu j'ai l'impression qu'on pourrait éventuellement réaliser cette opération en vba.
    Je sort par contre un peu du thème SQL-server, je devrais peut être me rediriger vers un autre groupe de discussion...

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

Discussions similaires

  1. Liste des sessions actives de la base
    Par SheikYerbouti dans le forum Contribuez
    Réponses: 2
    Dernier message: 10/10/2012, 16h01
  2. Réponses: 9
    Dernier message: 19/01/2012, 09h22
  3. [VB.NET] Utilisation des sessions dans Session_End ?
    Par San Soussy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/02/2005, 16h40
  4. [VS.NET] Liens relatifs et suivi des sessions ?
    Par Webman dans le forum ASP.NET
    Réponses: 6
    Dernier message: 18/11/2004, 21h21
  5. [tomcat] gestion des sessions
    Par sebos63 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/10/2004, 14h25

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