Saltar al contenido

Diario de un DBA

Problemas y soluciones para SQL Server

Menú
  • Inicio
  • Consultoria gratuita
  • tempdb
  • Curso Azure DP-300
  • Rendimiento
  • Seguridad
  • Sobre Mi
Menú

Comprobar si una instancia es la principal en un AG en SQL Server

Publicada el julio 22, 2022abril 15, 2023 por solracamo

Contenido del post:

Toggle
  • Usar un script para comprobar si una instancia SQL Server es la principal en un AG
  • Configurar los jobs para comprobar la replica primaria

Un cliente nos ha abierto un ticket para hacernos una pregunta sobre un disco que se había quedado sin espacio y que contenía los logs de las bases de datos, después de responderle con algunas recomendaciones y que nos confirmase que todo estaba bien nos añadió lo siguiente.

«Ya que estamos aquí, podría haceros otra pregunta…?» Jaja que casualidad que estamos aquí ya verdad? Pues supongo que si que puedes. Ahí vamos.

El cliente nos explica que tiene un clúster de alta disponibilidad en el que está instalando los jobs de mantenimiento de Ola Hallengren (si no sabéis lo que son, os dejo esta entrada en la que lo explico) y quiere saber si tiene que instalarlos en todos los nodos del clúster (spoiler, si).

Una vez le respondemos nos pregunta si hay alguna manera de instalar estos jobs pero que sólo se ejecuten en la instancia principal, esto evitará errores ya que las bases de datos en las replicas secundarias no son accesibles. Nuestra respuesta es que tiene que añadir un paso en todos los jobs para comprobar si la instancia es principal o no.

Os explico cómo, es bastante fácil.

Usar un script para comprobar si una instancia SQL Server es la principal en un AG

Comprobar manualmente si la instancia es la principal o no es bastante sencillo, simplemente abrimos el panel de control del grupo de alta disponibilidad y leemos con nuestros ojos cuál es la replica principal y cual es la secundaria.

Cuando la comprobación la tiene que hacer un job que se ejecuta automáticamente es más dificil (los jobs no tienen ojos) y tendremos que añadir un paso extra para comprobarlo.

El script que usaremos es el siguiente:

IF (SELECT  a.role_desc
    FROM    sys.dm_hadr_availability_replica_states AS a
            JOIN sys.availability_replicas AS b ON b.replica_id = a.replica_id
    WHERE   a.is_local = 1) <> 'PRIMARY'
BEGIN
    --Unable to run the job on the secondary
    THROW 50001, 'Unable to execute job on secondary node', 1;
END;

Configurar los jobs para comprobar la replica primaria

Haremos click con el botón derecho encima del job y añadiremos un nuevo paso de la siguiente manera. Obviamente lo pondremos el primero ya que queremos que haga la comprobación y si la instancia no es la primaria no se ejecute nada más.

SQL Server job

Dentro del job añadiremos el nombre del paso y lo que va a ejecutar (el script anterior).

SQL Server job

En avanzado lo configuraremos de la siguiente manera:

SQL Server job

On success action: Go to next step. Si la instancia es primaria el script hará la ccomprobación y  permitirá que se ejecute el job

On failure action: Quit the job reporting success. El step ejecutará el THROW que hará que se muestre como un paso fallido y por lo tanto la ejecución del job se detendrá.

Lo configuramos de esta forma para que no muestre que el job ha fallado ya que no queremos crear alerta falsas en los monitores, pero podéis configurarlo para que si se muestre.

Y esto es todo, así de rápido se puede añadir esta configuración que os salvará de bastante falsas alarmas.

Espero que esta información haya sido útil y no olvides que debes configurar este paso en todos los jobs.

 

Deja una respuesta Cancelar la respuesta

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

Consultoria Gratis

¿Tienes un problema o una consulta sobre tu servidor SQL Server? ¿Necesitas hacer algún tipo de mantenimiento o tarea en tu instancia, pero no tienes claro cómo hacerlo?

Envíame un email con tu caso y te contestaré lo antes posible de forma totalmente gratuita.

Puedes utilizar el formulario que encontrarás haciendo click aquí.

Sobre mi

Efectivamente, soy un muñeco de slack con la camiseta de Fernando Alonso en Renault, pero también soy una DBA mid level que vive y trabaja en inglaterra como consultor SQL Server.

El objetivo de este blog es escribir los problemas con los que me he ido encontrando y cómo los solucioné. Si estas soluciones han servido para mí, es posible que también lo hagan para ti, ¿no?

Otras soluciones

  • Recuperar la password de la cuenta SA en SQL Serveroctubre 5, 2024
  • Always On en SQL Server. Todo lo que necesitas saberagosto 24, 2024
  • Recuperar una tabla borrada en SQL Serveragosto 18, 2024
  • Mover bases de datos a otro disco en SQL Serveragosto 11, 2024
  • Comprobar los últimos backups tomados en una instancia SQL Serverjunio 29, 2024
  • Comprobar fragmentación en SQL Serverjunio 23, 2024

Curso Azure DP-300 Gratis

  • Azure DP-300 curso en Español – Parte 1noviembre 17, 2022
  • Crear una máquina virtual con SQL server en Azurenoviembre 17, 2022
  • Crear un servidor SQL Server en Azure.noviembre 22, 2022
  • Azure DP-300 curso en Español – Parte 2noviembre 24, 2022
  • Azure DP-300 curso en Español – Parte 3diciembre 1, 2022
  • Azure DP-300 curso en Español – Parte 4diciembre 14, 2022

Consulta las páginas que nadie consulta:
Privacidad
Cookies

Escríbeme!
Contacto

© 2025 Diario de un DBA
x