다음을 통해 공유


데이터베이스 메일의 일반적인 오류

적용 대상:SQL ServerAzure SQL Managed Instance

이 문서에서는 데이터베이스 메일 및 해당 솔루션에서 발생하는 몇 가지 일반적인 오류에 대해 설명합니다.

'sp_send_dbmail' 저장 프로시저를 찾을 수 없습니다.

sp_send_dbmail 저장 프로시저는 msdb 데이터베이스에 설치됩니다. msdb 데이터베이스에서 sp_send_dbmail 실행하거나 저장 프로시저의 세 부분으로 구성된 이름을 지정해야 합니다.

예시:

EXEC msdb.dbo.sp_send_dbmail ...

또는

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

데이터베이스 메일 구성 마법사를 사용하여 데이터베이스 메일을 사용하도록 설정하고 구성합니다.

프로필이 잘못되었습니다.

이 메시지에는 두 가지 가능한 원인이 있습니다. 지정한 프로필이 존재하지 않거나 sp_send_dbmail(Transact-SQL)을 실행하는 사용자가 프로필에 액세스할 권한이 없기 때문입니다.

프로필에 대한 권한을 확인하려면 프로필 이름으로 저장 프로시저 sysmail_help_principalprofile_sp(Transact-SQL)를 실행합니다. 저장 프로시저 sysmail_add_principalprofile_sp(Transact-SQL) 또는 데이터베이스 메일 구성 마법사 를 사용하여 msdb 사용자 또는 그룹이 프로필에 액세스할 수 있는 권한을 부여합니다.

sp_send_dbmail 대한 사용 권한이 거부됨

이 항목에서는 데이터베이스 메일을 보내려는 사용자에게 sp_send_dbmail 실행할 권한이 없다는 오류 메시지의 문제를 해결하는 방법에 대해 설명합니다.

오류 텍스트는 다음과 같습니다.

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

데이터베이스 메일을 보내려면 사용자는 msdb 데이터베이스의 사용자이고 msdb 데이터베이스에서 DatabaseMailUserRole 데이터베이스 역할의 멤버여야 합니다. 이 역할에 msdb 사용자 또는 그룹을 추가하려면 SQL Server Management Studio를 사용하거나 데이터베이스 메일을 보내야 하는 사용자 또는 역할에 대해 다음 문을 실행합니다.

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

자세한 내용은 sp_addrolemembersp_droprolemember 참조하세요.

큐에 대기 중인 데이터베이스 메일, sysmail_event_log 또는 Windows 애플리케이션 이벤트 로그에 항목 없음

데이터베이스 메일은 Service Broker를 사용하여 이메일 메시지를 큐에 보냅니다. 데이터베이스 메일이 중지되거나 Msdb 데이터베이스에서 Service Broker 메시지 배달이 활성화되지 않은 경우 데이터베이스 메일은 데이터베이스의 메시지를 큐에 대기하지만 메시지를 배달할 수 없습니다. 이 경우 Service Broker 메시지는 Service Broker 메일 큐에 남아 있습니다. Service Broker는 외부 프로그램을 활성화하지 않으므로 sysmail_event_log 로그 항목이 없고 sysmail_allitems 항목 상태 및 관련 보기에 대한 업데이트가 없습니다.

다음 명령문을 실행하여 msdb 데이터베이스에서 Service Broker를 사용하는지 확인합니다.

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

값이 0이면 Msdb 데이터베이스에서 Service Broker 메시지 배달이 활성화되지 않음을 나타냅니다. 문제를 해결하려면 다음 Transact-SQL 명령을 사용하여 데이터베이스에서 Service Broker를 활성화합니다.

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

데이터베이스 메일은 여러 내부 저장 프로시저를 사용합니다. 노출 영역을 줄이기 위해 SQL Server를 새로 설치할 때 이러한 저장 프로시저를 사용할 수 없습니다. 이러한 저장 프로시저를 사용하도록 설정하려면 다음 예제와 같이 sp_configure 시스템 저장 프로시저의 데이터베이스 메일 XPs 옵션을 사용합니다.

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  

msdb 데이터베이스에서 데이터베이스 메일을 중지할 수 있습니다. 데이터베이스 메일의 상태를 확인하려면 다음 문을 실행합니다.

EXECUTE dbo.sysmail_help_status_sp;

메일 호스트 데이터베이스에서 데이터베이스 메일을 시작하려면 msdb 데이터베이스에서 다음 명령을 실행합니다.

EXECUTE dbo.sysmail_start_sp;

Service Broker는 자신이 활성화될 때 메시지의 대화 수명을 검사하며 지정된 대화 수명보다 오랫동안 Service Broker 전송 큐에 남아있던 메시지는 즉시 실패합니다. 데이터베이스 메일은 sysmail_allitems 및 관련 보기에서 실패한 메시지의 상태를 업데이트합니다. 전자 메일 메시지를 다시 보낼지 여부를 결정해야 합니다. 데이터베이스 메일에서 사용하는 대화 수명을 구성하는 방법에 대한 자세한 내용은 sysmail_configure_sp(Transact-SQL)를 참조하세요.

참고 항목