Problema: Uno de los discos de la unidad de la base de datos de SQL Server en producción se está quedando sin espacio. Tenemos otras unidades disponibles con mucho más espacio, por lo que queremos mover todos los archivos de la base de datos de SQL Server a la otra unidad. Sin embargo, no podemos desvincular la base de datos para mover los archivos porque la base de datos está utilizando la replicación de la base de datos y detener la replicación y reconfigurarla no es una opción, ya que requeriría un esfuerzo significativo para recrearla nuevamente, ya que las bases de datos principal y espejo se encuentran en dos centros de datos diferentes. Entonces, ¿cómo podemos mover los archivos de la base de datos de SQL Server sin necesidad de detener y recrear la replicación de la base de datos?
Solución: Como sabrá, los metadatos de la base de datos de SQL Server se almacenan en la base de datos maestra, que es necesaria durante el inicio del servicio de SQL Server e incluye la ubicación de los archivos físicos para cada base de datos. La ubicación de los archivos de la base de datos (es decir, la ruta) se puede ver en la pestaña Archivos de la ventana Propiedades de la base de datos en SQL Server Management Studio, además de los nombres lógicos y físicos de los archivos de la base de datos.
También puede obtener esta información consultando estas tablas del sistema:
-- muestra información de todas las bases de datos SELECT sd.name as NombreBD, saf.name as NombreLógico, saf.filename FROM master.sys.sysaltfiles saf INNER JOIN master.sys.sysdatabases sd ON saf.dbid = sd.dbid -- muestra información de archivos para la base de datos actual SELECT * FROM sys.database_files
Cambiar la ruta del archivo de la base de datos para una replicación de la base de datos de SQL Server: La ruta del archivo se puede cambiar aplicando el comando ALTER DATABASE en la base de datos maestra. Este cambio tendrá efecto después de reiniciar el servicio de SQL Server. La sintaxis del comando es la siguiente:
USE master GO ALTER DATABASE MODIFY FILE (NAME = NOMBRE_ARCHIVO_LÓGICO, FILENAME = 'la nueva ubicación')
Ejemplo para cambiar la ruta del archivo de la base de datos de SQL Server para una base de datos espejo: Supongamos que queremos mover la base de datos MSSQLTipsDemo desde la ubicación actual a la unidad G:, sin tener que eliminar la replicación de la base de datos. Siga estos pasos:
Paso 1 – En el servidor principal, use la instrucción ALTER DATABASE en la base de datos maestra para mover los archivos de la base de datos a la unidad G:. Para nuestro ejemplo, sería:
USE master GO ALTER DATABASE MSSQLTipsDemo MODIFY FILE (NAME = MSSQLTipsDemo, FILENAME = 'G:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\MSSQLTipsDemo.mdf') ALTER DATABASE MSSQLTipsDemo MODIFY FILE (NAME = MSSQLTipsDemo_log, FILENAME = 'G:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\MSSQLTipsDemo_log.ldf')
Paso 2 – Detenga el servicio de SQL Server. Es mejor hacerlo utilizando SQL Server Configuration Manager.
Paso 3 – Mueva los archivos de la base de datos a la nueva ubicación. Es mejor copiar y pegar los archivos, y luego, una vez que su base de datos esté en funcionamiento nuevamente, puede eliminar los archivos antiguos.
Paso 4 – Inicie el servicio de SQL Server y puede verificar que la replicación esté sincronizada y que la base de datos funcione correctamente.