web-dev-qa-db-ja.com

デッドロックアラートが機能しないのはなぜですか?

次のようなオペレーターへの通知を含むデッドロックアラートを作成しました。

EXEC msdb.dbo.sp_add_alert @name=N'1205 Deadlock', 
        @message_id=1205, 
        @severity=0, 
        @enabled=1, 
        @delay_between_responses=30, 
        @include_event_description_in=1, 
        @database_name=N'myDB', 
        @category_name=N'[Uncategorized]', 
        @job_id=N'00000000-0000-0000-0000-000000000000';

このアラートは通知用に登録されています。

それは数か月の間設置されていて、1日に複数のデッドロックがあるが、それは決して現れなかったという歴史です。手動でデッドロックを作成しました。ログファイルに表示されます。

このアラートが通知を生成するために欠けているものは何ですか?その他の通知(例: 18456無効なログインが正常に機能します。

3
Magier

おそらく、エラー1205がERRORLOGにログインするように設定されていません。 sys.messagesで調べてください。

SELECT *
FROM sys.messages 
WHERE message_id = 1205;

is_event_loggedが0に設定されている場合は、次のように変更します。

EXEC master.sys.sp_altermessage 
    @message_id = 1205,
    @parameter = 'WITH_LOG',
    @parameter_value = 'true';

documentation for sp_add_alertは、アラートが発生する条件を説明します。

備考

sp_add_alertmsdbデータベースから実行する必要があります。

SQL ServerおよびSQL Serverアプリケーションによって生成されたエラー/メッセージがWindowsアプリケーションログに送信され、アラートが発生する可能性がある状況は次のとおりです。

  • 重大度19以上sys.messagesエラー
  • WITH LOG構文で呼び出されたRAISERRORステートメント
  • sp_altermessageを使用して変更または作成されたsys.messagesエラー
  • xp_logeventを使用してログに記録されたすべてのイベント
6
spaghettidba