Cómo restaurar una copia de seguridad en SQL Server cuando la base de datos está en uso

Cómo restaurar una copia de seguridad en SQL Server cuando la base de datos está en uso

Evitar errores de “base de datos en uso” en SQL Server Management Studio

En ocasiones, al intentar restaurar una copia de seguridad desde SQL Server Management Studio (SSMS), el sistema muestra errores indicando que la base de datos está siendo utilizada por otros usuarios o conexiones activas.

Una forma rápida de solucionarlo es forzar temporalmente el modo SINGLE_USER, cerrando todas las conexiones abiertas antes de ejecutar la restauración.

Este script permite automatizar el proceso:

USE master;
GO

ALTER DATABASE [mibasededatos]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

RESTORE DATABASE [mibasededatos]
FROM DISK = 'C:\backup\copia_aaammdd_01.bak'
WITH REPLACE;
GO

¿Qué hace cada parte del script?

  • SET SINGLE_USER: pone la base de datos en modo usuario único.
  • WITH ROLLBACK IMMEDIATE: cierra inmediatamente las conexiones activas y cancela procesos abiertos.
  • RESTORE DATABASE: restaura la copia de seguridad indicada.
  • WITH REPLACE: sobrescribe la base de datos existente.

Importante antes de ejecutarlo

  • Asegúrate de que ningún usuario esté trabajando en la base de datos.
  • Comprueba que la ruta del archivo .bak es correcta.
  • El usuario de SQL Server debe tener permisos sobre la carpeta del backup.
  • Usa este procedimiento con precaución en entornos de producción.

Este método es especialmente útil en servidores de desarrollo, pruebas o entornos donde hay conexiones persistentes que impiden restaurar copias desde la interfaz gráfica de SQL Server Management Studio.

Como saber el tamaño de las tablas en SQL Server

Como saber el tamaño de las tablas en SQL Server

En bases de datos con muchas tablas, podemos necesitar saber cuales son las tablas que más registros tienen y más espacio ocupan, con el fin de mejorar el rendimiento de la base de datos.

Para SQL Server, los datos de las bases de datos de usuarios se encuentran en tablas del sistema. Podemos usar el siguiente QRY para ver el espacio que ocupan todas las tabals de una base de datos en concreto.

USE Mi_base_de_datos;
GO

SELECT

t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB

FROM

sys.tables t

INNER JOIN

sys.indexes i ON t.OBJECT_ID = i.object_id

INNER JOIN

sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id

INNER JOIN

sys.allocation_units a ON p.partition_id = a.container_id

LEFT OUTER JOIN

sys.schemas s ON t.schema_id = s.schema_id

GROUP BY

t.Name, s.Name, p.Rows

ORDER BY

TotalSpaceKB DESC

 
Imagen de Freepik