Cambio de ficheros en SQL Server

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.mdf
  • F:\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
cambio de ficheros en 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.mdfBD_PRINCIPAL_old.mdf
  • F:\LOG\BD_PRINCIPAL_log.ldfBD_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.mdfBD_PRINCIPAL.mdf
  • F:\LOG\BD_NUEVA_log.ldfBD_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 base
  • MODIFY 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *