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 festen Serverrolle „sysadmin“ sein, um Probleme mit allen Aspekten von Datenbank-E-Mail zu behandeln. 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 in einem Abfrage-Editorfenster eine Verbindung mit einer Instanz von SQL Server 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 „run_value“ für Database Mail XPs auf „1“ festgelegt ist. Wenn die run_value nicht 1 ist, ist Datenbank-E-Mail nicht aktiviert. Datenbank-E-Mail ist nicht automatisch aktiviert, um die Anzahl der Features zu reduzieren, die für Angriffe durch einen böswilligen Benutzer verfügbar sind. Weitere Informationen finden Sie unter Grundlegendes zur Oberflächenkonfiguration.

  2. Wenn Sie entscheiden, dass es geeignet ist, Datenbank-E-Mail zu aktivieren, führen Sie den folgenden Code aus:

    sp_configure 'Database Mail XPs', 1; 
    GO
    RECONFIGURE;
    GO
    
  3. 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. Um Datenbank-E-Mail zu senden, müssen Benutzer Mitglied der Datenbankrolle "DatabaseMailUserRole " in der msdb Datenbank sein. Mitglieder der festen Serverrolle "sysadmin" und msdbdb_owner Rolle sind automatisch Mitglieder der DatabaseMailUserRole-Rolle . Führen Sie die folgende Anweisung aus, um alle anderen Member der DatabaseMailUserRole auflisten zu können:

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. Verwenden Sie die folgende Anweisung, um der DatabaseMailUserRole-Rolle 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 Assistenten zum Konfigurieren der Datenbank-E-Mail, um Profile zu erstellen und Benutzern den Zugriff auf Profile zu gewähren.

Ist Datenbank-E-Mail gestartet?

  1. 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. 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 wird, führen Sie die folgende Anweisung aus, um sie zu starten:

    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 sollte den Status von RECEIVES_OCCURRING. Der Status der Warteschlange kann sich von einem Moment zum anderen ändern. Wenn der Status der E-Mail-Warteschlange nicht RECEIVES_OCCURRINGlautet, starten Sie die Warteschlange neu. 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 Längenspalte 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?

  1. 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. 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 aufgelisteten Konten verwendet, ist es möglich, dass alle für das Profil verfügbaren Konten nicht ordnungsgemäß funktionieren. 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 die 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“. Alternativ können Sie dem Profil weitere Konten zuordnen, sodass Datenbank-Mail beim Failover vom primären Konto das Failoverkonto zum Senden von E-Mails verwendet.

  2. Auf der Seite "Systemparameter konfigurieren" werden die Standardwerte von fünf Mal für die Wiederholungsversuche des Kontos und 60 Sekunden für die Kontoretryverzögerung bedeutet, dass die Nachrichtenübermittlung fehlschlägt, wenn der SMTP-Server in 5 Minuten nicht 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 Nachrichten gesendet wird, kann durch große Standardwerte die Zuverlässigkeit erhöht werden. Dadurch wird jedoch auch die Verwendung von Ressourcen deutlich erhöht, da die Übermittlung vieler Nachrichten immer wieder versucht wird. 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, ob der Dienstbroker für msdb aktiviert ist

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

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

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

ALTER DATABASE msdb SET ENABLE_BROKER;

Nächste Schritte