データベース メールのトラブルシューティング : 一般的な手順

データベース メールのトラブルシューティングを行うには、データベース メール システムに関して次の点を確認する必要があります。以下の手順は論理的な順序で示していますが、どのような順序で行ってもかまいません。

データベース メールが有効かどうかを判断する

  1. [スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft SQL Server 2005]、[構成ツール] の順にポイントし、[SQL Server セキュリティ構成ツール] をクリックします。

  2. [機能のセキュリティ構成] をクリックします。

  3. [MSSQLSERVER] の下の [データベース エンジン] を展開し、[データベース メール] をクリックします。

  4. [データベース メール ストアド プロシージャを有効にする] がオンになっていることを確認し、[適用] をクリックします。

  5. SQL Server セキュリティ構成ツールを終了します。

データベース メールを送信できるようにユーザーが正しく構成されているかどうかを判断する

  1. データベース メールを送信するユーザーは、DatabaseMailUserRole のメンバである必要があります。sysadmin 固定サーバー ロールと msdbdb_owner ロールのメンバは、自動的に DatabaseMailUserRole ロールのメンバになります。DatabaseMailUserRole の他のすべてのメンバを一覧するには、次のステートメントを実行します。

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole' ;
    
  2. DatabaseMailUserRole ロールにユーザーを追加するには、次のステートメントを使用します。

    sp_addrolemember @rolename = 'DatabaseMailUserRole', 
       @membername = '<database user>'
    
  3. データベース メールを送信するユーザーは、少なくとも 1 つのデータベース メール プロファイルにアクセスできる必要があります。ユーザー (プリンシパル) とそのユーザーがアクセスできるプロファイルを一覧するには、次のステートメントを実行します。

    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 を使用してキューを開始してみます。

ms187540.note(ja-jp,SQL.90).gifメモ :
メール キュー内の電子メールの数を判断するには、sysmail_help_queue_sp の結果セットの length 列を使用します。

データベース メールの問題がプロファイル内のすべてのアカウントに影響しているか、一部のアカウントにのみ影響しているかを判断する

  1. すべてのプロファイルではなく、一部のプロファイルしかメールを送信できていない場合は、メールを送信できないプロファイルで使用されているデータベース メール アカウントに問題があると考えられます。メールを正しく送信できるアカウントを確認するには、次のステートメントを実行します。

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems ;
    
  2. メールを送信できないプロファイルが、上のステートメントで一覧したどのアカウントも使用していない場合は、そのプロファイルで使用可能なアカウントがすべて正しく機能していない可能性があります。個々のアカウントをテストするには、データベース メール構成ウィザードを使用して、アカウントを 1 つだけ含む新しいプロファイルを作成します。次に、[テスト電子メールの送信] ダイアログ ボックスを使用し、このアカウントでメールを送信します。

  3. データベース メールから返されたエラー メッセージを表示するには、次のステートメントを実行します。

    SELECT * FROM msdb.dbo.sysmail_event_log ;
    
ms187540.note(ja-jp,SQL.90).gifメモ :
データベース メールでは、メールが SMTP メール サーバーに正常に配信されると、メールが送信されたと見なします。その後、受信者の電子メール アドレスが無効であるなどのエラーが発生しメールが配信されなくても、データベース メールのログにはそのことが記録されません。

メール配信が再試行されるようにデータベース メールを構成する

  1. SMTP サーバーに確実に到達できないことが原因でデータベース メールが失敗していると思われる場合は、データベース メールからの各メッセージの送信試行回数を増加することで、正常なメール配信率を向上できることがあります。データベース メール構成ウィザードを起動して、[システム パラメータを表示または変更する] オプションを選択します。または、プロファイルに関連付けるアカウント数を増やすこともできます。これにより、プライマリ アカウントからのフェールオーバー時には、フェールオーバー アカウントを使用して電子メールが送信されるようになります。

  2. [システム パラメータの構成] ページの [アカウントの再試行回数] の 5 回、[アカウントの再試行間隔] の 60 秒という既定値は、SMTP サーバーに 5 分間到達できないと、メッセージの配信に失敗することを意味しています。この 2 つのパラメータ値を増加することで、メッセージの配信に失敗するまでの時間を長くすることができます。

ms187540.note(ja-jp,SQL.90).gifメモ :
送信されるメッセージが多い場合、この既定値を大きくすると確実性は高くなりますが、大量のメッセージの配信が何度も試行されるので、リソースの使用量も大幅に増加することになります。ネットワークや SMTP サーバーに、データベース メールから SMTP サーバーへの即時アクセスを妨害するような問題があれば、それを解決することで、根本的な問題点に対処してください。

セキュリティ

データベース メールのあらゆる部分に関してトラブルシューティングを行うには、sysadmin 固定サーバー ロールのメンバである必要があります。sysadmin 固定サーバー ロールのメンバでないユーザーは、自身が送信した電子メールに関する情報しか入手できず、他のユーザーが送信した電子メールに関する情報は入手できません。

参照

処理手順

データベース メールのトラブルシューティング

概念

データベース メール
データベース メールのアーキテクチャ

その他の技術情報

データベース メールと SQL Mail のストアド プロシージャ (Transact-SQL)
データベース メール ビュー (Transact-SQL)
データベース メール構成ウィザード

ヘルプおよび情報

SQL Server 2005 の参考資料の入手