다음을 통해 공유


일반 데이터베이스 메일 문제 해결 단계

적용 대상:SQL ServerAzure SQL Managed Instance

데이터베이스 메일의 문제 해결 과정은 데이터베이스 메일 시스템의 다음과 같은 일반적인 영역에 대한 확인이 포함됩니다. 이 절차는 논리적 순서로 나열했으나 어떤 순서로도 검사할 수 있습니다.

사용 권한

데이터베이스 메일의 모든 측면을 해결하려면 sysadmin 고정 서버 역할의 멤버여야 합니다. sysadmin 고정 서버 역할의 멤버가 아닌 사용자는 다른 사용자가 보낸 전자 메일이 아니라 보내려는 전자 메일에 대한 정보만 가져올 수 있습니다.

Service Broker가 msdb에서 사용하도록 설정되어 있는지 확인

데이터베이스 메일을 사용하려면 msdb 데이터베이스에 대해 Service Broker를 사용하도록 설정해야 합니다.

  1. SQL Server Management Studio에서 쿼리 편집기 창을 사용하여 SQL Server 인스턴스에 연결합니다. 다음 T-SQL 스크립트와 함께 Service Broker가 msdb에서 사용할 수 있는지 확인합니다.

    SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb' ; -- should be 1
    

    그러나 다음 샘플 스크립트에서는 시스템 데이터베이스에 msdb 대한 단독 액세스 권한이 필요하므로 일반적인 업무 시간 동안 실행하기 어려울 수 있습니다.

  2. Service Broker가 필요한 잠금을 가져올 수 있도록 SQL Server 에이전트 서비스를 중지합니다.

  3. msdb에서 Service Broker를 활성화하려면 다음을 실행하세요. 자세한 내용은 ALTER DATABASE ... SET ENABLE_BROKER를 참조하세요.

    ALTER DATABASE msdb SET ENABLE_BROKER;
    
  4. SQL Server 에이전트 서비스를 다시 시작합니다.

데이터베이스 메일이 사용하도록 설정되어 있는지 확인

  1. SQL Server Management Studio에서 쿼리 편집기 창을 사용하여 SQL Server 인스턴스에 연결합니다. 다음 코드로 데이터베이스 메일을 사용할 수 있는지 확인합니다.

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure;
    GO
    

    결과 창에서 run_value가 로 설정되어 있는지 확인합니다1.

    악의적인 사용자가 공격에 사용할 수 있는 기능의 수를 줄이기 위해 데이터베이스 메일은 자동으로 사용되도록 설정되지는 않습니다. 자세한 내용은 노출 영역 구성을 참조하세요.

  2. 데이터베이스 메일을 사용하도록 설정하는 것이 적절하다고 판단되면 다음 코드를 실행합니다.

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure 'Database Mail XPs', 1; 
    GO
    RECONFIGURE;
    GO
    

    고급 옵션을 표시하지 않는 프로시저를 기본 상태로 복원 sp_configure 하려면 다음 코드를 실행합니다.

    sp_configure 'show advanced', 0; 
    GO
    RECONFIGURE;
    GO
    

데이터베이스 메일이 시작되었는지 확인

데이터베이스 메일 외부 프로그램은 처리할 이메일 메시지가 있을 때 활성화됩니다. 지정된 제한 시간 동안 보낼 메시지가 없는 경우 프로그램이 종료됩니다.

  1. SQL Server Management Studio에서 쿼리 편집기 창을 사용하여 SQL Server 인스턴스에 연결합니다. 데이터베이스 메일 외부 프로그램이 시작되었는지 확인하려면 다음 문을 실행합니다.

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  2. 데이터베이스 메일 상태가 아닌 STARTED경우 다음 문을 실행하여 시작합니다.

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. 데이터베이스 메일 외부 프로그램이 시작되면 다음 문을 사용하여 메일 큐의 상태를 확인합니다.

    EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';
    

    메일 큐는 RECEIVES_OCCURRING 상태여야 합니다. 상태 큐는 순간마다 다를 수 있습니다. 메일 큐가 RECEIVES_OCCURRING 상태가 아닌 경우 큐를 다시 시작합니다. 다음 명령문을 사용하여 큐를 중지합니다.

    EXEC msdb.dbo.sysmail_stop_sp;
    

    다음 명령어로 큐를 시작합니다.

    EXEC msdb.dbo.sysmail_start_sp;
    

    참고

    length 결과 집합의 sysmail_help_queue_sp 열을 사용하여 메일 큐의 전자 메일 수를 확인합니다.

사용자가 메일을 보내도록 올바르게 구성되었나요?

  1. 데이터베이스 메일을 보내려면 사용자는 데이터베이스에서 msdb 데이터베이스 역할의 구성원이어야 합니다. sysadmin 고정 서버 역할 및 msdbdb_owner 역할의 구성원은 자동으로 DatabaseMailUserRole 역할의 구성원입니다. DatabaseMailUserRole의 다른 모든 구성원을 나열하려면 다음 문을 실행합니다.

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. DatabaseMailUserRole 역할에 사용자를 추가하려면 다음 문을 사용합니다.

    USE msdb;
    GO
    
    sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<database user>';
    
  3. 데이터베이스 메일을 보내려면 사용자가 하나 이상의 데이터베이스 메일 프로필에 액세스할 수 있어야 합니다. 액세스 권한이 있는 사용자(보안 주체) 및 프로필을 나열하려면 다음 문을 실행합니다.

    EXEC msdb.dbo.sysmail_help_principalprofile_sp;
    
  4. 데이터베이스 메일 구성 마법사를 사용하여 프로필을 만들고 사용자에게 프로필에 대한 액세스 권한을 부여합니다.

문제가 일부 또는 모든 계정에 영향을 주나요?

일부 프로필이 메일을 보낼 수 있는 것은 아니지만 일부 프로필이 메일을 보낼 수 있다고 결정한 경우 문제 프로필에서 사용하는 데이터베이스 메일 계정에 문제가 있을 수 있습니다.

  1. 메일을 보내는 데 성공한 계정을 확인하려면 다음 문을 실행합니다.

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
    
  2. 작동하지 않는 프로필이 나열된 계정을 하나도 사용하지 않는 경우 프로필에 사용할 수 있는 모든 계정이 제대로 작동하지 않을 수 있습니다. 개별 계정을 테스트하려면 데이터베이스 메일 구성 마법사를 사용하여 단일 계정으로 새 프로필을 만든 다음 테스트 전자 메일 보내기 대화 상자를 사용하여 새 계정을 사용하여 메일을 보냅니다.

  3. 데이터베이스 메일이 반환한 오류 메시지를 보려면 다음 문을 실행합니다.

    SELECT * FROM msdb.dbo.sysmail_event_log;
    

    참고

    데이터베이스 메일은 메일이 SMTP 메일 서버로 배달되면 메일을 보낸 것으로 간주합니다. 이후 잘못된 수신인 전자 메일 주소와 같은 오류로 인해 메일이 배달되지 않더라도 데이터베이스 메일 로그에는 나타나지 않을 수 있습니다.

메일 배달 다시 시도

  1. SMTP 서버에 안정적으로 연결할 수 없어 데이터베이스 메일이 실패하는 것으로 확인되면 데이터베이스 메일이 각 메시지를 보내려고 시도하는 횟수를 늘려 성공적인 메일 배달 속도를 높일 수 있습니다. 데이터베이스 메일 구성 마법사를 시작하고 시스템 매개 변수 보기 또는 변경 옵션을 선택합니다. 또는 더 많은 계정을 프로필에 연결할 수 있으므로 기본 계정에서 장애 조치 시 데이터베이스 메일은 장애 조치(failover) 계정을 사용하여 전자 메일을 보냅니다.

  2. 시스템 매개 변수 구성 페이지에서 계정 재시도 횟수의 기본값은 5회, 계정 재시도 지연의 경우 60초이므로 SMTP 서버에 5분 안에 연결할 수 없는 경우 메시지 배달이 실패한다는 의미입니다. 이러한 매개 변수를 늘려 메시지 배달이 실패하기 전까지의 시간을 연장합니다.

    참고

    많은 수의 메시지를 보내는 경우 큰 기본값은 안정성을 높일 수 있지만, 여러 메시지를 반복해서 배달하려고 시도하면 리소스 사용이 크게 증가합니다. 데이터베이스 메일 SMTP 서버에 즉시 연결할 수 없도록 하는 네트워크 또는 SMTP 서버 문제를 해결하여 근본 문제를 해결합니다.