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 :

Comment forcer la déconnexion d'une base


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut Comment forcer la déconnexion d'une base
    Bonjour à tous.tes
    J'avais trouvé un bon truc pour forcer le restore de ma base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ALTER DATABASE mabase SET OFFLINE
    ;
    ALTER DATABASE mabase SET ONLINE
    ;
    RESTORE DATABASE  mabase
      FROM DISK = 'path complet du backup full'    
      WITH NORECOVERY
    ;
    RESTORE DATABASE  mabase
      FROM DISK = 'path complet du backup differentiel'        
      WITH RECOVERY
    ;
    Le problème est qu'il ne veut plus exécuter le SET OFFLINE. Il dit qu'il n'arrive pas à prendre l'exclusivité sur la base
    Je précise tout de suite que SET SINGLE_USER ne marche pas non plus.
    Il rame, rame, rame avant de finir par dire qu'il n'y arrive pas

    Une bonne âme à qui ça parle SVP un vendredi AM ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 348
    Par défaut
    Bonjour,

    => USE MASTER
    => alter database MABASE set single_user WITH ROLLBACK IMMEDIATE
    => Restore MABASE from .....
    => Vérifier si tous les users sont bien mappés

    A+

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par agdid04 Voir le message
    Bonjour,

    => USE MASTER
    => alter database MABASE set single_user
    => Restore MABASE from .....
    => Vérifier si tous les users sont bien mappés

    A+
    Ben oui agdid04 , c'est par là que j'ai commencé, même avec le USE MASTER... Que pouick. Alors que ça eu marché. Mais ça ne marche plus Je ne connais pas suffisamment SQLServer pour comprendre pourquoi .

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu peux t’inspirer de cette version « kill Bill » pour tuer toutes les connexions en cours sur une base de données
    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
    -- Kill all sessions using a database -- Vishal - http://SqlAndMe.com
    USE [master]
    DECLARE @dbName SYSNAME, @sqlCmd VARCHAR(MAX)
    SET @sqlCmd = ''
    SET @dbName = @Current_DB -- la bd cible est ici
    PRINT @dbName 
    SELECT @sqlCmd = @sqlCmd + 'KILL ' + CAST(session_id AS VARCHAR) + CHAR(13) FROM sys.dm_exec_sessions WHERE DB_NAME(database_id) = @dbName
    PRINT @sqlCmd
    --Uncomment below line to REALLY kill !!!
    -- EXEC (@sqlCmd)
     
    SET @sqlCmd = 'DROP DATABASE ' + QUOTENAME(@dbName)
    PRINT @sqlCmd
    --Uncomment below line to REALLY drop this database !!!
    -- EXEC (@sqlCmd)
    GO

  5. #5
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 348
    Par défaut
    Ah, j'ai oublié l'option

    alter database MABASE set single_user WITH ROLLBACK IMMEDIATE

    @+

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Merci 7gyY9w1ZY6ySRgPeaefZ , je mets de côté. Mais franchement, ça me paraît un peu Tarantinesque comme soluce .
    Mais j'y viendrais peut-être, si pas d'explication au problème...

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Alors j'ai dropé la base via SMSS en cochant "close existing connections" et il le fait sans problème.
    Quelqu'un connaîtrait-il la commande qu'il exécute en faisant cela. Je veux dire l'équivalent TSQL de "Close existing connections" ?
    SVP merci ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cestpasmoinonplus Voir le message
    Quelqu'un connaîtrait-il la commande qu'il exécute en faisant cela. Je veux dire l'équivalent TSQL de "Close existing connections" ?
    L'astuce :
    Nom : ScriptTo.png
Affichages : 1175
Taille : 10,8 Ko

    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
    EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'tempo'
    GO
    use [tempo]
     
    GO
    use [master]
     
    GO
    USE [master]
    GO
    ALTER DATABASE [tempo] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    USE [master]
    GO
    /****** Object:  Database [tempo]    Script Date: 2019-05-17 10:13:41 ******/
    DROP DATABASE [tempo]
    GO

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Ah ouai, super. Merci 7gyY9w1ZY6ySRgPeaefZ.
    J'essaie dès qu'il a fini la restauration.

  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
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Tu peux t’inspirer de cette version « kill Bill » pour tuer toutes les connexions en cours sur une base de données
    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
    -- Kill all sessions using a database -- Vishal - http://SqlAndMe.com
    USE [master]
    DECLARE @dbName SYSNAME, @sqlCmd VARCHAR(MAX)
    SET @sqlCmd = ''
    SET @dbName = @Current_DB -- la bd cible est ici
    PRINT @dbName 
    SELECT @sqlCmd = @sqlCmd + 'KILL ' + CAST(session_id AS VARCHAR) + CHAR(13) FROM sys.dm_exec_sessions WHERE DB_NAME(database_id) = @dbName
    PRINT @sqlCmd
    --Uncomment below line to REALLY kill !!!
    -- EXEC (@sqlCmd)
     
    SET @sqlCmd = 'DROP DATABASE ' + QUOTENAME(@dbName)
    PRINT @sqlCmd
    --Uncomment below line to REALLY drop this database !!!
    -- EXEC (@sqlCmd)
    GO
    Ceci est une grosse connerie !

    En effet dans ce script particulièrement stupide, le KILL imposant un ROLLBACK, le temps de faire cette annulation de transaction, d'autres connexions peuvent arriver et se connecter à la base. Vous venez donc d'inventer le tonneau des danaïdes informatique !

    Seule l'instruction ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE garantie qu'aucune nouvelle connexion se fera pendant la période des rollbacks.

    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
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Quoi qu'il en soit, en ce début de longue semaine, je n'arrive toujours pas à prendre la main sur cette satanée base, sauf à la supprimer.
    Je ne sais pas comment j'ai réussi à la mettre en single user, mais maintenant
    à la commande (dans SMSS) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    USE [master]
    GO
    ALTER DATABASE MaBase SET MULTI_USER
    GO
    Il me répond :
    Transaction (Process ID 102) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
    Msg 5069, Level 16, State 1, Line 11
    ALTER DATABASE statement failed.
    L'effronté

    Je comprends bien ce qu'il me dit, mais étant administrateur, comment puis-je le forcer à faire ce que je veux ?

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    faites :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    USE [MaBase ]
    GO
    ALTER DATABASE MaBase SET MULTI_USER
    GO

    Attendez suffisamment longtemps pour que ça marche…

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

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Ben oui, mais mon problème est que cela ne marche pas .
    Dans le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    use master
    ;
    alter database ma_base set single_user
    with  rollback immediate
    ;
    restore database ma_base 
    from disk = 'C:\BACKUP\ma_base.bak' with norecovery
    ;
    restore database ma_base 
    from disk = 'C:\BACKUP\ma_base.bak' 
    ;
    alter database ma_base set multi_user
    ;
    Il n'accepte que le "set single_user"
    Je ne peux même pas faire de DROP DATABASE après qu'il ait planté.

    J'ai dû tuer les processus SQLServer,
    renommer les fichiers mdf et ldf de ma_base,
    relancer le serveur,
    supprimer la base qui se trouvait en "recovery pending" dans SMSS,
    renommer les fichiers mdf et ldf de ma_base,
    Et enfin attacher ma base pour qu'elle soit à nouveau en multi_user

    Du boulot de bûcheron, quoi
    Faut-il droper la base avant de faire le restore? Au moins, je suis sûr qu'elle ne sera plus utilisée par un fantôme
    Ben d'ailleur, je vais essayer...
    Allez hop au charbon...

  14. #14
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 959
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    use master
    ;
    alter database ma_base set single_user
    with  rollback immediate
    ;
    restore database ma_base 
    from disk = 'C:\BACKUP\ma_base.bak' 
    with replace, recovery
    ;
    devrait suffire

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par Michel.Priori Voir le message
    Logique . Merci Michel
    Je vais finir par prendre ma retraite en tant que DBA SQLServer

  16. #16
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 959
    Par défaut
    Si c'est pour "rafraichir" une base de tests ou de dev à la dernière sauvegarde, alors les "snapshot database" sont TRES efficaces.
    A toi de voir

  17. #17
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Désolé pour le temps de réponse, j'étais en maison de repos
    Malheureusement, à cause de quelques tables gigantesques que nous sommes obligés d'optimiser en mémoire, nous ne pouvons pas utiliser les databases snapshots.

  18. #18
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 959
    Par défaut
    Ah le repos ! et en plus dans un établissement qui n'a pas internet... manque plus que le soleil et les nanas

    Effectivement zut, car "les instantanés de base de données ne sont pas pris en charge par les bases de données avec un groupe de fichiers MEMORY_OPTIMIZED_DATA."

    Je n'ai pas essayé DBCC CLONEDATABASE avec de tel groupes de fichiers.
    https://support.microsoft.com/fr-fr/...tatistics-only

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

Discussions similaires

  1. Comment calculer la taille d'une base de données ?
    Par say dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 01/04/2011, 16h48
  2. Comment forcer le format d'une cellule?
    Par cha_cha dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/11/2005, 14h31
  3. Vb.Net et Access : comment modifier la structure d'une base
    Par hucliez dans le forum Accès aux données
    Réponses: 3
    Dernier message: 09/11/2005, 13h33
  4. [Sql] Comment lister les tables d'une base ?
    Par Mynautor dans le forum DB2
    Réponses: 6
    Dernier message: 05/09/2005, 13h21
  5. Comment stocker des images dans une base de données ?
    Par [Silk] dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2005, 11h29

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