적용 대상:SQL Server
Azure SQL Managed Instance
이 문서에서는 데이터베이스 메일 및 해당 솔루션에서 발생하는 몇 가지 일반적인 오류에 대해 설명합니다.
SQL Server 인스턴스에서 T-SQL 명령을 실행하려면 SSMS(SQL Server Management Studio),Visual Studio Code용 MSSQL 확장, sqlcmd 또는 즐겨 찾는 T-SQL 쿼리 도구를 사용합니다.
저장 프로시저 'sp_send_dbmail'를 찾을 수 없습니다.
sp_send_dbmail 저장 프로시저가 데이터베이스에 msdb
설치됩니다. 데이터베이스 sp_send_dbmail
에서 msdb
을(를) 실행하거나 저장 프로시저의 세 부분 이름을 지정해야 합니다.
예시:
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
사용자이고 데이터베이스에서 DatabaseMailUserRole 데이터베이스 역할 msdb
의 멤버여야 합니다. 이 역할에 msdb 사용자 또는 그룹을 추가하려면 SQL Server Management Studio를 사용하거나 데이터베이스 메일 보내야 하는 사용자 또는 역할에 대해 다음 문을 실행합니다.
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
,@membername = '<user or role name>';
GO
자세한 정보는 sp_addrolemember 및 sp_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
를 사용합니다.
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 참조하세요.