Error al cambiar el nombre de la base de datos en SQL Server 2008 R2

164

Estoy usando esta consulta para cambiar el nombre de la base de datos:

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

Pero muestra un error al excitar:

Msg 5030, Nivel 16, Estado 2, Línea 1
La base de datos no se pudo bloquear exclusivamente para realizar la operación.

¿Hay algún problema con mi consulta?

Vikram Bose
fuente
44
La consulta no tiene nada de malo: el error le indica que hay otras conexiones conectadas a la base de datos, por lo que no puede cambiarle el nombre en este momento.
Damien_The_Unbeliever
1
Si está haciendo esto desde SSMS, asegúrese de no tener una ventana de consulta abierta contra esa base de datos, ya que es una conexión separada que coloca un bloqueo en la base de datos.
jleach

Respuestas:

329

Puede intentar configurar la base de datos en modo de usuario único.

https://stackoverflow.com/a/11624/2408095

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE    
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER
Calamar
fuente
1
es WITH ROLLBACK IMMEDIATEnecesario Si no lo uso en absoluto, ¿causará problemas?
usuario13892
Un poco tarde para la fiesta, pero para responder esta pregunta: sí, debes usar WITH ROLLBACK IMMEDIATE mientras modifica una base de datos en la que otros usuarios podrían estar operando, para garantizar la integridad de estas operaciones. Pero no es realmente necesario volver a configurar la base de datos en modo MULTI_USER ya que la base de datos ya está en modo SINGLE_USER y de todos modos usted es el único usuario capaz de ejecutar cualquier transacción.
Hakan Yildizhan
61
  1. Establezca la base de datos en modo único:

    ALTER DATABASE dbName
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
  2. Intente cambiar el nombre de la base de datos:

    ALTER DATABASE dbName MODIFY NAME = NewName
  3. Establezca la base de datos en modo multiusuario:

    ALTER DATABASE NewName
    SET MULTI_USER WITH ROLLBACK IMMEDIATE
Samiey Mehdi
fuente
@SamieyMehdi ¿Debo usar WITH ROLLBACk IMMEDIATEpara multiusuario?
BendEg
29

En SQL Server Management Studio (SSMS) :

También puede hacer clic derecho en su base de datos en el Explorador de objetos e ir a Propiedades . Desde allí, vaya a Opciones . Desplácese hasta abajo y configure Restringir acceso a SINGLE_USER . Cambie el nombre de su base de datos, luego regrese y configúrelo nuevamente en MULTI_USER .

Justin Woodmancy
fuente
¡Rapido y Facil!
ani627
Eso es perfecto. Trabajando con SQL Server 2017
Adam Macierzyński
19

Intente cerrar todas las conexiones a su base de datos primero:

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

Tomado de aquí

Andrey Gordeev
fuente
4

Esto lo hizo por mí:

USE [master];
GO
ALTER DATABASE [OldDataBaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
EXEC sp_renamedb N'OldDataBaseName', N'NewDataBaseName';


-- Add users again
ALTER DATABASE [NewDataBaseName] SET MULTI_USER
GO
t_plusplus
fuente
2

Cambie la base de datos al modo de usuario único como se muestra en las otras respuestas

A veces, incluso después de convertir al modo de usuario único, la única conexión permitida a la base de datos puede estar en uso.

Para cerrar una conexión incluso después de convertir al modo de usuario único, intente:

select * from master.sys.sysprocesses
where spid>50 -- don't want system sessions
  and dbid = DB_ID('BOSEVIKRAM')

Mire los resultados y vea la ID de la conexión a la base de datos en cuestión.

Luego use el siguiente comando para cerrar esta conexión (solo debería haber una, ya que la base de datos ahora está en modo de usuario único)

KILL ID_ conexión

Reemplace connection_id con la ID en los resultados de la primera consulta

Slayernoah
fuente
1

1.database establece el primer modo de usuario único

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER CON ROLLBACK INMEDIATE

2.RENOMBRAR LA BASE DE DATOS

ALTERAR BASE DE DATOS BOSEVIKRAM MODIFICAR NOMBRE = [BOSEVIKRAM_Deleted]

3.DATABAE SET MODO MULIUSER

ALTER DATABASE BOSEVIKRAM_Eliminado SET MULTI_USER CON ROLLBACK INMEDIATE

K GANGA
fuente
0

Otra forma de cerrar todas las conexiones:

Herramientas administrativas> Ver servicios locales

Detener / Iniciar el servicio "SQL Server (MSSQLSERVER)"

Cronozoos
fuente
-1
use master

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE  

exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER
KamalDeep
fuente
Esta es exactamente la misma respuesta que Squid's
reggaeguitar