SQL Server: acceso exclusivo a la base de datos

Muchas de las operaciones que se realizan sobre las bases de datos de SQL Server requieren el uso exclusivo de esta base de datos por parte del usuario que está ejecutando el proceso o la tarea, una de ella puede ser la restauración de la misma desde un backup. Por ser un requerimiento común es muy normal recibir este mensaje de error:

Exclusive access could not be obtained because the database is in use

Corregirlo no suele ser muy sencillo, más bien todo lo contrario y depende de los accesos que tenga esa base de datos, aquí os dejaré algunos pasos para identificar e intentar garantizar ese acceso exclusivo.

Lo primero que debemos hacer es terminar todas las conexiones existentes a la base de datos y ello lo haremos con la siguiente instrucción:

USE database
GO

ALTER DATABASE database SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

ALTER DATABASE database SET MULTI_USER
GO

También podemos ejecutar esta opción utilizando el procedimiento almacenado sp_dboption:

Use master
go
sp_dboption database, single, true
sp_dboption database, single, false

Como vemos esta instrucción pone a la base de datos en modo usuario único terminando todas las transacciones de manera automática y luego la restaura a su estado original sin ninguna transacción abierta en ella.

El problema vienen cuando tenemos tareas o programas que iteran con la base de datos constantemente los cuales aunque se terminan con la consulta anterior una vez la base de datos vuelve a su estado de multi usuario vuelven a acceder. Para identificar y cerrar o detener estas tareas o programas lo que debemos de utilizar es el Monitor de Actividad de SQL Server.

Sin-título-2

Sin-título-1

Una vez identificados debemos cerrar estas aplicaciones y de esa manera evitaremos este molesto error (exclusive access could not be obtained because the database is in use) para poder realizar nuestras tareas con normalidad.

Comentarios

Rogert Castillo ha dicho que…
Gracias, funciona a la perfección