2010-09-03 22 views
6

Estoy tratando de restaurar una base de datos en mi servidor sql 2005 express edition. Sé que para restaurar la base de datos necesito hacerlo para un solo usuario. Estoy dando este comando para que sea a un solo usuariono se puede restaurar la base de datos en el servidor sql (usuario_nico)

USE [master] 
ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

Este comando se ejecuta correctamente, e incluso puedo ver una pequeña imagen en el explorador de objeto en esta base de datos que muestran que esto es ahora un solo usuario.

Ahora estoy tratando de restaurar la base de datos, siguiendo estos pasos -> haga clic derecho en la base de datos y las tareas y luego para restaurar la base de datos. Estoy seleccionando la ruta donde se encuentra el archivo de copia de seguridad y haciendo clic en restaurar.

Pero sigo recibiendo ese error "No se pudo obtener acceso exclusivo porque la base de datos está en uso (microsoft.sqlserver.smo). Me falta algo. Lo he buscado en Google y la mayoría de los sitios sugieren que la base de datos necesita estar en modo de usuario único y nada más

no traté de soltar y de fijación del método de base nunca he hecho esto antes y me gustaría saber si es seguro hacerlo

edición:... gracias para las respuestas. Ambos me sugirieron la misma respuesta, así que estoy marcando una respuesta como la elegida.

Incluso seleccioné ove Escribe la base de datos existente desde las opciones.

Respuesta

4

En primer lugar, es mejor realizar una copia de seguridad y restaurar en lugar de desconectar y conectar.

En segundo lugar, lo más probable es que la sesión que está utilizando para configurar la base de datos en SINGLE_USER es la que todavía tiene cuando intenta ejecutar la restauración (ya que está usando la GUI, se conecta por sí sola sesión por lo que no puede obtener acceso).

Haga la restauración como un comando de texto o cambie la ventana de consulta para usar primero otra base de datos, como el maestro. O simplemente podría cerrar la ventana de consulta para que ya no esté conectada.

Siempre puede verificar quién está conectado con select * from master.dbo.sysprocesses.

actualización

Suponiendo que la base de datos que desea restaurar ya existe, y si usted tiene un archivo de copia única en el disco (que no tiene varias copias de seguridad en ella) y no hay necesidad de restaurar los archivos de registro después de restaurar la copia de seguridad completa, entonces la restauración a través de script es super, super fácil:

RESTORE DATABASE DBName FROM DISK = 'C:\path\DBNameBackup.bak'; 

el aprendizaje de esta sintaxis le hará la vida más fácil, porque entonces cuando se establece SINGLE_USER ya se encuentra en la suela de sesión que se conecta. Además, me parece que escribir el comando de restauración es más rápido que usar la GUI, y me gusta el control que tengo sobre las cosas. La repetición de esto finalmente lo cementa en su mente y ya no tiene que buscar la sintaxis.

Ni siquiera es tan difícil restaurar los archivos de registro. Sólo una cosa fácil de recordar, WITH NORECOVERY:

RESTORE DATABASE DBName FROM DISK = 'C:\path\DBNameBackup.bak' WITH NORECOVERY; 
RESTORE LOG DBName FROM DISK = 'C:\path\DBNameBackup1.log' WITH NORECOVERY; 
RESTORE LOG DBName FROM DISK = 'C:\path\DBNameBackup2.log' WITH NORECOVERY; 
RESTORE LOG DBName FROM DISK = 'C:\path\DBNameBackup3.log' WITH NORECOVERY; 
... 4 5 6 7 and so on 
RESTORE LOG DBName FROM DISK = 'C:\path\DBNameBackupX.log' WITH RECOVERY; 

No ... usted ha restaurado los archivos de registro, muy fácilmente. ¡Incluso puede restaurar a un punto exacto en el tiempo usando WITH STOPAT!Además, si olvida y envía accidentalmente la última declaración de restauración de registro WITH NORECOVERY, simplemente emita RESTORE DATABASE DBName WITH RECOVERY; para realizar los pasos finales para hacer que la base de datos se pueda utilizar (deshacer transacciones no confirmadas, etc.).

1
  • Ir al elemento "Opciones" justo debajo de "General" en la lista de la izquierda.
  • Asegúrese de que esté marcada la opción "Sobrescribir la base de datos existente" (sección "Opciones de restauración").

Buena suerte.

2

Puede utilizar este script para matar todos los procesos usando la base de datos y luego tratar de restablecer de nuevo:

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...' 
Cuestiones relacionadas