Freigeben über


Häufige Fehler mit Datenbank-E-Mail

Gilt für: SQL Server Azure SQL Managed Instance

In diesem Artikel werden einige häufige Fehler, die bei Datenbank-E-Mail auftreten können, und deren Lösungen beschrieben.

Gespeicherte Prozedur „sp_send_dbmail“ wurde nicht gefunden

Die gespeicherte Prozedur sp_send_dbmail ist in der msdb-Datenbank installiert. Führen Sie entweder sp_send_dbmail aus der msdb-Datenbank aus, oder geben Sie einen dreiteiligen Namen für die gespeicherte Prozedur an.

Beispiel:

EXEC msdb.dbo.sp_send_dbmail ...

Oder:

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

Verwenden Sie den Assistenten zum Konfigurieren von Datenbank-E-Mail zum Aktivieren und Konfigurieren von Datenbank-E-Mail.

Profil nicht gültig

Für diese Fehlermeldung gibt es zwei mögliche Ursachen: Entweder ist das angegebene Profil nicht vorhanden, oder der Benutzer, der sp_send_dbmail (Transact-SQL) ausführt, hat keine Zugriffsberechtigung für das Profil.

Um Berechtigungen für ein Profil zu überprüfen, führen Sie die gespeicherte Prozedur sysmail_help_principalprofile_sp (Transact-SQL) mit dem Namen des Profils aus. Verwenden Sie die gespeicherte Prozedur sysmail_add_principalprofile_sp (Transact-SQL) oder den Assistenten zum Konfigurieren von Datenbank-E-Mail, um einem msdb-Benutzer oder einer msdb-Gruppe die Berechtigung zum Zugriff auf ein Profil zu gewähren.

Berechtigung für „sp_send_dbmail“ verweigert

In diesem Thema wird beschrieben, wie eine Fehlermeldung behandelt wird, die besagt, dass der Benutzer, der versucht, Datenbank-E-Mails zu senden, keine Berechtigung zum Ausführen von „sp_send_dbmail“ besitzt.

Die Fehlermeldung lautet wie folgt:

EXECUTE permission denied on object 'sp_send_dbmail', 
database 'msdb', schema 'dbo'.

Um Datenbank-E-Mails zu senden, müssen Benutzer ein Benutzer in der msdb-Datenbank und Mitglied der Datenbankrolle „DatabaseMailUserRole“ in der msdb-Datenbank sein. Um dieser Rolle msdb-Benutzer oder -Gruppen hinzuzufügen, verwenden Sie SQL Server Management Studio, oder führen Sie die folgende Anweisung für den Benutzer oder die Rolle aus, der bzw. die Datenbank-E-Mails senden muss.

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>';
GO

Weitere Informationen finden Sie unter sp_addrolemember und sp_droprolemember.

Datenbank-E-Mail in der Warteschlange, keine Einträge in „sysmail_event_log“ oder im Windows-Anwendungsereignisprotokoll

Datenbank-E-Mail erfordert Service Broker für das Anordnen von E-Mail-Nachrichten in Warteschlangen. Wenn Datenbank-E-Mail beendet wird oder die Service Broker-Nachrichtenübermittlung in der msdb-Datenbank nicht aktiviert ist, reiht Datenbank-E-Mail Nachrichten in die Datenbankwarteschlange ein, kann die Nachrichten jedoch nicht übermitteln. In diesem Fall verbleiben die Service Broker-Nachrichten in der Service Broker-E-Mail-Warteschlange. Service Broker aktiviert nicht das externe Programm. Daher gibt es keine Protokolleinträge in sysmail_event_log und keine Aktualisierungen des Elementstatus in sysmail_mailitems und den zugehörigen Sichten.

Führen Sie die folgende Anweisung aus, um zu überprüfen, ob Service Broker in der msdb-Datenbank aktiviert ist:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';

Der Wert 0 (Null) zeigt an, dass die Service Broker-Nachrichtenübermittlung in der msdb-Datenbank nicht aktiviert ist. Zur Behebung des Problems aktivieren Sie Service Broker in der Datenbank mit dem folgenden Transact-SQL-Befehl:

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

Datenbank-E-Mail basiert auf verschiedenen intern gespeicherten Prozeduren. Um den Oberflächenbereich zu reduzieren, werden diese gespeicherten Prozeduren bei neuen Installationen von SQL Server deaktiviert. Verwenden Sie zum Aktivieren dieser gespeicherten Prozeduren die Option Database Mail XPs der gespeicherten Systemprozedur sp_configure wie im folgenden Beispiel:

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

Datenbank-E-Mail kann in der msdb-Datenbank beendet werden. Um den Status von Datenbank-E-Mail zu prüfen, führen Sie die folgende Anweisung aus:

EXECUTE dbo.sysmail_help_status_sp;

Führen Sie den folgenden Befehl in der msdb-Datenbank aus, um Datenbank-E-Mail in einer Mailhost-Datenbank zu starten:

EXECUTE dbo.sysmail_start_sp;

Service Broker untersucht die Dialogfeld-Lebensdauer für Nachrichten, wenn es aktiviert ist. Daher schlagen Nachrichten, die sich länger als die konfigurierte Dialogfeld-Lebensdauer in der Service Broker-Übertragungswarteschlange befinden, sofort fehl. Datenbank-E-Mail aktualisiert den Status fehlgeschlagener Nachrichten in der sysmail_allitems-Sicht und zugehörigen Sichten. Sie müssen entscheiden, ob die E-Mail-Nachrichten erneut gesendet werden sollen. Weitere Informationen zum Konfigurieren der von Datenbank-E-Mail verwendeten Dialogfeld-Lebensdauer finden Sie unter sysmail_configure_sp (Transact-SQL).

Weitere Informationen