データベース メールのトラブルシューティング : キューに登録されたメールのエントリが sysmail_event_log または Windows アプリケーション イベント ログにない

このトピックでは、電子メール メッセージが正常にキューに登録されても、外部プログラムの利用状況が sysmail_event_log ビューまたは Windows アプリケーション イベント ログに表示されない問題のトラブルシューティングを行う方法について説明します。

データベース メールは、電子メール メッセージをキューに登録するために Service Broker に依存します。データベース メールが停止している場合、または Service Broker のメッセージ配信が msdb データベースでアクティブになっていない場合は、データベース メールによってメッセージがキューに登録されますが、そのメッセージは配信できません。この場合、Service Broker のメッセージは Service Broker メール キューに残ったままになります。Service Broker によって外部プログラムがアクティブ化されないので、sysmail_event_log にはログ エントリが存在せず、sysmail_allitems および関連するビューのアイテムの状態は更新されません。

データベース メールが有効かどうかを確認するには、次のステートメントを実行します。

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

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

0 は、Service Broker のメッセージ配信が msdb データベースでアクティブになっていないことを示します。この問題を解決するには、データベースで Service Broker をアクティブにします。Service Broker のメッセージ配信のアクティブ化の詳細については、「データベースで Service Broker のメッセージ配信をアクティブ化する方法 (Transact-SQL)」を参照してください。

データベース メールは、多数の内部ストアド プロシージャに依存しています。外部からのアクセスを制限するには、これらのストアド プロシージャを新しくインストールした SQL Server で無効にします。これらのストアド プロシージャを有効にするには、sp_configure システム ストアド プロシージャの Database Mail XPs オプションを使用します。

データベース メールが、msdb データベースで停止している可能性があります。データベース メールの状態を確認するには、次のステートメントを実行します。

EXECUTE dbo.sysmail_help_status_sp;

EXECUTE dbo.sysmail_help_status_sp;

メール ホスト データベースでデータベース メールを開始するには、msdb データベースで次のコマンドを実行します。

EXECUTE dbo.sysmail_start_sp;

EXECUTE dbo.sysmail_start_sp;

Service Broker がアクティブになっている場合、メッセージのダイアログの有効期間が確認されます。したがって、構成されたダイアログの有効期間よりも長く Service Broker 転送キューに登録されているすべてのメッセージがすぐに失敗します。データベース メールにより、失敗したメッセージの状態が sysmail_allitems および関連するビューで更新されます。電子メール メッセージを再び送信するかどうかを決定する必要があります。データベース メールで使用するダイアログの有効期間の設定の詳細については、「sysmail_configure_sp (Transact-SQL)」を参照してください。