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.
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:
Das würde Sie nur wissen lassen, in welcher Rolle sich die aktuelle Datenbank befindet.
quelle