Aprender sobre SQL Server puede venir de lugares inesperados, y a veces es a través de mensajes de error. En esta publicación de blog, exploraremos uno de esos mensajes de error que un lector encontró recientemente: “RESTORE no puede procesar la base de datos ‘DBProductDevelopment’ porque está siendo utilizada por esta sesión. Se recomienda utilizar la base de datos maestra al realizar esta operación”.
Tras una investigación más detallada, se descubrió que este mensaje de error no está pidiendo restaurar primero la base de datos maestra. En cambio, indica que el comando de restauración se está ejecutando en la misma base de datos para la cual se está intentando la restauración. Para resolver este problema, debemos cambiar el contexto a la base de datos maestra antes de realizar la restauración.
Echemos un vistazo a un ejemplo para entender mejor este error:
CREATE DATABASE SQLAuthority
GO
USE SQLAuthority
GO
BACKUP DATABASE SQLAuthority TO DISK = 'SQLAuthority.bak'
GO
RESTORE DATABASE SQLAuthority FROM DISK = 'SQLAuthority.bak' WITH REPLACE
GO
En el ejemplo anterior, SQL Server no puede completar la operación de restauración porque la base de datos de usuario tiene una conexión activa dentro de la sesión actual. Para resolver esto, podemos usar el comando T-SQL USE para cambiar la conexión de la base de datos a una base de datos diferente antes de intentar la restauración.
Aquí está el script modificado con el cambio necesario:
/* Script modificado */
USE MASTER
GO
RESTORE DATABASE SQLAuthority FROM DISK = 'SQLAuthority.bak' WITH REPLACE
GO
Al cambiar el contexto a la base de datos maestra antes de ejecutar el comando de restauración, podemos restaurar la base de datos con éxito sin encontrar el error.
Es importante tener en cuenta que este error es específico para el escenario en el que el comando de restauración se está ejecutando en la misma base de datos. Si encuentras un error similar en tu entorno de SQL Server, asegúrate de verificar si el comando de restauración se está ejecutando en el contexto correcto.
¿Alguna vez has enfrentado un error similar en tus entornos de SQL Server? No dudes en compartir tus experiencias y cualquier información adicional en la sección de comentarios a continuación.