La restauración de SQL falla con "La base de datos ya está abierta y solo puede tener un usuario a la vez"
Summary: Artículo de la base de conocimientos (KB) que proporciona una solución para la falla de restauración de la base de datos SQL cuando los usuarios acceden a la base de datos.
Symptoms
La restauración de la base de datos de SQL a la ubicación original falla con errores similares a los que se muestran a continuación:
avsql Error <40258>: sqlconnectimpl_smo::get_database_data_names Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. ---> System.Data.SqlClient.SqlException: Database 'Avamar1' is already open and can only have one user at a time.
Cause
Uno o más usuarios o conexiones están accediendo a la base de datos a la que se está restaurando. La base de datos original no se puede sobrescribir si hay usuarios o conexiones que acceden a la base de datos.
Resolution
Cambie el estado de la base de datos del modo multiusuario al modo de usuario único.
Uso de SQL Server Management Studio
Para establecer una base de datos en modo de usuario único:
-
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos de SQL Server y, a continuación, expanda esa instancia.
-
Haga clic con el botón secundario en la base de datos que desea cambiar y, a continuación, haga clic en Propiedades.
-
En el cuadro de diálogo Propiedades de la base de datos, haga clic en la página Opciones.
-
En la opción Restringir el acceso, seleccione Único.
-
Si hay otros usuarios conectados a la base de datos, aparece un mensaje de Open Connections. Para cambiar la propiedad y cerrar todas las demás conexiones, haga clic en Sí.
Uso de Transact-SQL
Para establecer una base de datos en modo de usuario único:
-
Conéctese al motor de base de datos.
-
En la barra Standard, haga clic en New Query.
-
Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en el botón "Execute". En este ejemplo, se configura la base de datos en
SINGLE_USERpara obtener acceso exclusivo. A continuación, en el ejemplo, se establece el estado de la base de datos de Avamar1 enREAD_ONLYy devuelve el acceso a la base de datos a todos los usuarios. La opción de rescisiónWITH ROLLBACK IMMEDIATEse especifica en el primerALTER DATABASEdeclaración. Esto hace que todas las transacciones incompletas se reviertan y cualquier otra conexión a la base de datos de Avamar1 se desconecte inmediatamente.
SQLCopy
USE master; GO ALTER DATABASE Avamar1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO ALTER DATABASE Avamar1 SET READ_ONLY; GO ALTER DATABASE Avamar1 SET MULTI_USER; GO
Referencia:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Una vez hecho esto, vuelva a intentar la restauración de la base de datos SQL a la ubicación original.