Quiero cerrar las conexiones existentes a un servidor MS SQL para que pueda hacer una restauración en esa base de datos programáticamente.Cómo cerrar las conexiones existentes a un DB
Respuesta
Esto debe desconectar todos los demás, y dejar que el único usuario:
alter database YourDb set single_user with rollback immediate
Nota: No se olvide
alter database YourDb set MULTI_USER
después de que haya terminado!
¡No olvide 'ALTER DATABASE YourDb SET MULTI_USER' después de que haya terminado! –
encontrado aquí: http://awesomesql.wordpress.com/2010/02/08/script-to-drop-all-connections-to-a-database/
DECLARE @dbname NVARCHAR(128)
SET @dbname = 'DB name here'
-- db to drop connections
DECLARE @processid INT
SELECT @processid = MIN(spid)
FROM master.dbo.sysprocesses
WHERE dbid = DB_ID(@dbname)
WHILE @processid IS NOT NULL
BEGIN
EXEC ('KILL ' + @processid)
SELECT @processid = MIN(spid)
FROM master.dbo.sysprocesses
WHERE dbid = DB_ID(@dbname)
END
gracias, pero esta consulta tomó más de 2 minutos, por lo Acabo de cancelarlo – Haz
En mi humilde opinión, esta es una forma innecesariamente compleja e ineficaz de hacerlo. La respuesta de @Andomar logra lo mismo con mucho menos esfuerzo y con un mejor control de la fuerza bruta sobre las transacciones en vuelo. Tampoco captura usuarios que tienen una base de datos diferente informada en la vista de * sproprocesses * obsoleta, pero aún mantienen bloqueos en la base de datos actual. –
Gracias, Aaron por mi vergüenza semanal. Mata el proceso, pero ciertamente no elegantemente. – Vinnie
La solución perfecta proporcionada por Stev.org: http://www.stev.org/post/2011/03/01/MS-SQL-Kill-connections-by-host.aspx
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[KillConnectionsHost]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[KillConnectionsHost]
GO
/****** Object: StoredProcedure [dbo].[KillConnectionsHost] Script Date: 10/26/2012 13:59:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[KillConnectionsHost] @hostname varchar(MAX)
AS
DECLARE @spid int
DECLARE @sql varchar(MAX)
DECLARE cur CURSOR FOR
SELECT spid FROM sys.sysprocesses P
JOIN sys.sysdatabases D ON (D.dbid = P.dbid)
JOIN sys.sysusers U ON (P.uid = U.uid)
WHERE hostname = @hostname AND hostname != ''
AND P.spid != @@SPID
OPEN cur
FETCH NEXT FROM cur
INTO @spid
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT CONVERT(varchar, @spid)
SET @sql = 'KILL ' + RTRIM(@spid)
PRINT @sql
EXEC(@sql)
FETCH NEXT FROM cur
INTO @spid
END
CLOSE cur
DEALLOCATE cur
GO
es bastante largo, pero ¡también la única solución funcionó para mí! thx – curiousBoy
en Asistente de restauración clic en "Cerrar las conexiones existentes a la base de datos de destino"
en Separar base de datos asistente clic "terminar la conexión" ít.
Esta opción no siempre está disponible – Squazz
Puede usar el cursor de esa manera:
USE master
GO
DECLARE @SQL AS VARCHAR(255)
DECLARE @SPID AS SMALLINT
DECLARE @Database AS VARCHAR(500)
SET @Database = 'AdventureWorks2016CTP3'
DECLARE Murderer CURSOR FOR
SELECT spid FROM sys.sysprocesses WHERE DB_NAME(dbid) = @Database
OPEN Murderer
FETCH NEXT FROM Murderer INTO @SPID
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'Kill ' + CAST(@SPID AS VARCHAR(10)) + ';'
EXEC (@SQL)
PRINT ' Process ' + CAST(@SPID AS VARCHAR(10)) +' has been killed'
FETCH NEXT FROM Murderer INTO @SPID
END
CLOSE Murderer
DEALLOCATE Murderer
escribí sobre esto en mi blog aquí: http://www.pigeonsql.com/single-post/2016/12/13/Kill-all-connections-on-DB-by-Cursor
- 1. Cómo especifico "cerrar conexiones existentes" en el script sql
- 2. Android ¿cuándo debería abrir y cerrar conexiones de db?
- 3. ¿Cómo contar conexiones db abiertas?
- 4. Winsock: deje de aceptar nuevas conexiones pero mantenga la comunicación con las conexiones existentes.
- 5. ¿Puedes cerrar todas las conexiones a MongoDB desde Mongo Shell?
- 6. ¿Cómo hago que Flask SQLAlchemy reutilice las conexiones de db?
- 7. Cómo matar las conexiones de MySQL
- 8. ¿Cómo cerrar conexiones inactivas en PostgreSQL automáticamente?
- 9. ¿Con qué frecuencia debo cerrar las conexiones a la base de datos?
- 10. ¿Cuándo debería abrir y cerrar las conexiones de MongoDB?
- 11. Cómo gestiona Zend DB Conexiones de base de datos
- 12. Android SQLite DB Cuándo cerrar
- 13. ¿Cómo se comportan las transacciones distribuidas con múltiples conexiones al mismo DB en un entorno enhebrado?
- 14. ¿Realmente necesita un grupo de conexiones db para unicornios?
- 15. ¡Se están quedando sin conexiones DB!
- 16. agregando un ID único y PK a las tablas existentes
- 17. c3p0 cómo cerrar todas las conexiones a la base de datos y volver a abrirlas cuando sea necesario?
- 18. Las conexiones MongoDB siguen aumentando
- 19. ¿Buenas prácticas para abrir/cerrar conexiones en una aplicación asp.net?
- 20. ¿Cómo forzar a una SqlConnection a cerrar físicamente, mientras usa la agrupación de conexiones?
- 21. ¿Cuándo debería cerrar la conexión db?
- 22. Crear un socket restringido a las conexiones de localhost solo
- 23. cómo cerrar las conexiones subyacentes después de la captura de tiempo de espera HttpWebRequest
- 24. ¿Qué pasará con las conexiones existentes cuando cambie entre 3g/wifi?
- 25. cómo cerrar las pestañas ie8
- 26. ¿Cómo agrego una columna en Ongrade y establezco las filas existentes a un valor particular?
- 27. ¿Cómo encontrar fugas en la conexión del grupo de conexiones de db?
- 28. ¿Cómo veo las conexiones de SQL Server activas?
- 29. Cómo manejar las conexiones de bases de datos en Qt?
- 30. ¿Qué sucede cuando las conexiones a MongoDB no están cerradas?
duplicado posible: [? ¿Cómo se puede matar a todas las conexiones actuales a una base de datos de SQL Server 2005] (http://stackoverflow.com/questions/11620/how-do-you-kill-all-current-connections-to-a-sql-server-2005-database) – zimdanen