Partilhar via


Erros comuns com o correio do banco de dados

Aplica-se a:SQL ServerAzure SQL Managed Instance

Este artigo descreve alguns erros comuns encontrados com o email de banco de dados e suas soluções.

Para executar comandos T-SQL em sua instância do SQL Server, use o SQL Server Management Studio (SSMS), a extensão MSSQL para Visual Studio Code, sqlcmd ou sua ferramenta de consulta T-SQL favorita.

Não foi possível encontrar o procedimento armazenado 'sp_send_dbmail'

O sp_send_dbmail procedimento armazenado é instalado no msdb banco de dados. Você deve executar sp_send_dbmail a partir do msdb banco de dados ou especificar um nome de três partes para o procedimento armazenado.

Exemplo:

EXEC msdb.dbo.sp_send_dbmail ...

Ou:

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

Use Configure database mail para habilitar e configurar database mail.

Perfil não válido

Há duas causas possíveis para esta mensagem. O perfil especificado não existe ou o usuário que executa o sp_send_dbmail (Transact-SQL) não tem permissão para acessar o perfil.

Para verificar as permissões de um perfil, execute o procedimento armazenado sysmail_help_principalprofile_sp (Transact-SQL) usando o nome do perfil. Utilize o procedimento armazenado sysmail_add_principalprofile_sp (Transact-SQL) ou Configurar email de banco de dados para conceder permissão a um utilizador ou grupo para aceder a um perfil.

Permissão negada no sp_send_dbmail

Este artigo descreve como solucionar problemas de uma mensagem de erro informando que o usuário que tenta enviar o Database Mail não tem permissão para executar sp_send_dbmail

O texto do erro é:

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

Para enviar o Database mail, os usuários devem ser um usuário no msdb banco de dados e um membro da função de banco de dados DatabaseMailUserRole no msdb banco de dados. Para adicionar usuários ou grupos msdb a essa função, use o SQL Server Management Studio ou execute a instrução a seguir para o usuário ou função que precisa enviar o Database Mail.

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

Para obter mais informações, consulte sp_addrolemember e sp_droprolemember.

Correio da base de dados em fila, sem entradas no sysmail_event_log ou no Registo de Eventos de Aplicações do Windows

O Database Mail depende do Service Broker para enfileirar mensagens de email. Se o Database Mail for interrompido ou se a entrega de mensagens do Service Broker não estiver ativada no banco de dados, o msdb Database Mail enfileirará mensagens no banco de dados, mas não poderá entregar as mensagens. Nesse caso, as mensagens do Service Broker permanecem na fila de email do Service Broker. O Service Broker não ativa o programa externo, por isso não há entradas de log em sysmail_event_log e não há atualizações no estado do item em sysmail_allitems e nas exibições relacionadas.

Execute a seguinte instrução para verificar se o Service Broker está habilitado msdb no banco de dados:

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

Um valor de 0 indica que a entrega de mensagens do Service Broker não está ativada na base de dados msdb. Para corrigir o problema, ative o Service Broker no banco de dados com o seguinte comando Transact-SQL:

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

O Database Mail depende de vários procedimentos armazenados internos. Para reduzir a área de superfície, esses procedimentos armazenados são desabilitados na nova instalação do SQL Server. Para habilitar esses procedimentos armazenados, use o Database Mail XPs (opção de configuração do servidor) do sp_configure procedimento armazenado do sistema, como no exemplo a seguir:

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  

O Database Mail poderá estar interrompido na base de dados msdb. Para verificar o status do Database Mail, execute a seguinte instrução:

EXECUTE dbo.sysmail_help_status_sp;

Para iniciar o msdb Database Mail em um banco de dados host de email, execute o seguinte comando no banco de dados:

EXECUTE dbo.sysmail_start_sp;

O Service Broker examina o tempo de vida da caixa de diálogo para mensagens quando ele é ativado; portanto, todas as mensagens que estiveram na fila de transmissão do Service Broker por mais tempo do que o tempo de vida da caixa de diálogo configurada falharão imediatamente. O Database Mail atualiza o status de mensagens com falha no sysmail_allitems e modos de exibição relacionados. Você deve decidir se deseja enviar as mensagens de email novamente. Para obter mais informações sobre como configurar o tempo de vida da caixa de diálogo usado pelo Database Mail, consulte sysmail_configure_sp.

Próximo passo