El cambio de ficheros en SQL server de una base de datos por otra es una operación habitual en tareas de mantenimiento, migración o corrección de incidencias. Para garantizar la trazabilidad y la posibilidad de reversión, es recomendable conservar la base original renombrada (por ejemplo con sufijo _old) y asignar el nombre productivo a la nueva base.
Este proceso implica coordinar cambios a nivel de base de datos, nombres lógicos y ficheros físicos en disco.
Objetivo
Sustituir una base de datos existente por otra versión, dejando:
- La base original renombrada como respaldo (
_old) - La nueva base con el nombre productivo
- Los nombres lógicos alineados
- Los ficheros físicos (
.mdf,.ldf) coherentes con los nombres finales
Conceptos clave
Antes de ejecutar el procedimiento, es fundamental distinguir:
1. Nombre de la base de datos
Identificador lógico en SQL Server
Ejemplo: BD_PRINCIPAL, BD_PRINCIPAL_old
2. Nombre lógico de fichero
Nombre interno del fichero dentro de SQL Server
Ejemplo: BD_NUEVA, BD_NUEVA_log
3. Nombre físico
Archivo real en disco (Para ello nos podemos ayudar del comando sp_helpbd )
Ejemplo:
E:\DATOS\BD_PRINCIPAL.mdfF:\LOG\BD_PRINCIPAL_log.ldf
Estos tres niveles son independientes.
Requisitos previos para cambio de ficheros en SQL Server
- Backup realizado
- Sin conexiones activas
- Ejecutar desde
master - Verificar rutas de disco
- Confirmar permisos del servicio SQL Server

Procedimiento paso a paso para el cambio de ficheros en SQL Server
Renombrar la base original a _old
USE master;
GO
ALTER DATABASE [BD_PRINCIPAL]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [BD_PRINCIPAL] MODIFY NAME = [BD_PRINCIPAL_old];
GO
ALTER DATABASE [BD_PRINCIPAL_old]
SET MULTI_USER;
GO
Preparar los ficheros de la base antigua
USE master;
GO
ALTER DATABASE [BD_PRINCIPAL_old]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [BD_PRINCIPAL_old] SET OFFLINE;
GO
ALTER DATABASE [BD_PRINCIPAL_old]
MODIFY FILE (NAME = [BD_PRINCIPAL], FILENAME = 'E:\DATOS\BD_PRINCIPAL_old.mdf');
GO
ALTER DATABASE [BD_PRINCIPAL_old]
MODIFY FILE (NAME = [BD_PRINCIPAL_log], FILENAME = 'F:\LOG\BD_PRINCIPAL_old_log.ldf');
GO
Renombrar físicamente en Windows
E:\DATOS\BD_PRINCIPAL.mdf→BD_PRINCIPAL_old.mdfF:\LOG\BD_PRINCIPAL_log.ldf→BD_PRINCIPAL_old_log.ldf
Volver a poner la base antigua online
USE master;
GO
ALTER DATABASE [BD_PRINCIPAL_old] SET ONLINE;
GO
ALTER DATABASE [BD_PRINCIPAL_old] SET MULTI_USER;
GO
Preparar la base nueva para ser la productiva
USE master;
GO
ALTER DATABASE [BD_NUEVA]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [BD_NUEVA] MODIFY NAME = [BD_PRINCIPAL];
GO
ALTER DATABASE [BD_PRINCIPAL]
SET MULTI_USER;
GO
Ajustar los ficheros físicos de la nueva base
USE master;
GO
ALTER DATABASE [BD_PRINCIPAL]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [BD_PRINCIPAL] SET OFFLINE;
GO
ALTER DATABASE [BD_PRINCIPAL]
MODIFY FILE (NAME = [BD_NUEVA], FILENAME = 'E:\DATOS\BD_PRINCIPAL.mdf');
GO
ALTER DATABASE [BD_PRINCIPAL]
MODIFY FILE (NAME = [BD_NUEVA_log], FILENAME = 'F:\LOG\BD_PRINCIPAL_log.ldf');
GO
Renombrar físicamente en Windows
E:\DATOS\BD_NUEVA.mdf→BD_PRINCIPAL.mdfF:\LOG\BD_NUEVA_log.ldf→BD_PRINCIPAL_log.ldf
Volver a poner la nueva base online
USE master;
GO
ALTER DATABASE [BD_PRINCIPAL] SET ONLINE;
GO
ALTER DATABASE [BD_PRINCIPAL] SET MULTI_USER;
GO
Ajustar nombres lógicos
Base nueva
USE master;
GO
ALTER DATABASE [BD_PRINCIPAL]
MODIFY FILE (NAME = [BD_NUEVA], NEWNAME = [BD_PRINCIPAL]);
GO
ALTER DATABASE [BD_PRINCIPAL]
MODIFY FILE (NAME = [BD_NUEVA_log], NEWNAME = [BD_PRINCIPAL_log]);
GO
Base antigua
USE master;
GO
ALTER DATABASE [BD_PRINCIPAL_old]
MODIFY FILE (NAME = [BD_PRINCIPAL], NEWNAME = [BD_PRINCIPAL_old]);
GO
ALTER DATABASE [BD_PRINCIPAL_old]
MODIFY FILE (NAME = [BD_PRINCIPAL_log], NEWNAME = [BD_PRINCIPAL_old_log]);
GO
Este procedimiento permite sustituir una base de datos por otra de forma controlada, manteniendo trazabilidad y posibilidad de reversión. La clave está en respetar el orden de ejecución y diferenciar correctamente entre nombre de base, nombre lógico y nombre físico de los ficheros.
Errores comunes
Error 5030 (bloqueo exclusivo)
Causa: conexiones activas
Solución:
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
File activation failure
Causa: el fichero físico no existe o no coincide
Solución:
- verificar ruta
- renombrar fichero en disco
- reintentar
SET ONLINE
Confusión entre nombres
ALTER DATABASE [NombreBase]→ nombre de baseMODIFY FILE (NAME = [...])→ nombre lógico
¿No estas seguro de cambiar los ficheros físicos y lógicos?
No dudéis en poneros en contacto con nosotros en caso de necesitar ayuda en la gestión de vuestras bases de datos. Échale un vistazo a nuestros servicios de soporte y mantenimiento SQL Server y Oracle.
¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.
Sígue a GPS en LinkedIn
