Einrichten von Datenbank-Mail in MS SQL Server 2005 und höher

    Alles, was in diesem Beitrag beschrieben wird, ist für Microsoft SQL Server 2005 und ältere Versionen (2008, 2008 R2, Denali) relevant. Im Rahmen dieses Beitrags bedeutet der Ausdruck „SQL Server“ nur Microsoft SQL Server, ausgenommen MySQL, PostgreSQL, FireBird und andere DBMS, die theoretisch als SQL Server bezeichnet werden können.

    Was ist Database Mail?


    Database Mail wurde in SQL Server 2005 angezeigt und ersetzte die SQLMail-Komponente. Database Mail (wie zuvor SQLMail) wird verwendet, um E-Mail-Nachrichten von SQL Server selbst zu senden (genauer gesagt von der Database Engine-Komponente). Der grundlegende Unterschied zwischen Database Mail und SQLMail besteht darin, dass dieser einen Drittanbieter-Client (Microsoft Outlook) zum Senden von Nachrichten verwendete, die auf dem Computer mit SQL Server installiert werden mussten, und Database Mail selbst über SMTP mit dem Mailserver kommuniziert.

    Wofür ist das?


    In der Tat entscheidet jeder für sich, ob er es braucht oder nicht. Beispiele für die Verwendung umfassen die folgenden:
    • Jeden Morgen möchte der Manager die Ergebnisse von gestern per Post erhalten: Wie viele und welche Produkte wurden verkauft, welcher Kunde hat die größte Anfrage gestellt, welche Kunden sind im Rückstand usw. Mit anderen Worten, die Ergebnisse aller Abfragen können mit Database Mail gesendet werden.
    • Der Datenbankadministrator möchte in der E-Mail Informationen darüber erhalten, welche Aufgaben (Jobs) oder Servicepläne mit einem Fehler abgeschlossen wurden (oder umgekehrt, erfolgreich abgeschlossen).
    • Der Datenbankadministrator möchte per E-Mail Informationen zu Fehlern eines bestimmten Schweregrads oder einer bestimmten Anzahl von Fehlern erhalten, die auf dem Server aufgetreten sind.
    • Der Datenbankadministrator möchte per E-Mail Informationen darüber erhalten, dass die Größe der Datenbank in der Nähe der Größe der Festplatte liegt und es an der Zeit ist, den Chef für den Kauf neuer Geräte zu schütteln.
    • Der Datenbankadministrator möchte etwas anderes per E-Mail erhalten.
    Aus diesem Grund ist Database Mail meiner Meinung nach für SQL Server-Datenbankadministratoren am nützlichsten, und da Mobilfunkbetreiber E-Mail-to-SMS-Dienste bereitstellen (um ehrlich zu sein, ist es in PPSOS nicht stark, es ist selten, aber meins) ist und ist absolut kostenlos), kann auch ein sehr schnelles Informationsmittel werden.

    Was brauchen wir


    Zunächst benötigen wir also SQL Server Version 2005 oder höher. Ich habe SQL Server 2008 R2, aber in diesem Fall gibt es keinen Unterschied in den Einstellungen. Database Mail ist laut Microsoft in allen Editionen verfügbar, mit Ausnahme der Express Edition ( Proof ). Hier finden Sie jedoch eine detaillierte Beschreibung, wie diese Komponente aktiviert werden kann.
    Das zweite, was mit Database Mail nicht möglich ist, ist ein Mail-Server, auf den der Computer mit SQL Server zugreift, und ein Konto, über das Briefe gesendet werden. In meinem Beispiel wird die Rolle eines solchen Servers von mail.ru übernommen.
    Und die dritte ist die Mitgliedschaft in der Sysadmin-Rolle für Ihr Konto in SQL Server, da nur Mitglieder dieser Rolle sie konfigurieren können.

    Lass uns gehen


    Stellen Sie zunächst mit SQL Server Management Studio eine Verbindung zu unserem SQL Server her. Natürlich können alle Konfigurationsschritte mit vordefinierten gespeicherten Prozeduren ausgeführt werden, aber ich versuche nicht, alles Mögliche für die Abfragen zu tun, insbesondere wenn es hierfür praktische Assistenten gibt.
    Wir öffnen den Zweig "Verwaltung", wählen das Objekt "Datenbank-Mail" aus, drücken es mit der rechten Maustaste und wählen "Datenbank-Mail konfigurieren". Der Begrüßungsbildschirm des Assistenten kann sofort mit der Meldung "Diesen Müll nie wieder anzeigen" überprüft werden, da keine nützlichen Informationen vorhanden sind.
    Und jetzt stehen wir bereits vor einer Wahl. Jetzt können wir: Database Mail konfigurieren, Profile und Konten von Database Mail ändern, die Sicherheit von Profilen ändern und schließlich die Systemkonfiguration ändern. Da wir bisher noch keine Datenbank-E-Mail verwendet haben, haben wir noch nichts zu ändern. Wählen Sie den ersten Punkt „Datenbank-E-Mail einrichten“ und klicken Sie auf „Weiter“.

    Und hier kommt die erste Überraschung. SQL Server meldet hilfreich, dass ein Feature wie Database Mail tatsächlich deaktiviert ist, und stellt klar, ob es aktiviert werden soll. Da wir genau deshalb hierher gekommen sind, antworten wir mit „Ja“ und gelangen zum nächsten Bildschirm.

    Erstellen wir ein neues Profil mit dem Namen Mein erstes DBMail-Profil. Es wird verwendet, um E-Mails über nicht erfüllte Aufgaben (Jobs) zu senden und ein Konto hinzuzufügen. Klicken Sie dazu auf die Schaltfläche Hinzufügen (rechts neben der Liste der noch leeren Konten) Aufzeichnungen).

    Bevor ich einen Beitrag schrieb, habe ich TestDBMail@mail.ru nur zum Experimentieren registriert. Natürlich müssen Sie alle diese Felder "für sich selbst" ausfüllen. Beispielsweise benötigt unser interner Mailserver keine Berechtigung zum Versenden von Briefen und Sie können dementsprechend "Anonyme Authentifizierung" auswählen. Der Anzeigename auf diesem Bildschirm wird im Feld "Von" der empfangenen Nachricht angezeigt, und der Kontoname ist der interne Name des Kontos in SQL Server.
    Bitte beachten Sie, dass es zu diesem Zeitpunkt keine Möglichkeit gibt, die Verbindung zum Server zu überprüfen, und es keine Möglichkeit gibt, einen Testbrief zu senden - d. H. Wenn beim Befüllen ein Fehler gemacht wird, kann die Suche einige Zeit dauern. Seien Sie aufmerksam.
    Wir haben also ein Profil, dem ein Konto hinzugefügt wurde. Klicken Sie auf "Weiter" und sehen Sie, was als nächstes kommt.

    Wenn ich diesen Bildschirm und insbesondere die Registerkarte "Private Profile" betrachte, sollte es eine Frage geben, die ich vorher nicht beachtet habe - warum muss ich die Möglichkeit haben, mehrere Profile zu erstellen?

    Jedem in der DatabaseMailUserRole-Rolle enthaltenen msdb-Benutzer kann ein Profil zugewiesen werden. Oder sogar ein paar. Installieren Sie dazu das Kontrollkästchen „Access“. Standardprofil - Wenn "Ja" festgelegt ist und die gespeicherte Prozedur "sp_send_dbmail" verwendet, kann der Profilname standardmäßig weggelassen werden. Der Name des Profils, das für diesen Benutzer mit "Standard" markiert ist, wird dort ersetzt.
    Ich werde jedoch zur Registerkarte Öffentliche Profile zurückkehren und die Attribute Standard = "Ja" und Öffentlich = "Ja" für das neu erstellte Profil festlegen. Dieses Profil kann jetzt von allen MSDB-Benutzern verwendet werden, die in der Rolle DatabaseMailUserRole (und von Benutzern der Serverrolle sysadmin) enthalten sind. Nachdem Sie auf "Weiter" geklickt haben, gelangen Sie zum vorletzten Bildschirm des Setup-Assistenten.

    Hier können wir konfigurieren:
    1. Kontowiederholungsversuche - Die Anzahl der Versuche, eine E-Mail mit einem bestimmten Konto zu senden (Denken Sie daran, dass dem Profil mehrere Konten hinzugefügt werden können. In diesem Fall versucht SQL Server zunächst, eine E-Mail im Namen eines Kontos mit der Priorität 1 so oft wie angegeben zu senden Wenn der Brief immer noch nicht verschwindet, werden Konten mit niedrigerer Priorität durchsucht.)
    2. Verzögerung der Kontowiederholung (Sekunden) - genau wie viele Sekunden SQL Server wartet, bevor er erneut versucht, eine E-Mail zu senden
    3. Maximale Dateigröße (Bytes) - SQL Server kann Anhänge zu einer Nachricht hinzufügen. Mit diesem Parameter können Sie die Größe eines solchen Anhangs begrenzen.
    4. Verbotene Dateierweiterungen für Anhänge - Verbotene Berechtigungen für Anhänge, sodass der Benutzer beispielsweise die VBS-Datei nicht generieren und senden kann
    5. Mindestlebensdauer der ausführbaren Datenbank-E-Mail (Sekunden) - Die Datenbank-E-Mail ist eine separate DatabaseMail (90-110) .exe-Datei. Dieser Parameter bestimmt, wie lange SQL Server einen laufenden Prozess „abbricht“, wenn keine Aktivität stattfindet
    6. Protokollierungsgrad - Dieser Parameter legt fest, wie viele Informationen in das Protokoll geschrieben werden, wenn Database Mail ausgeführt wird.
    Auf dem letzten Bildschirm sehen wir, welche Konten und Profile erstellt werden und welchen Benutzern die Möglichkeit gegeben wird, das erstellte Profil zu verwenden.
    Fühlen Sie sich frei, auf "Fertig stellen" zu klicken.

    SQL Server beendet das Setup schnell und zeigt an, welche Elemente und aus welchem ​​Grund der Vorgang fehlgeschlagen sind (wenn ein Fehler aufgetreten ist). Nachdem wir sichergestellt haben, dass alles in Ordnung ist, schließen wir das Fenster.
    Überprüfen Sie, ob die Einstellungen für Database Mail korrekt sind. Gehen Sie erneut zur Verwaltung, klicken Sie mit der rechten Maustaste auf Datenbank-E-Mail und wählen Sie "Test-E-Mail senden".

    Wie wir sehen können, ist das gerade erstellte Profil bereits als Profil ausgewählt, die Felder "Betreff" und "Nachrichtentext" werden automatisch ausgefüllt. All dies kann natürlich geändert werden, aber die Standardwerte passen zu mir. Es muss nur noch die Adresse angegeben werden, an die der Brief gesendet wird - ich schreibe die gleiche Adresse, von der aus SQL Server den Brief sendet (bitte verzeihen Sie meine Faulheit - warum zwei Postfächer erstellen, wenn eines mehr als genug ist? Egal, welche Briefe eingehen, er kann sie nicht lesen. Und ich klicke auf die Schaltfläche "Test-E-Mail senden".
    ... nach 15 Sekunden im Incoming:

    Bingo! Der Brief ist angekommen. In der Tat können wir davon ausgehen, dass die Aufgabe abgeschlossen ist. Aber hier mache ich einen kleinen Exkurs für den armen Kerl, der erfolglos Post checkt, aber den notwendigen Brief nicht sieht.
    Checken Sie zunächst die Datenbank-E-Mail aus. Gehen Sie in SSMS zur Verwaltung, klicken Sie mit der rechten Maustaste in Database Mail und wählen Sie dort Database Mail Log aus. Vielleicht haben Sie die Parameter für die Verbindung zum Server einfach falsch angegeben - dies ist seltsamerweise ein ziemlich häufiger Fehler.
    Als zweites muss überprüft werden, ob Service Broker in der msdb-Datenbank enthalten ist. Er ist es, der verwendet wird, um Nachrichten zu senden.
    Erstellen Sie eine neue Abfrage und führen Sie sie dort aus: Wenn sich der Rückgabewert von einem unterscheidet, ist Service Broker deaktiviert. Sie können es folgendermaßen aktivieren:
    SELECT is_broker_enabled
    FROM sys.databases
    WHERE name = 'msdb'


    ALTER DATABASE msdb SET ENABLE_BROKER
    Wenn Service Broker aktiviert ist, sind alle Einstellungen korrekt - was zum Teufel ist das? - Überprüfen Sie die E-Mails erneut. Keine Briefe? Klicken Sie auf die Schaltfläche "Problembehandlung" in dem Fenster, das nach dem Klicken auf die Schaltfläche "Test-E-Mail senden" angezeigt wird, und suchen Sie in der Hilfe von Microsoft nach typischen Fehlern.
    Wir gehen davon aus, dass wir jetzt Database Mail konfiguriert haben und ein Testbrief eingetroffen ist.

    Und was dann?


    Und dann beginnt der Spaß. Jetzt können wir endlich Database Mail verwenden, um Benachrichtigungen von SQL Server zu erhalten, dass etwas nicht stimmt (oder umgekehrt, dass alles in Ordnung ist).
    SQL Server sendet möglicherweise eine Benachrichtigung, dass die Aufgabe erfolgreich abgeschlossen wurde (oder umgekehrt - fehlgeschlagen). Genauer gesagt kann dies vom SQL Server-Agenten ausgeführt werden, der tatsächlich Aufgaben ausführt. Damit er dies tun kann, muss Folgendes getan werden.
    Erstellen Sie zunächst einen Operator. Das heißt, die Person, die die Benachrichtigungen erhält. Dazu öffnen wir den SQL Server-Agenten, wählen Operatoren und drücken "Neuer Operator"

    Geben Sie im angezeigten Fenster den Namen (ich habe diesen Datenbankadministrator) und die E-Mail-Adresse ein, an die Benachrichtigungen gesendet werden (ich gebe auf mail.ru dasselbe Postfach an, das lange gelitten hat). Klicken Sie auf "OK" und der Operator wird in Sekundenbruchteilen erstellt.
    Jetzt haben wir das konfigurierte Datenbank-Mail-Profil. Der Operator, der die Benachrichtigung erhält, muss den SQL Server-Agenten noch konfigurieren. Klicken Sie dazu mit der rechten Maustaste darauf (SQL Server Agent), wählen Sie den Punkt Eigenschaften und gehen Sie zur Registerkarte Alert System.
    Hier haben wir ein neues "Enable Mail Profile" erstellt.

    Unmittelbar danach werden die Elemente Mail-System und Mail-Profil aktiv. Im Mail-System können wir Database Mail oder als böse Nekrophile von SQL Mail auswählen (dies muss jedoch separat konfiguriert werden). Im Mail-Profil können wir auswählen, welches Database Mail-Profil vom SQL Server-Agenten zum Senden von Nachrichten verwendet wird. Dies kann ein öffentliches oder ein privates Profil sein. In diesem Fall muss der Windows-Benutzer, auf dem der SQL Server-Agent ausgeführt wird, über eine Anmeldung in SQL Server sowie über einen Benutzer in msdb verfügen, bei dem es sich um eine DatabaseMailUserRole handelt. Da ich mich nicht um Profile kümmern möchte, stimme ich der Auswahl des öffentlichen Profils zu und klicke auf "OK".
    Das ist alles. Jetzt müssen Sie den SQL Server-Agenten neu starten. Sie können dies über SSMS oder über SQL Server Configuration Manager ausführen. Wählen Sie selbst - von wo es für Sie bequemer ist.
    Überprüfen Sie nach dem Neustart, ob alles richtig konfiguriert ist und die Nachrichten wirklich ankommen. Dazu mache ich einen Job und versuche, eine der Datenbanken auf einem bekanntermaßen nicht vorhandenen Pfad zu sichern.
    Ich gehe zu den Eigenschaften der erstellten Aufgabe, gehe zur Registerkarte "Benachrichtigungen", aktiviere das Kontrollkästchen "E-Mail" und wähle den kürzlich erstellten Operator "Datenbankadministrator" aus. Ich lasse die dritte Spalte unverändert - sie lautet "Wenn der Job fehlschlägt", d. H. Ich erhalte nur Benachrichtigungen, wenn die Aufgabe fehlerhaft endet. Dort können Sie jedoch zwei weitere Optionen auswählen - wann die Aufgabe erfolgreich abgeschlossen wird oder wann die Aufgabe zumindest auf irgendeine Weise abgeschlossen wird - mit einem Fehler oder ohne Fehler.

    Einstellungen werden vorgenommen, wir starten die Aufgabe:

    Toll, der Pfad wird natürlich nicht gefunden, Backup nicht gemacht. Überprüfen der Mailbox:

    E-Mail zugestellt. Darin können Sie sehen:
    1. Wann und welche Aufgabe ausgeführt wurde (JOB-AUSFÜHRUNG: "Sicherung mit Fehlern" wurde am 19.11.2011 um 19:35:12 Uhr ausgeführt)
    2. Wie lange wurde der Job ausgeführt, bevor der Fehler erkannt wurde? (DAUER: 0 Stunden, 0 Minuten, 1 Sekunden)
    3. Endergebnis (STATUS: Fehlgeschlagen) - obwohl der Brief bei erfolgreichem Abschluss der Aufgabe tatsächlich nicht eingetroffen wäre
    4. Eine Nachricht aus dem Ereignisprotokoll für diesen Job (NACHRICHTEN: Der Job ist fehlgeschlagen. Der Job wurde vom Benutzer KATE-HOME \ rancid aufgerufen. Der letzte auszuführende Schritt war Schritt 1 (Test).) Mit dem Namen des Benutzers, der den Job abgeschlossen hat
    Diese Informationen sind ausreichend, um zu verstehen, was, wann und wo nicht erfüllt wurde, und helfen bei der Bestimmung der Optionen zur Lösung des Problems.

    Happy End


    Ich hoffe, diese Informationen waren zumindest für jemanden nützlich und vielleicht sogar interessant. Wenn sich jemand dafür interessiert, kann ich über andere Verwendungsmöglichkeiten von Database Mail schreiben. Insbesondere: innerhalb von Serviceplänen zum Erstellen von Warnungen (Alerts) sowie der gespeicherten Prozedur sp_send_dbmail, die zum Senden von E-Mails mithilfe von Datenbank-E-Mail verwendet wird.

    PS


    Auf einem habr gab es einen weiteren Beitrag zum Einrichten von Database Mail. Hier erfahren Sie, wie Sie Database Mail mithilfe von Skripten konfigurieren.

    Jetzt auch beliebt: