Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  4/2005
suche: 
Dieser Artikel richtet sich an Administratoren von Microsoft SQL Servern, die sich einen Überblick über die Möglichkeiten der Jobsteuerung mit dem SQL Server Agenten verschaffen möchten.

Glossar

DTS
Data Transformation Services. Eine Gruppe von Tools, die das Extrahieren, Transformieren und Konsolidieren von Daten aus verschiedenen Quellen in ein oder mehrere Ziele ermöglichen.
DTS-Paket
Eine individuelle Zusammenstellung von Einstellungen und Anweisungen, um einen DTS-Datentransport durchzuführen.

Weiterführende Links

Weitere Artikel

Jobsteuerung mit dem Microsoft SQL Server (Teil I)

Zur Entlastung des Datenbankadministrators bieten die meisten Datenbank-Management-Systeme eine Möglichkeit, die Ausführung wiederkehrender Aufgaben zu automatisieren. Durch die Integration in das Windows-Betriebssystem bietet die Jobsteuerung des MS SQL Servers zusätzliche Möglichkeiten, die wir im Rahmen dieser zweiteiligen Artikelserie vorstellen.

Als Einstieg: Der SQL Server Agent

Alle Funktionen rund um das Thema Automatisierung sind beim MS SQL Server in einen separaten Dienst, den SQL Server Agenten, ausgelagert worden. Dieser Dienst wird zwar bei der Installation mit angelegt, der Starttyp steht jedoch zunächst auf "manuell".

Um sicherzustellen, dass der SQL Server Agent immer zur Verfügung steht, wird der Starttyp auf "automatisch" gestellt. Diese Einstellung kann sowohl in der Diensteverwaltung von Windows als auch über den Enterprise Manager des SQL Servers in den Eigenschaften des Servers festgelegt werden.

Die Verwaltung des SQL Server Agenten erfolgt im Enterprise Manager im Ordner "Verwaltung". Dort kann der Dienst gestartet, gestoppt und konfiguriert werden. Eine wichtige Konfigurationseinstellung ist die SQL Server Verbindung (Eigenschaften des SQL Server Agenten -> Registerkarte "Verbindung").

Auch wenn die Darstellung im Enterprise Manager die Vermutung nahe legt, dass der Agent in den SQL Server integriert ist, so läuft der Agent jedoch in einem eigenen, separaten Sicherheitskontext und muss sich - wie jeder andere Client auch - am SQL Server anmelden. Dazu wird ein Konto verwendet, das Mitglied der sysadmin-Rolle des SQL Servers ist (also z. B. das Konto "sa").

Zur Übersicht: Warnungen, Operatoren und Aufträge

Der SQL Server Agent ist in drei Bereiche unterteilt, deren Zusammenhang in Abbildung 1 dargestellt wird: Warnungen, Operatoren und Aufträge.

Grafik zeigt Zusammenhang der Bereiche des SQL Server Agenten
Abb. 1: Zusammenhang der Bereiche des SQL Server Agenten.

Warnungen können entweder durch Einträge des SQL Servers im Anwendungsereignisprotokoll oder durch die Schwellwertüber- oder Unterschreitung eines Leistungsparameters des Windows-Systemmonitors ausgelöst werden.

Operatoren sind Personen, die vom SQL Server Agenten über die Ausführung von Aufträgen oder das Auftreten bestimmter Ereignisse informiert werden.

Auf die Bereiche Warnungen und Operatoren werden wir im zweiten Teil dieser Artikelserie detailliert eingehen. Hier befassen wir uns mit den Aufträgen, dem Herzstück der Jobsteuerung.

Aufträge zum Ersten: Auftragsschritte - oder "Was gibt es zu tun?"

Jeder Auftrag enthält mindestens einen Auftragsschritt. Es besteht aber auch die Möglichkeit, die im Rahmen des Auftrages durchzuführenden Tätigkeiten in mehrere Schritte zu unterteilen.

Jeder Auftragsschritt enthält den auszuführenden Code sowie je eine Aktion für das erfolgreiche und das nicht erfolgreiche Beenden des Auftragsschrittes.

Der auszuführende Code kann Folgendes sein:

Innerhalb eines Auftrages können so z. B. folgende Auftragsschritte nacheinander ausgeführt werden, um einen umfangreichen Datenbank-Import auszuführen:

  1. Ausführung vorbereitender Datenbank-Kommandos in Form von Transact-SQL-Skripten
  2. Ausführung des Betriebssystem-Kommandos "DTSRun" zum Start eines DTS-Paketes

Als Aktion beim erfolgreichen oder fehlerhaften Beenden eines Auffragsschrittes kann der Auftrag


Grafik zeigt Auftrag mit mehreren Auftragsschriften
Abb. 2: Auftrag mit mehreren Auftragsschriften

Mit Hilfe dieser Steuerungsmöglichkeiten kann ein komplexer Ablaufplan erstellt werden (siehe Abbildung 2). Es ist hierbei sogar möglich, beim Fehlschlag eines Schrittes den Auftrag dennoch mit einer Erfolgsmeldung zu beenden oder einen separaten Auftragsschritt für die Fehlerbehandlung einzusetzen.

Der zuletzt ausgeführte Auftragsschritt bestimmt den abschließenden Status des Auftrags: "Beendigung mit Erfolgsmeldung" oder "Beendigung mit Fehlermeldung".

Aufträge zum Zweiten: Zeitpläne - oder "Wann geht es los?"

Wie in der Abbildung 3 zu erkennen ist, bietet der SQL Server Agent vielfältige Möglichkeiten zur Definition von Zeitplänen. In der Abbildung ist beispielsweise die Anforderung "alle 15 Minuten an jedem Arbeitstag zwischen 8 Uhr und 17 Uhr" umgesetzt.

Grafik zeigt den Zeitplan für den Beispiel Auftrag
Abb. 3: Zeitplan für den Beispiel-Auftrag

Wird die Auswahl "Häufigkeit" auf "Monatlich" geändert, so ändern sich die Einstellmöglichkeiten der Maske und ein Auftrag kann auch an jedem 2. (oder letzten) Sonntag im Monat (oder nur in jedem 3. Monat) einmalig zu einer festen Uhrzeit (oder stündlich zwischen zwei Uhrzeiten) durchgeführt werden.

Es ist auch möglich, mehrere Zeitpläne anzulegen, z. B. um einen Auftrag jeden Sonntag und zusätzlich immer am ersten Tag eines Monats auszuführen.

Natürlich kann auch die einmalige Ausführung zu einem bestimmten Zeitpunkt definiert werden.

Ein Zeitplan ist zur Erstellung eines Auftrages nicht zwingend erforderlich, da es auch andere Möglichkeiten gibt, einen Auftrag zu starten. An dieser Stelle seien zunächst nur der manuelle Start durch den Administrator und der automatische Start nach Eintritt einer Warnung erwähnt (siehe Abbildung 1).

Da die meisten administrativen Aufgaben jedoch regelmäßig auszuführen sind, bietet sich die Erstellung von Zeitplänen an.

Aufträge zum Dritten: Benachrichtigungen - oder "Wen interessiert das Ergebnis?"

Mit Hilfe von Benachrichtigungen kann ein Operator über die Ausführung des Auftrages informiert werden. Dabei kann - jeweils getrennt für die Übertragungswege E-Mail, Pager und NET SEND - ausgewählt werden, wann die Benachrichtigung erfolgen soll:

Zusätzlich kann je nach Art der Auftragsbeendigung auch ein Eintrag in das Anwendungsereignisprotokoll erfolgen.

Ein Beispiel

In der Datenbank "Produktion" existieren die beiden Tabellen "Import" und "Archiv". Die Tabelle "Import" wird in unregelmäßigen Abständen mit Daten befüllt, die dann in die Tabelle "Archiv" transportiert werden sollen.

Dazu soll zunächst alle 15 Minuten, aber nur an Wochentagen zwischen 8 Uhr und 17 Uhr, überprüft werden, ob neue Daten in der Tabelle "Import" eingetroffen sind. Sind keine Daten vorhanden, so soll keine Aktion stattfinden und der Job ohne eine Fehlermeldung beendet werden.

Sind Daten vorhanden, so sollen diese in die Tabelle "Archiv" übertragen und aus der Tabelle "Import" gelöscht werden. Nach erfolgreichem Abschluss des Transports soll der Administrator mit Hilfe des Betriebssystembefehls "NET SEND" informiert werden. Bei Fehlern während des Transportes soll ein Eintrag in die Windows-Ereignisanzeige erfolgen.

Die Transact-SQL-Befehle zum Anlegen der Datenbank und der Tabellen zeigt Abbildung 4.

USE master
GO
CREATE DATABASE Produktion
 ON (NAME = prod_data, FILENAME = 'd:\prod.mdf')
 LOG ON (NAME = prod_log, FILENAME = 'd:\prod.ldf')
GO
CREATE TABLE Produktion..Import
 (ID int IDENTITY(1,1), Daten varchar(500))
GO
CREATE TABLE Produktion..Archiv
 (ID int, Daten varchar(500))
GO

Abb. 4: Die Transact-SQL-Befehle zum Anlegen der Datenbank sowie der Tabellen.

Die grafische Oberfläche des Enterprise Managers bietet die Möglichkeit, Aufträge einfach und intuitiv anzulegen und zu verwalten. Daneben können Aufträge auch mit Transact-SQL-Befehlen angelegt werden. Die Online-Hilfe des SQL Servers bietet dabei eine umfassende Übersicht über die zu verwendenden Prozeduren und deren Parameter.

USE msdb
GO
-- Auftrag anlegen
EXEC sp_add_job
 @job_name = 'Datenimport',
 @owner_login_name = 'sa'
GO
-- Zielserver hinzufügen
EXEC sp_add_jobserver
 @job_name = 'Datenimport',
 @server_name = '(local)'
GO
-- Auftragsschritte hinzufügen
EXEC sp_add_jobstep
 @job_name = 'Datenimport',
 @step_id = 1,
 @step_name = 'auf neue Daten prüfen',
 @subsystem = 'TSQL',
 @database_name = 'Produktion',
 @command = 'if (select max(ID) from Import) is null raiserror 0 ‚'''',
 @on_success_action = 3, -- 3 = Gehen zum nächsten Schritt
 @on_fail_action = 1 -- 1 = Beenden mit Erfolg
GO
EXEC sp_add_jobstep
 @job_name = 'Datenimport',
 @step_id = 2,
 @step_name = 'Daten übertragen',
 @subsystem = 'TSQL',
 @database_name = 'Produktion',
 @command = 'declare @maxid int
select @maxid = max(ID) from Import
insert into Archiv select * from Import where ID <= @maxid
delete Import where ID <= @maxid',
 @on_success_action = 3, -- 3 = Gehen zum nächsten Schritt
 @on_fail_action = 2 -- 2 = Beenden mit Fehler
GO
EXEC sp_add_jobstep
 @job_name = 'Datenimport',
 @step_id = 3,
 @step_name = 'Ankunft neuer Daten signalisieren',
 @subsystem = 'CmdExec',
 @command = 'net send adminpc ‚'Die Daten sind da''',
 @on_success_action = 1, -- 1 = Beenden mit Erfolg
 @on_fail_action = 2 -- 2 = Beenden mit Fehler
GO

Abb. 5: Die Transact-SQL-Befehle zur Erstellung des Beispielauftrages - allerdings zunächst ohne einen Zeitplan.

Zur Erstellung des Beispielauftrages (allerdings zunächst ohne einen Zeitplan) sind die in Abbildung 5 gezeigten Transact-SQL-Befehle auszuführen.

Um den Zeitplan (wie in Abbildung 4 zu sehen) zu erstellen, sollte nun der Auftrag über den Enterprise Manager modifiziert werden, da die Definition eines komplexen Zeitplans mit Transact-SQL-Befehlen zwar möglich, aber nicht besonders einfach ist. Die grafische Oberfläche bietet hier eindeutig Vorteile.

Fazit und Ausblick

Der SQL Server Agent bietet neben dem Funktionsumfang einer klassischen Jobsteuerung - Ausführung von Datenbankbefehlen zu vorgegebenen Zeitpunkten - zusätzliche Funktionen,
u. a.:

Weitere, nützliche Funktionen werden wir im nächsten Teil der Artikelserie kennen lernen. Dabei nehmen wir insbesondere die Bereiche Warnungen und Operatoren unter die Lupe. Zusätzlich werden wir ein automatisiertes Backup des Transaktionsprotokolls einrichten, um die Datensicherheit des Servers zu optimieren.

Andreas Jordan (info@ordix.de).