Ich muss eine Warnung erstellen, die mich benachrichtigt, wenn eine Abfrage länger als 60 Sekunden blockiert wurde. Zum Beispiel, wenn jemand eine Transaktion für eine Tabelle geöffnet hat und vergisst, ein Commit oder ein Rollback auszuführen. Ist dies aus den Systemtabellen möglich?
sql-server-2008-r2
Klumpig
quelle
quelle
Antworten:
Ich mochte Martins Vorschlag, Ereignisbenachrichtigungen zu verwenden, also folgte ich seinem Beispiellink und stellte diesen für unseren Server zusammen. Sie müssen entweder Ihre E-Mail-Adresse in den Aufruf von sp_send_dbmail einfügen oder das Verfahren zum Lesen von E-Mail-Adressen aus einer Konfigurationstabelle ändern. Passen Sie außerdem den Schwellenwert für blockierte Prozesse nach Ihren Wünschen an. Das Ergebnis ist eine übersichtliche Berichtsnachricht mit Informationen zu den blockierten und blockierenden Prozessen.
Die Fehlerbehandlung ist wirklich einfach; Das Gespräch wird nur beendet, wenn eine Fehlermeldung oder eine Dialogmeldung beendet wird.
Stellen Sie sicher, dass Database Mail auf Ihrem System so konfiguriert ist, dass sp_send_dbmail verwendet werden kann.
quelle
USE msdb GO CREATE PROCEDURE StartBlockedProcessNotification AS CREATE EVENT NOTIFICATION BlockedProcessNotification ON SERVER FOR BLOCKED_PROCESS_REPORT TO SERVICE 'BlockedProcessService', 'current database' GO USE MASTER GO EXEC sp_procoption 'StartBlockedProcessNotification', 'startup', 'on' USE msdb; EXEC StartBlockedProcessNotification;
Ich bin mir nicht sicher, ob es einen einfacheren Weg gibt, aber ein Weg wäre, zuerst den Schwellenwert für blockierte Prozesse auf 60 Sekunden zu konfigurieren.
Richten Sie dann eine Ereignisbenachrichtigung für die ein
BLOCKED_PROCESS_REPORT
. In dieser Antwort finden Sie beispielsweise Code für Ereignisbenachrichtigungen.Ihr Aktivierungsverfahren könnte
sp_send_dbmail
zum Senden der E-Mail verwendet werden.quelle