¿Cómo funcionan los grupos de disponibilidad con trabajos programados y paquetes SSIS?

8

Tengo 2 servidores SQL configurados con una base de datos en un grupo de disponibilidad AlwaysOn.

También tengo configurados trabajos que se ejecutan en la base de datos. Durante una conmutación por error, ¿cómo me aseguro de que los trabajos continuarán ejecutándose en el servidor secundario? ¿Debo instalar los trabajos y los paquetes SSIS en ambas máquinas y deshabilitarlos manualmente en la máquina secundaria ... luego habilitarlos manualmente en caso de una conmutación por error? ¿O hay una funcionalidad incorporada para manejar esto?

Juan
fuente

Respuestas:

4

Sí, deberá crear los trabajos en cualquier otra réplica que desee que se ejecuten esos trabajos específicos si fueran la réplica principal.

Deberá crear su propia lógica para si / cuándo se ejecutará cada trabajo del Agente SQL Server . Por ejemplo, ¿desea ejecutar un trabajo solo si la instancia actual es la réplica principal de un grupo de disponibilidad en particular? Tendrá que poner eso en su trabajo. No se puede cubrir automáticamente, ya que eso eliminaría la flexibilidad de AlwaysOn AG. Si desea que se deshabiliten en las réplicas secundarias depende completamente de usted, qué hacen esos trabajos y cómo / cuándo / si desea que se ejecuten.

Recuerde, el servidor secundario de réplica no es solo un servidor en espera que espera la conmutación por error. Podría ser un servidor totalmente funcional y accesible. Debido a esto, tener cada trabajo sin hacer nada sería una gran discapacidad.

Entonces, sí, necesitará llevar nuestros trabajos a otras réplicas y usar cierta lógica para determinar si el trabajo debe continuar la ejecución cuando se inicia.

Por ejemplo, los trabajos de respaldo pueden aprovechar la función sys.fn_hadr_backup_is_preferred_replica al determinar si la réplica actual es la preferida para una base de datos en particular. Esto derivará cómo tiene su grupo de disponibilidad configurado para las preferencias de copia de seguridad.

Thomas Stringer
fuente
Eso suena prometedor. Solo quiero que los trabajos se ejecuten en el servidor primario (cualquier servidor que pueda estar en ese momento).
John
1

Encontré un poco de frustración similar con la documentación en los Libros en línea que decía 'cuando programe su trabajo, agregue lógica para ejecutar solo en el primario' pero no dice cómo hacerlo. El sys.fn_hadr_backup_is_preferred_replica es súper agradable para los trabajos de respaldo, pero no parece haber una función similar para 'es primario' o lo que sea. Afortunadamente, puedes obtener esa información de algo como esto:

select 
  DB_NAME(database_id),role_desc
from 
  sys.dm_hadr_availability_replica_states a
inner join 
  sys.dm_hadr_database_replica_states d
on 
  a.replica_id = d.replica_id
  and
  a.group_id = d.group_id
where 
  database_id = DB_ID()
and 
  d.is_local = 1

Eso solo le haría saber el papel que tiene la base de datos actual.

sdcharle
fuente