Da ich ein DBA bin (und in vielen Fällen der De-facto-Sysadmin), wird SQL Server auf so ziemlich jedem Server installiert, mit dem ich regelmäßig arbeiten muss. Vor kurzem habe ich festgestellt, dass ich den SQL-Agenten in fast allen Fällen als Jobplaner und nicht als systemeigenen Windows-Taskplaner verwendet habe.
Aus meiner Sicht bietet der SQL-Agent eine Reihe von Vorteilen gegenüber dem systemeigenen Windows-Taskplaner:
- Remote (von meiner Workstation aus) Start / Stopp / Überwachung von Aufgaben
- Freigegebene Zeitpläne (anstatt jede Aufgabe für sich)
- Mehrere Schritte und Kontrollfluss
- Verschiedene Arten von Aufgaben
- Warnungen bei Ausfall / Abschluss
- Kann so konfiguriert werden, dass sie als unterschiedliche Benutzer fungiert
- (Mäßig) beschreibende Fehlermeldungen und nicht nur ein Fehlercode
Ich kann mich jedoch dem Gefühl nicht entziehen, dass dies eine schlechte Praxis ist - der SQL-Agent sollte nur für datenbankbezogene Aufgaben reserviert sein, und ich sollte Aufgaben auf Betriebssystemebene im Windows-Taskplaner ausführen, obwohl ich dessen Verwendbarkeit ablehne.
Ist es in Ordnung, sich auf diese Weise auf den SQL-Agenten zu verlassen? Wenn nicht, sollte ich einen Windows-Taskplaner eines Drittanbieters in Betracht ziehen, um einige der Funktionen zu erhalten, nach denen ich suche?
Antworten:
Persönlich denke ich, die größte Einschränkung wäre die Schwierigkeit, die Liste der Jobs zu organisieren. Soweit mir bekannt ist, können Sie keine Ordner zum Organisieren der Jobs erstellen, daher wäre eine große Anzahl umständlich. Da keiner meiner Server mehr als ein Dutzend Jobs hat, bin ich mir dessen jedoch nicht hundertprozentig sicher. Der Taskplaner von Server 2008 und höher ermöglicht eine wesentlich einfachere Organisation, IMO, und bietet im Allgemeinen eine wesentlich bessere Funktionalität als frühere Versionen. Ich bin sicher, dass Apps von Drittanbietern einen noch besseren Job machen. Ich würde weinen, wenn ich den Taskplaner von Server 2003 oder verwenden müsste
at.exe
.Die zweite Einschränkung, die ich mir vorstellen kann, besteht darin, den SQL-Server möglicherweise zu stark zu belasten. Der Agent ist ein kleines Programm, aber das Ausführen einer langen oder komplexen Aufgabe kann leicht viele Ressourcen verbrauchen. Diese Ressourcen wären für die SQL-Engine nicht verfügbar. Da die SQL-Engine so programmiert ist, dass sie etwa 80% des verfügbaren Systemspeichers beansprucht, kann dies ein Problem darstellen.
Drittens kann die Sicherung ein Problem sein. Sie müssen nicht nur das Dateisystem, sondern auch die msdb-Datenbank sichern, um die Jobs wiederherstellen zu können (oder die Aufgaben mithilfe von Skripten in eine Textdatei umwandeln zu können). Dies erhöht die Komplexität der Notfallwiederherstellung.
Schließlich möchten Sie nicht in der Lage sein, für eine SQL Server-Lizenz zu bezahlen, nur um den SQL Server-Agenten auszuführen. Wenn die Datenbank außer Betrieb genommen wird, müssen Sie einen Plan für die Migration vom SQL Server-Agenten entwickeln.
quelle
Bei meinem vorherigen Job habe ich genau das getan, hauptsächlich, weil die Jobs von unserem zentralen primären Cluster ausgeführt wurden, der der sichtbarste Server war. Ich konnte all unsere geplanten Aufgaben an einem Ort sehen, anstatt Kommandozeileninhalte auf einer Reihe von Servern überprüfen zu müssen.
Obwohl dies größtenteils subjektiv ist (und es schwierig sein wird, in diesem Format eine "richtige" Antwort abzuleiten), glaube ich nicht, dass irgendetwas an diesem Ansatz falsch ist, außer dass er zu einem einzigen Fehlerpunkt wird.
Dies ist möglicherweise nicht relevant, wenn alle Aufgaben mit dem aktiven Datenbankserver und den ausgeführten SQL Server-Diensten interagieren oder davon abhängen (in unserem Fall).
Oh, und Sie müssen in der Fehlerbehandlung hinzufügen, wenn der Server, auf dem die Aufgabe ausgeführt werden soll, nicht aktiv ist - etwas, das Sie nicht tun müssten, wenn die Aufgabe auf diesem Server eingerichtet wäre.
quelle
Ich würde ~ wahrscheinlich ~ SQL Agent über Windows-Task-Manager übernehmen ... offensichtlich für datenbankbezogene Aufgaben.
Wenn Sie überhaupt programmieren können oder Leute haben, die programmieren können, können Sie mit Konsolen-Apps ziemlich viel anfangen und sie in einen Service-Ersteller wie TopShelf einbinden. (Http://topshelf-project.com/) Dies kann ein billiges / Einfacher Hack, um für alles ein wenig von SQL Agent zu entkoppeln und Ihnen eine Ebene für die Warteschlange zu geben, wenn Sie an diesem Punkt sind.
Persönlich scheinen Sie sich genug darum zu kümmern und genug über Ihre Fallstricke zu wissen, von denen ich denke, dass es Ihnen gut geht. Es sind die Leute, die es nicht interessieren / wissen, um die ich mir wirklich Sorgen mache. Ich bezweifle nicht, dass Sie Ihre Lösungen in angemessenen Abständen bewerten und entsprechend handeln.
quelle
Eine andere Möglichkeit besteht darin, eine Tabelle für geplante Aufgaben mit einer gespeicherten Prozedur zu erstellen, um eine Nachrichtenwarteschlangentabelle daraus zu aktualisieren. Dann rief der SQL Server-Agent die gespeicherte Prozedur von Zeit zu Zeit auf, um Nachrichten zu erstellen und den Aufgabenstatus zu aktualisieren. Andere Systeme würden die Nachrichtenwarteschlangentabelle entweder über eine SQL-Verbindung oder eine Web-API-Schicht als JSON abfragen.
quelle