Przykład: Tworząc alert agenta serwera SQL przy użyciu dostawca WMI dla zdarzenia serwera

Jeden typowy sposób użycia dostawca zdarzeń WMI jest do tworzenia alertów agenta programu SQL Server, które odpowiadają na określone zdarzenie.Poniższy przykład przedstawia proste alert, który zapisuje zdarzenia wykresu zakleszczenie w formacie XML do tabela w celu późniejszej analizy.SQL Server Agent przesyła żądanie WQL, odbiera zdarzeń WMI i uruchamia zadanie w odpowiedzi na zdarzenie.Zwróć uwagę, chociaż obejmuje kilka obiektów usługa Broker przetwarzania powiadomienie wiadomości, dostawca WMI zdarzeń obsługuje szczegółowe informacje dotyczące tworzenia i zarządzania tymi obiektami.

Example

Po pierwsze, tabela jest tworzona w AdventureWorks Baza danych, aby pomieścić zdarzenie wykresu zakleszczenie. Tabela ta zawiera dwie kolumny: The AlertTime kolumna zawiera czas, który uruchomi alert, oraz DeadlockGraph kolumna zawiera dokument XML, który zawiera wykres zakleszczenie.

Tworzona jest alert.Skrypt najpierw tworzy zadanie, że alert zostanie uruchomiony, dodaje kroku zadania do zadania i jest przeznaczony dla zadania w bieżącym wystąpienie z SQL Server. Skrypt tworzy następnie alert.

Etap zadanie pobiera TextData Właściwość wystąpienie zdarzenie WMI i wstawia, że wartość w DeadlockGraph kolumnaDeadlockEvents tabela.Zwróć uwagę, że SQL Server niejawnie konwertuje ciąg na formacie XML. Ponieważ zadanie krok używa Transact-SQL podsystem, krok zadania nie określono serwer proxy.

Alert uruchamia zadanie za każdym razem, gdy może być rejestrowane zdarzenie śledzenia typu wykresu zakleszczenie.Alert WMI agenta programu SQL Server tworzy kwerendy powiadamiającej przy użyciu nazw i określona instrukcja WQL.Dla tego alertu programu SQL Server Agent monitoruje domyślnego wystąpienie na komputerze lokalnym.Instrukcja WQL żąda dowolne DEADLOCK_GRAPH zdarzenie wystąpienie domyślne. Aby zmienić wystąpienie, które monitoruje alert, podstawić nazwę instancji MSSQLSERVER w @wmi\_namespace dla alertu.

Uwaga

Dla programu SQL Server Agent do odbierania zdarzeń WMI Service Broker musi być włączony msdb and AdventureWorks.

USE AdventureWorks ;
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'AdventureWorks' ;
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 wyświetlić zadanie, uruchamianie, powodować zakleszczenie.W SQL Server Management Studio, otworzyć dwóch Kwerenda SQL karty i połącz oba kwerendy do tego samego wystąpienie.Uruchom następujący skrypt w jednej z kart kwerendy.Ten skrypt tworzy jeden zestaw wyników i zakończy się.

USE AdventureWorks ;
GO

BEGIN TRANSACTION ;
GO

SELECT TOP(1) Name FROM Production.Product WITH (XLOCK) ;
GO

Na drugiej karcie kwerendę należy uruchomić następujący skrypt.Ten skrypt tworzy zestaw jeden wynik, a następnie bloków, oczekiwanie na uzyskanie blokada na Production.Product.

USE AdventureWorks ;
GO

BEGIN TRANSACTION ;
GO

SELECT TOP(1) Name FROM Production.Location WITH (XLOCK) ;
GO

SELECT TOP(1) Name FROM Production.Product WITH (XLOCK) ;
GO

Na pierwszej karcie kwerendę należy uruchomić następujący skrypt.To blokach skryptu, oczekiwanie na uzyskanie blokada na Production.Location. Po krótki limit czas 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 provoking zakleszczenie, należy odczekać kilka chwil dla agenta programu SQL Server uaktywnić ten alert, a następnie uruchomić zadanie.Sprawdź zawartość DeadlockEvents Tabela, uruchamiając następujący skrypt:

SELECT * FROM DeadlockEvents ;
GO

The DeadlockGraph kolumna should contain an XML document that shows all the properties of the zakleszczenie graph zdarzenie.