Allgemeine Schritte zur Problembehandlung für Datenbank-E-Mail
Gilt für: SQL Server Azure 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 nicht Mitglied der festen Serverrolle „sysadmin“ sind, können nur Informationen zu den E-Mails abrufen, die sie selbst gesendet haben, nicht jedoch zu E-Mails, die von anderen gesendet wurden.
Ist Datenbank-E-Mail aktiviert?
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. Lautet „run_value“ nicht „1“, 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 Grundlegendes zur Oberflächenkonfiguration.
Wenn Sie beschließen, die Datenbank-E-Mail zu aktivieren, führen Sie den folgenden Code aus:
sp_configure 'Database Mail XPs', 1; GO RECONFIGURE; GO
Führen Sie den folgenden Code aus, um den Standardzustand der Prozedur „sp_configure“ wiederherzustellen, in dem keine erweiterten Optionen angezeigt werden:
sp_configure 'show advanced', 0; GO RECONFIGURE; GO
Sind Benutzer ordnungsgemäß zum Senden von E-Mails konfiguriert?
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 Rollemsdb
db_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';
Verwenden Sie die folgende Anweisung, um der Rolle DatabaseMailUserRole Benutzer hinzuzufügen:
USE msdb; GO sp_addrolemember @rolename = 'DatabaseMailUserRole' ,@membername = '<database user>';
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;
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?
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;
Wenn die Datenbank-E-Mail-Aktivierung nicht gestartet wurde, führen Sie zum Aktivieren die folgende Anweisung aus:
EXEC msdb.dbo.sysmail_start_sp;
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. Der Status der Warteschlange kann sich von einem Moment zum anderen ändern. Wenn die E-Mail-Warteschlange nicht den StatusRECEIVES_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
Legen Sie die Anzahl der E-Mails in der E-Mail-Warteschlange mithilfe der Spalte „length“ im Resultset von „sysmail_help_queue_sp
“ fest.
Wirken sich Probleme auf einige oder alle Konten aus?
Wenn Sie festgestellt haben, dass einige, aber nicht alle Profile E-Mails senden können, liegt möglicherweise ein Problem mit den von den betroffenen Profilen verwendeten Konten für Datenbank-E-Mails vor. 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;
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.
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
Wenn Sie festgestellt haben, dass die Datenbank-E-Mail nicht einwandfrei arbeitet, weil der SMTP-Server nicht zuverlässig erreicht werden kann, können Sie die Rate der erfolgreich übermittelten E-Mails erhöhen. Erhöhen Sie dazu die Anzahl der Versuche der Datenbank-E-Mail beim Senden jeder Nachricht. 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.
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 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 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 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;