Próbki: Tworzenie SQL Server Agent Alert za pomocą dostawcy WMI dla zdarzeń serwera
Typowy sposób użycia dostawcy zdarzeń WMI jest utworzenie SQL Server Agent alerty odpowiadających na określone zdarzenia.Poniższy przykład przedstawia prosty alert, który zapisuje zdarzenia w formacie XML zakleszczenie wykresu w tabela dla późniejszej analizy.SQL Server Agent przesyła żądanie WQL, odbiera zdarzeń WMI i uruchamia zadanie w odpowiedzi na zdarzenie.Zauważyć, że chociaż kilku obiektów Service Broker są zaangażowane w przetwarzanie powiadomienie wiadomości dostawcy zdarzeń WMI obsługuje szczegóły dotyczące tworzenia i zarządzania tych obiektów.
Przykład
Po pierwsze, tabela jest tworzony w AdventureWorks2008R2 bazy danych do przechowywania wykresu zakleszczenie zdarzenie.Tabela zawiera dwie kolumny: AlertTime Czas, który uruchamia alert, przechowuje kolumna i DeadlockGraph kolumna przechowuje dokument XML zawierający wykres zakleszczenie.
Tworzona jest alert.Skrypt tworzy najpierw zadanie, że alert zostanie uruchomiony, dodaje krok zadania do zadania i elementy docelowe zadania bieżące wystąpienie SQL Server.Skrypt tworzy następnie alert.
Pobiera krok zadanie TextData właściwość wystąpienie zdarzenie usługi WMI i wstawia, których wartość w DeadlockGraph kolumna DeadlockEvents tabela.Należy zauważyć, że SQL Server niejawnie konwertuje ciąg w formacie XML.Ponieważ zadanie krok używa Transact-SQL podsystemu krok zadania nie określono serwera proxy.
Alert uruchamia zadanie zawsze będzie rejestrowane zdarzenie śledzenia wykresu zakleszczenie.WMI alert, agenta programu SQL Server tworzy powiadomienie kwerendy przy użyciu nazw i określona instrukcja WQL.Tego alert SQL Server Agent monitoruje wystąpienie domyślne na komputerze lokalnym.Instrukcja WQL zażąda żadnych DEADLOCK_GRAPH zdarzenie w wystąpienie domyślne.Aby zmienić wystąpienie, które monitoruje alert, należy podstawić nazwę instancji MSSQLSERVER w @wmi_namespace dla alertu.
Ostrzeżenie
Dla SQL Server agenta do odbierania zdarzeń WMI Service Broker musi być włączona w msdb i AdventureWorks2008R2.
USE AdventureWorks2008R2 ;
GO
IF OBJECT_ID('DeadlockEvents', 'U') IS NOT NULL
BEGIN
DROP TABLE DeadlockEvents ;
END ;
GO
CREATE TABLE DeadlockEvents
(AlertTime DATETIME, DeadlockGraph XML) ;
GO
-- Add a job for the alert to run.
EXEC msdb.dbo.sp_add_job @job_name=N'Capture Deadlock Graph',
@enabled=1,
@description=N'Job for responding to DEADLOCK_GRAPH events' ;
GO
-- Add a jobstep that inserts the current time and the deadlock graph into
-- the DeadlockEvents table.
EXEC msdb.dbo.sp_add_jobstep
@job_name = N'Capture Deadlock Graph',
@step_name=N'Insert graph into LogEvents',
@step_id=1,
@on_success_action=1,
@on_fail_action=2,
@subsystem=N'TSQL',
@command= N'INSERT INTO DeadlockEvents
(AlertTime, DeadlockGraph)
VALUES (getdate(), N''$(ESCAPE_SQUOTE(WMI(TextData))))',
@database_name=N'AdventureWorks2008R2' ;
GO
-- Set the job server for the job to the current instance of SQL Server.
EXEC msdb.dbo.sp_add_jobserver @job_name = N'Capture Deadlock Graph' ;
GO
-- Add an alert that responds to all DEADLOCK_GRAPH events for
-- the default instance. To monitor deadlocks for a different instance,
-- change MSSQLSERVER to the name of the instance.
EXEC msdb.dbo.sp_add_alert @name=N'Respond to DEADLOCK_GRAPH',
@wmi_namespace=N'\\.\root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER',
@wmi_query=N'SELECT * FROM DEADLOCK_GRAPH',
@job_name='Capture Deadlock Graph' ;
GO
Badania próbki
Aby sprawdzić uruchomienie zadanie, powodować zakleszczenie.W SQL Server Management Studio, otwórz dwóch Kwerendy SQL karty i połączyć oba kwerend tego samego wystąpienie.Uruchom następujący skrypt w jednej z kart kwerendy.Ten skrypt tworzy jeden zestaw wyników i wykończenie.
USE AdventureWorks2008R2 ;
GO
BEGIN TRANSACTION ;
GO
SELECT TOP(1) Name FROM Production.Product WITH (XLOCK) ;
GO
Uruchom następujący skrypt w drugą kartę kwerendy.Ten skrypt tworzy jeden zestaw wyników i następnie bloków, oczekująca na blokadę Production.Product.
USE AdventureWorks2008R2 ;
GO
BEGIN TRANSACTION ;
GO
SELECT TOP(1) Name FROM Production.Location WITH (XLOCK) ;
GO
SELECT TOP(1) Name FROM Production.Product WITH (XLOCK) ;
GO
Uruchom następujący skrypt na pierwszej karcie kwerendy.Ten skrypt bblokadas oczekująca blokada na Production.Location.Po krótkim czas-out, SQL Server będzie wybrać ten skrypt lub skrypt w próbce jako ofiara zakleszczenie i zakończenia transakcji.
SELECT TOP(1) Name FROM Production.Location WITH (XLOCK) ;
GO
Po zdolnemu do wywołania zakleszczenie, zaczekaj kilka chwil na SQL Server agenta, aby uaktywnić ten alert, a następnie uruchomić zadanie.Sprawdź zawartość DeadlockEvents tabela następujący skrypt:
SELECT * FROM DeadlockEvents ;
GO
DeadlockGraph Kolumna powinna zawierać dokument XML, który zawiera wszystkie właściwości zdarzenie wykresu zakleszczenie.