Sdílet prostřednictvím


Běžné chyby v databázové poště

platí pro:SQL Serverazure SQL Managed Instance

Tento článek popisuje některé běžné chyby, ke kterým došlo u databázové pošty a jejich řešení.

Pokud chcete spouštět příkazy T-SQL v instanci SQL Serveru, použijte SQL Server Management Studio (SSMS),rozšíření MSSQL pro Visual Studio Code, sqlcmd nebo váš oblíbený nástroj pro dotazování T-SQL.

Uložená procedura sp_send_dbmail nebyla nalezena.

Uložená procedura sp_send_dbmail je nainstalována v databázi msdb. Musíte buď spustit sp_send_dbmail z msdb databáze, nebo zadat třídílný název uložené procedury.

Příklad:

EXEC msdb.dbo.sp_send_dbmail ...

Nebo:

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

K povolení a konfiguraci databázové pošty použijte Konfigurovat databázová pošta.

Profil není platný.

Tato zpráva má dvě možné příčiny. Zadaný profil neexistuje nebo uživatel se spuštěnou sp_send_dbmail (Transact-SQL) nemá oprávnění pro přístup k profilu.

Pokud chcete zkontrolovat oprávnění pro profil, spusťte uloženou proceduru sysmail_help_principalprofile_sp (Transact-SQL) s názvem profilu. Použijte uloženou proceduru sysmail_add_principalprofile_sp (Transact-SQL) nebo konfigurovat databázovou poštu tak msdb , aby uživateli nebo skupině udělila oprávnění pro přístup k profilu.

Oprávnění pro sp_send_dbmail bylo odepřeno.

Tento článek popisuje řešení potíží s chybovou zprávou oznamující, že uživatel, který se pokouší odeslat databázovou poštu, nemá oprávnění ke spuštění. sp_send_dbmail

Text chyby:

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

Aby uživatelé mohli odesílat databázovou poštu, musí být uživatelem v msdb databázi a členem databázové role DatabaseMailUserRole v msdb databázi. Chcete-li do této role přidat uživatele nebo skupiny msdb, použijte aplikaci SQL Server Management Studio nebo spusťte následující příkaz pro uživatele nebo roli, která potřebuje odeslat databázový e-mail.

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

Další informace najdete v tématu sp_addrolemember a sp_droprolemember.

Database Mail zařazen do fronty, žádné položky v záznamu událostí sysmail_event_log nebo záznamu událostí aplikace systému Windows.

Databázová pošta spoléhá na Service Broker pro řazení e-mailových zpráv do fronty. Pokud je databázová pošta zastavená nebo pokud není v msdb databázi aktivováno doručování zpráv Service Broker, zařadí databázová pošta zprávy do fronty v databázi, ale zprávy se nedoručí. V tomto případě zprávy služby Service Broker zůstanou ve frontě Mailu služby Service Broker. Service Broker neaktivuje externí program, takže nejsou žádné položky protokolu v sysmail_event_log a žádné aktualizace stavu položky v sysmail_allitems a souvisejících zobrazeních.

Spuštěním následujícího příkazu zkontrolujte, jestli je v msdb databázi povolen nástroj Service Broker:

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

Hodnota 0 značí, že doručování zpráv Service Broker není v msdb databázi aktivováno. Problém opravíte tak, že v databázi aktivujete Service Broker pomocí následujícího příkazu Transact-SQL:

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

Databázová pošta spoléhá na řadu interních uložených procedur. Aby se snížila plocha povrchu, jsou tyto uložené procedury při nové instalaci SYSTÉMU SQL Server zakázány. Pokud chcete tyto uložené procedury povolit, použijte XPs databázové pošty (možnost konfigurace serveru)sp_configure uložené procedury systému, jako v následujícím příkladu:

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  

V databázi msdb může být zastavena služba Database Mail. Pokud chcete zkontrolovat stav databázové pošty, spusťte následující příkaz:

EXECUTE dbo.sysmail_help_status_sp;

Chcete-li spustit databázovou poštu v databázi hostitele pošty, spusťte v msdb databázi následující příkaz:

EXECUTE dbo.sysmail_start_sp;

Service Broker zkoumá životnost dialogového okna pro zprávy při jeho aktivaci; proto všechny zprávy, které byly ve frontě přenosu služby Service Broker delší než nakonfigurovaná životnost dialogového okna, okamžitě selže. Databázová pošta aktualizuje stav neúspěšných zpráv v sysmail_allitems a souvisejících zobrazeních. Musíte se rozhodnout, jestli se mají e-mailové zprávy znovu odesílat. Další informace o konfiguraci doby života dialogového okna, kterou používá Databázová pošta, najdete v tématu sysmail_configure_sp.

Další krok