Share via


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

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

데이터베이스 메일의 활성화 여부를 확인하려면

  1. SQL Server Management Studio에서 쿼리 편집기 창을 사용하여 SQL Server 인스턴스에 연결한 후 다음 코드를 실행합니다.

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

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

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

  2. 데이터베이스 메일을 사용하는 것이 적절하다고 판단되는 경우에는 다음 코드를 실행합니다.

    sp_configure 'Database Mail XPs', 1; 
    GO
    RECONFIGURE;
    GO
    
  3. sp_configure 프로시저를 고급 옵션이 표시되지 않는 기본 상태로 복원하려면 다음 코드를 실행합니다.

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

사용자가 데이터베이스 메일을 보내도록 올바르게 구성되었는지 확인하려면

  1. 데이터베이스 메일을 보내려면 사용자가 DatabaseMailUserRole의 멤버여야 합니다. sysadmin 고정 서버 역할 및 msdbdb_owner 역할의 멤버는 자동으로 DatabaseMailUserRole 역할의 멤버가 됩니다. DatabaseMailUserRole의 모든 다른 멤버를 표시하려면 다음 문을 실행합니다.

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

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

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

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

  1. 데이터베이스 메일 외부 프로그램은 처리할 전자 메일 메시지가 있을 때 활성화됩니다. 지정된 제한 시간 동안 보낼 메시지가 없는 경우 프로그램이 종료됩니다. 데이터베이스 메일 활성화가 시작되었는지 확인하려면 다음 문을 실행합니다.

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  2. 데이터베이스 메일이 시작되지 않은 경우 다음 문을 실행하여 시작합니다.

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. 데이터베이스 메일 외부 프로그램이 시작된 경우 다음 문으로 메일 큐의 상태를 확인합니다.

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

    메일 큐의 상태는 RECEIVES_OCCURRING이어야 합니다. 큐의 상태는 시시각각 달라집니다. 메일 큐 상태가 RECEIVES_OCCURRING이 아닐 경우 sysmail_stop_sp를 사용하여 큐를 중지한 다음 sysmail_start_sp를 사용하여 큐를 시작합니다.

[!참고]

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

데이터베이스 메일의 문제가 한 프로필의 모든 계정에 영향을 미치는지 또는 일부 계정에만 영향을 미치는지 확인하려면

  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 서버 문제를 찾아 근본적인 원인을 해결하십시오.

보안

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