uso usar una todas tablas significa restaurar quitar que puede listar las está datos conectar compatibilidad como bases sql-server sql-server-2005

sql-server - usar - que significa compatibilidad de base de datos



¿Cómo se eliminan todas las conexiones actuales a una base de datos de SQL Server 2005? (19)

A continuación le indicamos cómo confiablemente este tipo de cosas en MS SQL Server Management Studio 2008 (también puede funcionar para otras versiones):

  1. En el Árbol del Explorador de objetos, haga clic con el botón derecho en el servidor de base de datos raíz (con la flecha verde) y luego haga clic en el monitor de actividad.
  2. Abra la pestaña de procesos en el monitor de actividad, seleccione el menú desplegable ''bases de datos'' y filtre por la base de datos que desee.
  3. Haga clic con el botón derecho en la base de datos en el Explorador de objetos e inicie una tarea ''Tareas -> Desconectar''. Deje esto corriendo en segundo plano mientras usted ...
  4. Apaga todo lo que puedas con seguridad.
  5. Elimine todos los procesos restantes de la pestaña de proceso.
  6. Vuelva a poner el DB en línea.
  7. Renombra el DB.
  8. Vuelva a poner su servicio en línea y apúntelo a la nueva base de datos.

Quiero cambiar el nombre de una base de datos, pero sigo recibiendo el error de que "no se pudo obtener el bloqueo exclusivo" en la base de datos, lo que implica que todavía hay algunas conexiones activas.

¿Cómo puedo eliminar todas las conexiones a la base de datos para poder cambiarle el nombre?


Consulte Eliminar todas las conexiones activas a una base de datos .

La razón por la que el enfoque que Adam sugirió no funcionará es que, durante el tiempo en que esté haciendo un bucle sobre las conexiones activas, se podrá establecer una nueva, y las perderá. El artículo al que he vinculado utiliza el siguiente enfoque que no tiene este inconveniente:

-- set your current connection to use master otherwise you might get an error use master ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE --do you stuff here ALTER DATABASE YourDatabase SET MULTI_USER


Desconectarse toma un tiempo y algunas veces tengo algunos problemas con eso.

La forma más sólida en mi opinión:

Separar Haga clic con el botón derecho en DB -> Tareas -> Separar ... marque "Eliminar conexiones" Aceptar

Vuelva a colocar el botón derecho Haga clic en Bases de datos -> Adjuntar .. Agregar ... -> seleccione su base de datos y cambie la columna Adjuntar al nombre de la base de datos que desee. De acuerdo


En MS SQL Server Management Studio en el explorador de objetos, haga clic derecho en la base de datos. En el menú contextual que sigue, seleccione ''Tareas -> Desconectar''


Esto no me funcionó (SQL2008 Enterprise), tampoco pude ver ningún proceso en ejecución o usuarios conectados a la base de datos. Reiniciar el servidor (haga clic con el botón derecho en Servidor SQL en Management Studio y seleccione Reiniciar) me permitió restaurar la base de datos.


Estoy usando SQL Server 2008 R2, mi base de datos ya estaba configurada para un solo usuario y había una conexión que restringía cualquier acción en la base de datos. Así, la solución SQLMenace''s recomendada respondió con error. Aquí hay uno que funcionó en mi caso .


Haga clic con el botón derecho en el nombre de la base de datos, haga clic en la ventana Propiedad para obtener la propiedad, abra la pestaña Opciones y cambie la propiedad "Restringir acceso" de multiusuario a usuario único. Cuando presiona el botón Aceptar, le pedirá que cierre todas las conexiones abiertas, seleccione "Sí" y que está configurado para cambiar el nombre de la base de datos ...


La opción que me funciona en este escenario es la siguiente:

  1. Inicie la operación "Separar" en la base de datos en cuestión. Esto abrirá una ventana (en SQL 2005) que muestra las conexiones activas que impiden acciones en la base de datos.
  2. Matar las conexiones activas, cancelar la operación de separación.
  3. La base de datos ahora debería estar disponible para la restauración.

Mátalo y mátalo con fuego.

USE master go DECLARE @dbname sysname SET @dbname = ''yourdbname'' DECLARE @spid int SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) WHILE @spid IS NOT NULL BEGIN EXECUTE (''KILL '' + @spid) SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid END


Normalmente me encuentro con ese error cuando intento restaurar una base de datos. Por lo general, solo voy a la parte superior del árbol en Management Studio y hago clic derecho y reinicio el servidor de la base de datos (debido a que está en una máquina de desarrollo, esto podría no ser ideal en producción). ). Esto es cerrar todas las conexiones de base de datos.


Otro enfoque de "eliminarlo con fuego" es simplemente reiniciar el servicio MSSQLSERVER. Me gusta hacer cosas desde la línea de comandos. Pegando esto exactamente en CMD lo hará: NET STOP MSSQLSERVER & NET START MSSQLSERVER

O abra "services.msc" y busque "SQL Server (MSSQLSERVER)" y haga clic derecho, seleccione "reiniciar".

Esto "de seguro, seguro" eliminará TODAS las conexiones a TODAS las bases de datos que se ejecutan en esa instancia.

(Me gusta esto mejor que muchos enfoques que cambian y cambian la configuración en el servidor / base de datos)


Prueba esto:

ALTER DATABASE [DATABASE_NAME] SET SINGLE_USER WITH ROLLBACK IMMEDIATE


Puede usar el comando SP_Who y eliminar todos los procesos que usen su base de datos y luego cambiar el nombre de su base de datos.


Script para lograr esto, reemplace ''DB_NAME'' con la base de datos para eliminar todas las conexiones a:

USE master GO SET NOCOUNT ON DECLARE @DBName varchar(50) DECLARE @spidstr varchar(8000) DECLARE @ConnKilled smallint SET @ConnKilled=0 SET @spidstr = '''' Set @DBName = ''DB_NAME'' IF db_id(@DBName) < 4 BEGIN PRINT ''Connections to system databases cannot be killed'' RETURN END SELECT @spidstr=coalesce(@spidstr,'','' )+''kill ''+convert(varchar, spid)+ ''; '' FROM master..sysprocesses WHERE dbid=db_id(@DBName) IF LEN(@spidstr) > 0 BEGIN EXEC(@spidstr) SELECT @ConnKilled = COUNT(1) FROM master..sysprocesses WHERE dbid=db_id(@DBName) END


Siempre he usado:

ALTER DATABASE DB_NAME SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO SP_RENAMEDB ''DB_NAME'',''DB_NAME_NEW'' Go ALTER DATABASE DB_NAME_NEW SET MULTI_USER -- set back to multi user GO


Utilizando SQL Management Studio Express:

En el árbol del Explorador de objetos, profundice en Administración a "Monitor de actividad" (si no puede encontrarlo allí, haga clic derecho en el servidor de la base de datos y seleccione "Monitor de actividad"). Al abrir el Monitor de actividad, puede ver toda la información del proceso. Debería poder encontrar los bloqueos para la base de datos que le interesa y eliminar esos bloqueos, lo que también anulará la conexión.

Deberías poder renombrar después de eso.


Yo uso sp_who para obtener una lista de todos los procesos en la base de datos. Esto es mejor porque es posible que desee revisar qué proceso matar.

declare @proc table( SPID bigint, Status nvarchar(255), Login nvarchar(255), HostName nvarchar(255), BlkBy nvarchar(255), DBName nvarchar(255), Command nvarchar(MAX), CPUTime bigint, DiskIO bigint, LastBatch nvarchar(255), ProgramName nvarchar(255), SPID2 bigint, REQUESTID bigint ) insert into @proc exec sp_who2 select *, KillCommand = concat(''kill '', SPID, '';'') from @proc

Resultado
Puede usar el comando en la columna KillCommand para finalizar el proceso que desea.

SPID KillCommand 26 kill 26; 27 kill 27; 28 kill 28;


ALTER DATABASE [Test] SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER DATABASE [Test] SET ONLINE


Select ''Kill ''+ CAST(p.spid AS VARCHAR)KillCommand into #temp from master.dbo.sysprocesses p (nolock) join master..sysdatabases d (nolock) on p.dbid = d.dbid Where d.[name] = ''your db name'' Declare @query nvarchar(max) --Select * from #temp Select @query =STUFF(( select '' '' + KillCommand from #temp FOR XML PATH('''')),1,1,'''') Execute sp_executesql @query Drop table #temp

use la base de datos ''maestra'' y ejecute esta consulta, eliminará todas las conexiones activas de su base de datos.