データベース メールのトラブルシューティング : キューに登録されたメールのエントリが sysmail_event_log または Windows アプリケーション イベント ログにない
このトピックでは、電子メール メッセージが正常にキューに登録されても、外部プログラムの利用状況が sysmail_event_log (Transact-SQL) ビューまたは 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' ;
値 0 は、Service Broker のメッセージ配信が msdb データベースでアクティブになっていないことを示します。この問題を解決するには、データベースで Service Broker をアクティブにします。Service Broker のメッセージ配信のアクティブ化の詳細については、「データベースで Service Broker のメッセージ配信をアクティブ化する方法 (Transact-SQL)」を参照してください。
データベース メールは、多数の内部ストアド プロシージャに依存しています。外部からのアクセスを制限するには、これらのストアド プロシージャを新しくインストールした SQL Server で無効にします。これらのストアド プロシージャを有効にするには、SQL Server セキュリティ構成ユーティリティまたは sp_configure (Transact-SQL) システム ストアド プロシージャを使用します。
データベース メールが、msdb データベースで停止している可能性があります。データベース メールの状態を確認するには、次のステートメントを実行します。
EXECUTE dbo.sysmail_help_status_sp ;
メール ホスト データベースでデータベース メールを開始するには、msdb データベースで次のコマンドを実行します。
EXECUTE dbo.sysmail_start_sp ;
Service Broker がアクティブになっている場合、メッセージのダイアログの有効期間が確認されます。したがって、構成されたダイアログの有効期間よりも長く Service Broker 転送キューに登録されているすべてのメッセージがすぐに失敗します。データベース メールにより、失敗したメッセージの状態が sysmail_allitems (Transact-SQL) および関連するビューで更新されます。電子メール メッセージを再び送信するかどうかを決定する必要があります。データベース メールで使用するダイアログの有効期間の設定の詳細については、「sysmail_configure_sp (Transact-SQL)」を参照してください。
参照
処理手順
データベース メールのトラブルシューティング
データベース メールのトラブルシューティング : 一般的な手順