Teilen über


Allgemeine Schritte zur Problembehandlung für Datenbank-E-Mail

Gilt für:SQL ServerAzure SQL Managed Instance

Beim Behandeln von Problemen mit der Datenbank-E-Mail werden die folgenden allgemeinen Bereiche des Systems Datenbank-E-Mail überprüft. Diese Verfahren sind in logischer Reihenfolge aufgeführt, können jedoch in beliebiger Folge ausgewertet werden.

Berechtigungen

Sie müssen Mitglied der fest definierten sysadmin-Serverrolle sein, um alle Aspekte von Datenbank-Mail zu beheben. Benutzer, die keine Mitglieder der festen Serverrolle "sysadmin " sind, können nur Informationen zu den E-Mails abrufen, die sie senden möchten, nicht über E-Mails, die von anderen Benutzern gesendet werden.

Ist Datenbank-E-Mail aktiviert?

  1. Stellen Sie in SQL Server Management Studio mithilfe eines Abfrage-Editor-Fensters eine Verbindung mit einer SQL Server-Instanz her, und führen Sie dann den folgenden Code aus:

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure;
    GO
    

    Vergewissern Sie sich im Ergebnisbereich, dass die run_value-Option für Datenbank-Mail-XPs (Serverkonfiguration) auf 1 gesetzt ist.

    Wenn run_value nicht 1 ist, ist Datenbank-E-Mail nicht aktiviert.

    Die Datenbank-E-Mail wird nicht automatisch aktiviert, damit möglichst wenige Funktionen eine Angriffsfläche für böswillige Benutzer bieten. Weitere Informationen finden Sie unter Oberflächenkonfiguration.

  2. Wenn Sie beschließen, die Datenbank-E-Mail zu aktivieren, führen Sie den folgenden Code aus:

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure 'Database Mail XPs', 1; 
    GO
    RECONFIGURE;
    GO
    

    Führen Sie den folgenden Code aus, um die sp_configure Prozedur in den Standardzustand wiederherzustellen, der keine erweiterten Optionen anzeigt:

    sp_configure 'show advanced', 0; 
    GO
    RECONFIGURE;
    GO
    

Sind Benutzer ordnungsgemäß zum Senden von E-Mails konfiguriert?

  1. Zum Senden von Datenbank-E-Mail müssen Benutzer ein Mitglied der Datenbankrolle DatabaseMailUserRole in der msdb-Datenbank sein. Mitglieder der festen Serverrolle „sysadmin“ und der Rolle msdbdb_owner sind automatisch Mitglied der Rolle DatabaseMailUserRole. Führen Sie die folgende Anweisung aus, um alle anderen Mitglieder der Rolle DatabaseMailUserRole anzuzeigen:

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. Verwenden Sie die folgende Anweisung, um der Rolle DatabaseMailUserRole Benutzer hinzuzufügen:

    USE msdb;
    GO
    
    sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<database user>';
    
  3. Um Datenbank-E-Mails zu senden, müssen Benutzer Zugriff auf mindestens ein Datenbank-E-Mail-Profil haben. Führen Sie die folgende Anweisung aus, um die Benutzer (Prinzipale) und die Profile anzuzeigen, auf die diese zugreifen können.

    EXEC msdb.dbo.sysmail_help_principalprofile_sp;
    
  4. Verwenden Sie den Datenbank-E-Mail-Konfigurations-Assistenten, um Profile zu erstellen und Benutzern Zugriff auf Profile zu gewähren.

Ist Datenbank-E-Mail gestartet?

Das externe Datenbank-E-Mail-Programm wird aktiviert, wenn zu verarbeitende E-Mail-Nachrichten vorhanden sind. Wenn keine zu sendenden Nachrichten für den angegebenen Timeoutzeitraum vorhanden sind, wird das Programm beendet.

  1. Führen Sie die folgende Anweisung aus, um zu überprüfen, ob die Datenbank-E-Mail-Aktivierung gestartet wurde:

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  2. Wenn die Datenbank-E-Mail-Aktivierung nicht gestartet wurde, führen Sie zum Aktivieren die folgende Anweisung aus:

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. Wenn das externe Datenbank-E-Mail-Programm gestartet wurde, überprüfen Sie den Status der E-Mail-Warteschlange mit der folgenden Anweisung:

    EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';
    

    Die E-Mail-Warteschlange muss den Status RECEIVES_OCCURRING aufweisen. Die Statuswarteschlange kann von Moment zu Moment variieren. Wenn die E-Mail-Warteschlange nicht den Status RECEIVES_OCCURRING aufweist, starten Sie die Warteschlange erneut. Stoppen Sie die Warteschlange mit der folgenden Anweisung:

    EXEC msdb.dbo.sysmail_stop_sp;
    

    Dann starten Sie die Warteschlange mit der folgenden Anweisung:

    EXEC msdb.dbo.sysmail_start_sp;
    

    Hinweis

    Verwenden Sie die length Spalte im Resultset, sysmail_help_queue_sp um die Anzahl der E-Mails in der E-Mail-Warteschlange zu ermitteln.

Wirken sich Probleme auf einige oder alle Konten aus?

Wenn Sie festgestellt haben, dass einige, aber nicht alle Profile E-Mails senden können, haben Sie möglicherweise Probleme mit den Datenbank-E-Mail-Konten, die von den Problemprofilen verwendet werden.

  1. Führen Sie die folgende Anweisung aus, um festzustellen, welche Konten erfolgreich E-Mails senden können:

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
    
  2. Wenn ein nicht funktionierendes Profil keines der aufgeführten Konten verwendet, ist es möglich, dass alle dem Profil zur Verfügung stehenden Konten nicht einwandfrei arbeiten. Zum Überprüfen einzelner Konten erstellen Sie mit dem Assistenten zum Konfigurieren von Datenbank-E-Mail ein neues Profil mit nur einem Konto, und verwenden Sie dann das Dialogfeld „Test-E-Mail senden“, um mithilfe des neuen Kontos eine E-Mail zu senden.

  3. Führen Sie die folgende Anweisung aus, um die Fehlermeldungen der Datenbank-E-Mail anzuzeigen:

    SELECT * FROM msdb.dbo.sysmail_event_log;
    

    Hinweis

    Datenbank-E-Mail betrachtet eine E-Mail als versandt, wenn diese erfolgreich an einen SMTP-Mailserver übertragen wurde. Nachfolgende Fehler, wie eine ungültige E-Mail-Empfängeradresse, können immer noch verhindern, dass die E-Mail zugestellt wird, sind jedoch im Datenbank-E-Mail-Protokoll nicht enthalten.

Wiederholen der E-Mail-Übermittlung

  1. Wenn Sie festgestellt haben, dass die Datenbank-E-Mail fehlschlägt, da der SMTP-Server nicht zuverlässig erreicht werden kann, können Sie ihre erfolgreiche E-Mail-Zustellungsrate erhöhen, indem Sie die Anzahl der Versuche von Datenbank-E-Mails erhöhen, jede Nachricht zu senden. Starten Sie den Assistenten zum Konfigurieren von Datenbank-E-Mail, und aktivieren Sie die Option „Systemparameter anzeigen oder ändern“. Sie können dem Profil wahlweise auch mehrere Konten zuordnen, sodass die Datenbank-E-Mail im Falle eines Failovers vom ersten Konto das Failoverkonto zum Senden von E-Mails verwendet.

  2. Auf der Seite „Systemparameter konfigurieren“ bedeuten die Standardwerte von fünf Mal für „Wiederholungsversuche für das Konto“ und 60 Sekunden für „Wiederholungsverzögerung für das Konto“, dass die Nachrichtenübermittlung fehlschlägt, wenn der SMTP-Server nicht innerhalb von fünf Minuten erreicht werden kann. Erhöhen Sie diese Parameter, um die Zeitdauer bis zum Fehlschlagen der Nachrichtenübermittlung zu verlängern.

    Hinweis

    Wenn eine große Anzahl von Nachrichten gesendet wird, können große Standardwerte die Zuverlässigkeit erhöhen, aber die Verwendung von Ressourcen erheblich erhöhen, da viele Nachrichten immer wieder zugestellt werden sollen. Beheben Sie das eigentliche Problem, indem Sie das Problem mit dem Netzwerk oder dem SMTP-Server beheben, das bzw. der verhindert, dass von der Datenbank-E-Mail sofort eine Verbindung mit dem SMTP-Server hergestellt wird.

Überprüfen Sie, ob der Service Broker für msdb aktiviert ist

Datenbank-E-Mail erfordert, dass der Service Broker für die msdb-Datenbank aktiviert ist. Überprüfen Sie, ob der Service Broker auf msdb mit dem folgenden T-SQL-Skript aktiviert ist:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb' ; -- should be 1

Wenn sie nicht aktiviert ist, muss der Service Broker aktiviert sein. Das folgende Beispielskript erfordert jedoch exklusiven Zugriff auf die msdb Systemdatenbanken, sodass dies möglicherweise nicht möglich ist, während typischer Geschäftszeiten auszuführen. Weitere Informationen finden Sie unter ALTER DATABASE ... SET ENABLE_BROKER.

ALTER DATABASE msdb SET ENABLE_BROKER;