Share via


데이터베이스 메일 문제 해결: 메일이 지연되고 sysmail_event_log 또는 Windows 응용 프로그램 이벤트 로그에 항목이 없음

이 항목에서는 전자 메일 메시지가 정상적으로 큐에 들어가지만 외부 프로그램의 작업이 sysmail_event_log 뷰 또는 Windows 응용 프로그램 이벤트 로그에 나타나지 않는 문제를 해결하는 방법에 대해 설명합니다.

데이터베이스 메일은 Service Broker에 의존하여 전자 메일 메시지를 큐에 보냅니다. 데이터베이스 메일이 중지되었거나 msdb 데이터베이스에서 Service Broker 메시지 배달이 활성화되지 않은 경우 데이터베이스 메일은 데이터베이스 큐에 메시지를 보내기는 하지만 배달할 수는 없습니다. 이 경우 Service Broker 메시지는 Service Broker 메일 큐에 남게 됩니다. Service Broker가 외부 프로그램을 활성화하지 않으므로 sysmail_event_log에 로그 항목이 없으며 sysmail_allitems 및 관련 뷰의 항목 상태도 업데이트되지 않습니다.

다음 문을 실행하여 데이터베이스 메일이 설정되었는지 여부를 확인합니다.

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

0 값은 msdb 데이터베이스에서 Service Broker 메시지 배달이 활성화되지 않았음을 나타냅니다. 문제를 해결하려면 데이터베이스에서 Service Broker를 활성화합니다. Service Broker 메시지 배달 활성화 방법은 방법: 데이터베이스에서 Service Broker 메시지 배달 활성화(Transact-SQL)를 참조하십시오.

데이터베이스 메일은 많은 내부 저장 프로시저를 사용합니다. SQL Server를 새로 설치하면 노출 영역을 줄이기 위해 이러한 저장 프로시저는 해제되어 있습니다. 이러한 저장 프로시저를 설정하려면 sp_configure 시스템 저장 프로시저의 Database Mail XPs 옵션을 사용합니다.

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

EXECUTE dbo.sysmail_help_status_sp;

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

EXECUTE dbo.sysmail_start_sp;

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