Wie arbeiten Verfügbarkeitsgruppen mit geplanten Jobs und SSIS-Paketen?


8

Ich habe 2 SQL Server mit einer Datenbank in einer AlwaysOn-Verfügbarkeitsgruppe eingerichtet.

Ich habe auch Jobs eingerichtet, die für die Datenbank ausgeführt werden. Wie stelle ich während eines Failovers sicher, dass die Jobs weiterhin auf dem sekundären Server ausgeführt werden? Muss ich die Jobs und SSIS-Pakete auf beiden Computern installieren und manuell auf dem sekundären Computer deaktivieren ... und sie dann im Falle eines Failovers manuell aktivieren? Oder gibt es eingebaute Funktionen, um dies zu handhaben?

Antworten:


4

Ja, Sie müssen die Jobs auf allen anderen Replikaten erstellen, die diese spezifischen Jobs ausführen sollen, wenn sie das primäre Replikat wären.

Sie müssen eine eigene Logik erstellen, um festzustellen, ob / wann jeder SQL Server-Agent-Job ausgeführt wird . Möchten Sie beispielsweise einen Job nur ausführen, wenn die aktuelle Instanz das primäre Replikat einer bestimmten Verfügbarkeitsgruppe ist? Sie müssen das in Ihren Job stecken. Es kann nicht automatisch abgedeckt werden, da dies die Flexibilität der AlwaysOn AG beeinträchtigen würde. Ob Sie möchten, dass sie auf den sekundären Replikaten deaktiviert werden, liegt ganz bei Ihnen, was diese Jobs tun und wie / wann / ob sie ausgeführt werden sollen.

Denken Sie daran, dass der sekundäre Replikatserver nicht nur ein Standby-Server ist, der auf ein Failover wartet. Es könnte sich um einen voll funktionsfähigen, zugänglichen Server handeln. Aus diesem Grund wäre es eine große Behinderung, wenn jeder Job im Leerlauf sitzt.

Ja, Sie müssen Ihre Jobs auf andere Replikate übertragen und eine Logik verwenden, um festzustellen, ob der Job beim Start fortgesetzt werden soll.

Beispielsweise können Sicherungsjobs die Funktion sys.fn_hadr_backup_is_preferred_replica nutzen , indem ermittelt wird, ob das aktuelle Replikat das bevorzugte für eine bestimmte Datenbank ist. Dadurch wird abgeleitet, wie Sie Ihre Verfügbarkeitsgruppe für Sicherungseinstellungen eingerichtet haben.


Das klingt vielversprechend. Ich möchte nur, dass die Jobs auf dem Primärserver ausgeführt werden (welcher Server auch immer sich gerade befindet).
John

1

Ich stieß auf eine ähnliche Frustration mit der Dokumentation in Books Online, in der stand: "Wenn Sie Ihren Job planen, fügen Sie Logik hinzu, um nur auf der primären auszuführen", aber nicht, wie dies zu tun ist. Die sys.fn_hadr_backup_is_preferred_replica ist super nett für Sicherungsjobs, aber es scheint keine ähnliche Funktion für 'ist primär' zu geben oder was haben Sie. Glücklicherweise können Sie diese Informationen von so etwas abrufen:

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

Das würde Sie nur wissen lassen, in welcher Rolle sich die aktuelle Datenbank befindet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.