Hola a todos, hoy vamos a compartir un script muy útil de cara a migraciones de servidores y movimientos de bases de datos. Antes o después, los profesionales de bases de datos, nos tenemos que enfrentar a movimientos de bases de datos entre servidores. Prepara el script para una base de datos puede ser sencillo, pero, se complica si se quieren mover varias bases de datos. Por ello vamos a compartiros un script de restauración dinámico SQL Server. Este script se encargará de generar el código para mover una base de datos, 10, o 200.
¿Para qué necesito un Script de restauración dinámico de SQL Server?
Si no te dedicas al mundo de las bases de datos, posiblemente nunca. En caso contrario, te servirá para varios casos:
- Movimientos de bases de datos entre entornos de desarrollo y producción
- Migraciones de servidores
- Cambios de versión de SQL Server
- Clonar bases de datos en el mismo servidor
- Clonar bases de datos en otro servidor
- Mover base de datos a otra instancia
Son solo unos ejemplos, pero seguramente te pueda ayudar en más situaciones.
¿Qué hace realmente el script y cómo ejecutarlo?
Este script se encarga de preparar el código de backup y restore de una o varias bases de datos, pero no lo ejecuta, por lo que se puede ejecutar sin miedo en entornos productivos.
Este script debe ejecutarse en el servidor «origen». Esto es así, porque genera dinámicamente los ficheros lógicos de las bases de datos. Estos ficheros lógicos de las bases de datos, deberían ser los mismos en caso de bases de datos nuevas. Pero es muy común encontrarse con nombres diferentes a los que corresponderían. Esto es debido a que suelen ser copias de bases de datos antiguas renombradas.
Está dividido en dos partes. El script de backup y el script de restore. La primera parte, el script de backup, se encarga de preparar el backup con compresión. Para ello, solo habría que cambiar las rutas de backup.
La segunda parte, se encarga de generar el script de restore. Este script habría que ejecutarlo en el servidor o instancia de destino, nunca en la misma instancia. El script de restore, incluye la opción REPLACE, por lo que remplazaría la base de datos origen si se ejecuta en la misma instancia.
Para que se genere de forma correcta, es necesario activar en SSMS una opción para que mantenga los saltos de línea en el script, de lo contrario al pegarlo no funcionaría al estar en la misma línea. Deberemos ir a Tools –> Options –>
Y marcar esta opción:
Una vez que tenemos todo listo, lo ejecutamos.
Ejecución del script
select ('--' + a.databasename + ' print '' ======================================== Haciendo backup de ' + a.databasename + ' ======================================== '' GO BACKUP DATABASE ' + a.databasename + ' TO DISK=''F:\migracion\' + a.databasename + '.bak'' WITH INIT, STATS = 10, COPY_ONLY, COMPRESSION GO') as script_backup, ('--' + a.databasename + ' print '' ======================================== Restaurando ' + a.databasename + ' ======================================== '' GO USE master GO RESTORE DATABASE ' + a.databasename + ' FROM DISK = ''\\servidor_backup\migracion\' + a.databasename + '.bak''' + ' WITH MOVE ''' + a.ficherodatos + ''' TO ''F:\data\' + a.databasename + '.mdf'',' + ' MOVE ''' + b.ficherolog + ''' TO ''F:\log\' + a.databasename + '_log.ldf'',' + 'STATS = 10, RECOVERY, REPLACE GO ') as script_restore from ( select db.name databasename, mf.name ficherodatos FROM sys.master_files mf INNER JOIN sys.databases db ON db.database_id = mf.database_id where mf.database_id > 4 and type_desc='ROWS') a, (select db.name databasename, mf.name ficherolog FROM sys.master_files mf INNER JOIN sys.databases db ON db.database_id = mf.database_id where mf.database_id > 4 and type_desc='LOG') b where a.databasename=b.databasename and a.databasename IN ('DB1', 'DB2', 'DB3', 'DB4') order by a.databasename
Antes de probar en entornos productivos, recomendamos ejecutarlo previamente en entornos de prueba para garantizar un buen resultado.
Si quieres asegurar el éxito de tus migraciones confía en nuestro servicio de Consultoria SQL Server. Puedes contactarnos sin compromiso, en nuestra página de contacto.
¿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