Cómo desplegar bases de datos SQL en muchas instancias y bases de datos SQL Server

Cuando el trabajo en una base de datos en un ambiente de desarrollo es completado, se requiere que los desarrolladores manden la nueva versión para pruebas. Si las pruebas son hechas en una o más máquinas – esto no es un problema. Sin embargo, si hay necesidad de probar la nueva versión en 10 o 15 máquinas (con diferentes sistemas operativos, versiones de SQL Server o paquetes de servicio instalados), esto puede ser tedioso.

Otra situación donde los scripts necesitan ser ejecutados en múltiples servidores es si hay muchas bases de datos de diferentes clientes que fueron todos derivados desde la misma base de datos y comparten muchos objetos comunes. Cualquier cambio hecho en desarrollo debe ser extendido a todos los usuarios.

Desplegar múltiples scripts SQL a múltiples servidores manualmente puede ser una tarea que consume mucho tiempo, cuando pasos idénticos deben ser repetidos una y otra vez hasta que todas las bases de datos sean actualizadas. Esto es especialmente cierto durante la fase de desarrollo y pruebas cuando hay muchos cambios que necesitan ser desplegados para pruebas cada día.

El desafío es cómo desplegar múltiples scripts a múltiples servidores rápidamente y de forma segura.

Use SQLCMD

  1. Cree un archivo batch que ejecute los scripts requeridos contra diferentes instancias SQL Server.
    El archivo batch debería verse así:

    :CONNECT <server1>\,<instance1>
    --SQL1 to execute
    GO
    :CONNECT <server2>\,<instance2>
    --SQL2 to execute
    GO
    

  2. Ejecute el archivo batch usando SQLCMD:

    SQLCMD –I D:\Scripts\BatchMultiple.bat

Una desventaja de este método es que requiere acciones numerosas y que consumen mucho tiempo, lo cual es proclive a error. Cada vez que nuevos scripts son ejecutados, el archivo batch debe ser modificado o uno nuevo debe ser creado.

Use Server groups

  1. Inicie SQL Server Management Studio
  2. En el menú View, seleccione la opción Registered Servers:

  3. Haga clic derecho en Local Server Groups y seleccione New Server Group:

  4. Ingrese un nuevo nombre de grupo de servidores y una descripción:

  5. Haga clic en el botón OK
  6. Haga clic derecho en el grupo de servidores Testing y seleccione New Server Registration::

  7. Ingrese el nombre del Servidor, un tipo de autenticación y credenciales:

  8. Compruebe y grabe Server registration
  9. Repita los pasos 6 al 8 para añadir más registros de Servidores
  10. Haga clic derecho en el grupo de servidores Testing y seleccione New Query

  11. Pegue el SQL para la ejecución contra múltiples bases de datos en una ventana de Editor de Consultas:

    USE Adventureworks2014;
    ALTER TABLE TestTabM
    ADD colb int;
    

  12. Presione la Tecla F5 para ejecutar el script
    El siguiente mensaje se mostrará:

    Command(s) completed successfully. (2 servers)

    SQL fue ejecutado contra todas las bases de datos Adventureworks2008 en el grupo Server (en este caso – 2).

Las desventajas de este método es que los scripts puede ser desplegados sólo contra todos los servidores registrados, Los nombres de las bases de datos deben ser idénticos en todos los servidores registrados, y ejecutar múltiples scripts requiere abrirlos manualmente y pegarlos en la ventana de Editor de Consultas uno por uno.

Use ApexSQL Build

ApexSQL Build es una herramienta de despliegue de bases de datos SQL, la cual construye nuevas bases de datos o actualiza las existentes empacando scripts, carpetas de scripts, instantáneas de bases de datos y scripts bajo control de fuente. Se asegura de un despliegue libre de errores y habilita la ejecución de scripts SQL contra múltiples Servidores SQL simultáneamente creando listas personalizadas de bases de datos en diferentes instancias SQL Server y listas de SQL que deberían ser ejecutadas.

  1. Inicie ApexSQL Build
  2. Seleccione la acción Execute scripts on multiple databases action:

    Execute scripts on multiple databases

  3. Haga clic en el botón Add y elija la opción Add scripts:

    Add scripts option

  4. Seleccione los scripts para la ejecución y haga clic en el botón Open. Los scripts son listados en el panel a la izquierda:

  5. Haga clic en Save list en el menú para grabar la lista de scripts:

    Save list button

  6. Para crear una lista de bases de datos contra la cual los scripts serán ejecutados, seleccione la opción Create new en el menú desplegable Database deployment a la derecha:

    Database deployment dropdown list

  7. En el diálogo Edit database deployment list, haga clic en el botón Add server:

  8. Ingrese el nombre del Servidor, el tipo de autenticación y las credenciales. Seleccione la opción Remember password para evitar añadir contraseñas cada vez que corra la ejecución de scripts:

  9. Expanda cada nodo SQL Server, seleccione las bases de datos y haga clic en el botón Add para añadirlos a la lista de despliegue de la base de datos:

  10. Cuando todas las bases de datos estén añadidas a la lista, haga clic en el botón Save:

    ApexSQL Build Execute scripts on multiple databases

  11. Haga clic en el botón Execute:

    Execute button

    La barra de progreso de la ejecución se mostrará:

    Cuando el despliegue finalice, un resumen será mostrado:

    The deployment summary

El despliegue de múltiples SQL en muchas diferentes instancias y bases de datos SQL Server puede ser fácil y sin errores. Seleccione una base de datos en cualquier SQL Server, seleccione los scripts que desea ejecutar, grábelos a listas y reúselos cuando usted desee.

Traductor: Daniel Calbimonte

noviembre 14, 2015