Die richtige Methode zum Deaktivieren / Aktivieren von SQL Server-Agent-Jobs

8

Ich habe eine Reihe von Jobs für den SQL Server-Agent geplant, von denen einer eine vollständige Datenbanksicherung durchführt. Ich möchte einige andere Jobs deaktivieren, wenn das Backup beginnt, und sie nach dem Backup erneut aktivieren. Was ist der richtige Weg? Ich habe darüber nachgedacht, einen der folgenden tsql-Befehle zum ersten Schritt des Backup-Tasks hinzuzufügen (und entsprechende Befehle zum letzten Schritt), aber ich finde nicht, welcher besser ist (oder vielleicht gibt es einen anderen Weg).

> %Vor%

Oder eine Anzahl von EXEC dbo.sp_update_job ?
Danke.

    
a1ex07 23.03.2011, 15:41
quelle

6 Antworten

4

Sie müssten EXEC dbo.sp_update_job ausführen, weil Sie Systemtabellen nicht direkt aktualisieren können ( obwohl ich nicht sicher bin, ob sysjobs immer noch als Systemtabelle zählt Mitch sagt, dass es aktualisiert werden kann)

Ich würde die Verwendung von sp_getapplock und spreleaseapplock erwägen, um andere Jobs ohne "zu sperren" tatsächlich aktualisiert die Jobs obwohl.

    
gbn 23.03.2011, 15:49
quelle
6

Verwenden Sie definitiv sp_update_job. Wenn der Job bereits geplant ist , führt die direkte Manipulation der sysjobs-Tabelle nicht notwendigerweise dazu, dass der zwischengespeicherte Zeitplan neu berechnet wird.

Es könnte für das ENABLED-Flag funktionieren (habe es nicht ausprobiert), aber ich weiß, dass es nicht für Spalten wie start_step_id funktioniert

    
BradC 23.03.2011 19:56
quelle
2

Ich würde sp_update_job verwenden, da es wiederverwendbare Logikelemente kapselt, die unterstützt werden. Warum erfinden Sie das Rad neu.

Ссылка

    
Kuberchaun 23.03.2011 15:56
quelle
1

SQL Agent speichert den aktivierten Status von Jobs zwischen. Wenn Sie also einfach die sysjobs-Tabelle aktualisieren, verhindert dies tatsächlich, dass ein Zeitplan den Job auslöst. Die gespeicherte Prozedur sp_update_job löst eine Aktualisierung des Caches aus, daher empfehle ich Ihnen, diese zu verwenden.

Wenn Sie den Wert in sysjobs immer noch manuell setzen möchten, müssen Sie sp_sqlagent_notify ausführen, um sql-Agent-Refresh tatsächlich im Cache des aktivierten Status zu erhalten. Schauen Sie sich einfach den Code von sp_update_job für die genauen Parameter an, die Sie brauchen.

    
Eric Stephani 15.03.2012 20:50
quelle
1

Ich sehe nichts falsch mit Ihrer vorgeschlagenen Vorgehensweise. Sie können auch über die Job-Kategorie manipulieren:

%Vor%

Ich habe es nicht profiliert, aber ich vermute

%Vor%

Wird den gleichen Code erzeugen, aber die eingebauten Procs sind normalerweise der Weg zu gehen.

    
Mitch Wheat 23.03.2011 15:48
quelle
0

Der andere Ansatz wäre, am Anfang Ihrer anderen Jobs einen Schritt hinzuzufügen, der den Status des Sicherungsjobs überprüft und dann den aktuellen Job abbricht oder unterbricht, wenn das Backup ausgeführt wird.

Wir haben es manchmal beide Male gemacht, hängt davon ab, wie zuverlässig / kritisch die verschiedenen Jobs sind, welche besser funktioniert.

    
Rozwel 23.03.2011 19:48
quelle

Tags und Links