web-dev-qa-db-fra.com

restaurer le serveur SQL à partir d'un fichier .bak Impossible d'obtenir un accès exclusif

J'essaie de restaurer mon SQL en utilisant le fichier bak

Je reçois une erreur 

L'accès exclusif n'a pas pu être obtenu car la base de données est en cours d'utilisation

J'ai essayé 

USE [master]
ALTER DATABASE myDB
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

et lancez la requête

USE [master] RESTORE DATABASE  myDB
   FROM DISK = 'C:\MyDatabase.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 10

J'ai également essayé de l'assistant de restauration avec le même résultat.

L'accès exclusif n'a pas pu être obtenu car la base de données est en cours d'utilisation.

16
baaroz

Méthode 1

    declare @sql as varchar(20), @spid as int

    select @spid = min(spid)  from master..sysprocesses  where dbid = db_id('<database_name>')  and spid != @@spid    

    while (@spid is not null)

    begin

    print 'Killing process ' + cast(@spid as varchar) + ' ...'

    set @sql = 'kill ' + cast(@spid as varchar)

exec (@sql)

select 

    @spid = min(spid)  

from 

    master..sysprocesses  

where 

    dbid = db_id('<database_name>') 

    and spid != @@spid
 end 

 print 'Process completed...'

Méthode 2

  alter database database_name
  set offline with rollback immediate
  alter database database_name
  set online

aller

19
MAS

Vous n'avez pas besoin d'écrire une requête pour résoudre ce problème ... J'ai eu plusieurs fois le même problème et je l'ai résolu de la manière suivante: Lorsque vous restaurez la base de données

  1. Aller à l'onglet Option dans la fenêtre Restaurer la base de données
  2. Vérifier (écraser la base de données existante (WITH REPLACE))
  3. Vérifier (Fermer les connexions existantes à la base de données de destination)
  4. Puis cliquez sur OK

La base de données de restauration commence ...

8
Hamed R

N'importe qui ayant eu les problèmes énumérés ci-dessus, et aucun des conseils ne fonctionne .. Il suffit de désactiver la sauvegarde Taillog sous "Options" .. 

Si vous activez (ou laissez) cette option, le journal de bord de la base de données source sera lui-même consigné (même si la source de la restauration est simplement un fichier). Par conséquent, si la base de données source est en cours d'utilisation (ce qui est normalement le cas si vous effectuez une copie d'une base de données de production), la restauration échoue.

6
Craig

J'avais ce problème lorsque j'essayais de restaurer une sauvegarde de production sur un serveur de développement contenant déjà la base de données. Je voulais restaurer une copie, ce que j'ai fait en changeant le nom de la base de données cible, mais le problème concernait en fait les fichiers. Par défaut, il essayait d'écraser les fichiers déjà présents. J'ai résolu le problème en cochant la case "Déplacer tous les fichiers dans un dossier" dans la page "Fichiers" de la boîte de dialogue de restauration et en choisissant un nouveau répertoire pour éviter les collisions de fichiers.

0
Evan M