Daniel Calbimonte

Cómo correr múltiples consultas usando Central Management Server

October 2, 2016 by

Introducción

Cuando usted tiene miles de SQL Servers, es muy difícil administrarlos todos. Este artículo mostrará algunos consejos para ayudarle en este tipo de tareas.

En este nuevo artículo mostraremos cómo correr scripts T-SQL contra múltiples servidores usando SQL Server Management Studio (SSMS). Para hacer esto, usaremos Central Management Server. La idea principal de esta característica es administrar múltiples servidores en una manera centralizada usando consultas o políticas. Esta característica está disponible en SQL Server 2008 o versiones posteriores y no puede ser aplicada en versiones más antiguas.

Requerimientos

  • SQL Server 2008 o posterior (en este ejemplo estamos usando SQL Server 2014)
  • Estamos usando 2 instancias SQL locales con la base de datos AdventureWorks instalada en cada instancia.

Iniciando

  1. Abra SSMS.
  2. En el menú, vaya a View;Registered Servers


    Figura 1. Registered Servers

  3. Usted puede crear un Nuevos Grupos de Servidores o usar la carpeta actual Local Server Groups. En este ejemplo, vamos a usar el grupo de carpetas existente y añadir New Server Registration a este grupo.


    Figura 2. New Server Registration

    Usted puede añadir la información de autenticación de los servidores para conectarse a ellos. Usted puede probar la conexión y añadir una descripción.


    Figura 3. Propiedades de conexión

  4. Usted puede opcionalmente definir en la pestaña Connection Properties a qué base de datos conectarse por defecto, el protocolo de red (TCP-IP, Memoria Compartida o Canalizaciones con Nombre). Usted también puede definir el tamaño del paquete. Si ejecuta muchas operaciones en masa, puede que sea conveniente incrementar el tamaño del paquete. Si no realiza muchas operaciones, la otra mano puede reducir el tamaño del paquete para incrementar la eficiencia..

    Usted también puede especificar el tiempo de espera de la conexión y de la ejecución. También es posible encriptar la conexión y seleccionar un color personalizado.


    Figura 4. Las Propiedades de Conexión

  5. Repita los pasos 3, 4 y 5 para añadir todos los SQL Servers disponibles.
  6. Una vez que todos los SQL Servers son añadidos, haga clic derecho en Server Group y seleccione New Query. . Con esta opción, usted puede correr una consulta T-SQL en múltiples SQL Servers.

    Figura 5. Corriendo una Consulta

  7. Corramos una consulta simple mostrando los nombres del servidor:

  8. La consulta mostrará los diferentes nombres del servidor.

    Figura 6. Los Nombres de SQL Server

  9. Usted también puede crear una base de datos en cada SQL Server:

  10. Si usted corre la consulta, obtendrá un mensaje de éxito o error.


    Figura 7. Creando Bases de Datos

  11. Usted también puede verificar sesiones, usuarios, bloques de procesos usando el procedimiento de sistema sp_who2:


    Figura 8. Los usuarios actuales, sesiones y procesos de todas las instancias SQL Server

  12. Si usted tiene las mismas bases de datos en el Servidor con las mismas tablas, usted puede verificar la fragmentación en todos los servidores. El siguiente ejemplo muestra cómo revisar que el porcentaje de fragmentación promedio sea más alto que 30% en la tabla Person.Address de la base de datos AdventureWorks2014:

  13. Usted también puede verificar el estado de los trabajos de SQL Server Agent. Por ejemplo, para verificar los trabajos SQL que fallaron en todas las instancias SQL Server, usted puede usar la siguiente consulta T-SQL:

  14. La información del historial de trabajos está en la tabla de sistema sysjobhistory; run_status muestra el estado del trabajo. Si el estado del trabajo es 0, significa que el trabajo falló. Si el estado es 1, significa que el trabajo corrió exitosamente. 2 es que el trabajo reintentó y 4 que el trabajo fue cancelado.


    Figura 9. El estado de los trabajos

  15. Otra consulta popular es para ver el tamaño de todas las bases de datos al mismo tiempo. El tamaño de base de datos puede ser obtenido desde sys.master_files. En la tabla de sistema sys.databases usted puede obtener todas las bases de datos. Usted suma todos los tamaños de los archivos porque una base de datos puede tener múltiples archivos de datos y registros. El tipo 0 son archivos de datos y el tipo 1 son archivos de registros. La consulta sería la siguiente:

  16. El resultado de la consulta mostrará los archivos de datos y registros de todas las bases de datos de todas las instancias:


    Figura 10. Los tamaños de archivos de datos y registros

  17. El siguiente comando habilitará las opciones avanzadas en todos los SQL Servers:

  18. Una vez habilitado, habilitaremos la opción avanzada con xp_cmdshell. Este procedimiento almacenado extendido permite correr la línea de comandos desde el T-SQL. Es una característica muy poderosa que funcionará dependiendo de los privilegios de la cuenta usada para conectarse en el paso 3 a los servidores. Usted necesitará algunos privilegios administrativos para correr el comando. Habilitemos el procedimiento xp_cmdshell primero:

  19. Xp_cmdshell es un comando muy poderoso, pero también peligroso por razones de seguridad. Es por eso que está deshabilitado por defecto. El siguiente ejemplo crea una carpeta llamda backupfolder en el disco c:

  20. Si todo salió bien, usted tendrá una nueva carpeta en el Sistema Operativo:


    Figura 11. La carpeta backupsfolder creada

  21. Finalmente, corramos la copia de seguridad en la carpeta creada:

  22. Si todo está bien, usted tendrá una copia de seguridad creada para todas las instancias SQL Server.


    Figura 12. La copia de seguridad de la base de datos

Conclusión

En este capítulo mostramos cómo correr diferentes consultas en múltiples instancias de SQL Server. Verificamos los nombres del servidor, creamos una base de datos en todas las instancias de SQL Server, verificamos los usuarios, sesiones y procesos actuales, verificamos la fragmentación mayor a 30 de una tabla específica en todas las instancias, también verificamos si los Trabajos de SQL Agent tienen algunos errores en la ejecución. Finalmente, habilitamos las opciones de configuración avanzada y creamos una carpeta en todos los SQL Servers. El último paso fue crear la copia de seguridad en la carpeta nueva. Como puede ver, administrar todos los servidores en una manera centralizada puede ser una tarea sencilla.

Usted también puede aplicar políticas SQL a múltiples Servidores al mismo tiempo. El artículo The evaluating policies on multiple instances le mostrará cómo hacerlo.

Daniel Calbimonte
168 Views