Aracılığıyla paylaş


Örnek: Sunucu olayları için WMI sağlayıcısı kullanarak SQL Server Agent uyarı oluşturma

WMI Olay sağlayıcısı kullanmak için bir ortak belirli olaylara yanıt sql Server Agent uyarıları oluşturmak için yoludur.Aşağıdaki örnek xml çıkmaz graph olay kaydeder basit bir uyarı sunan bir tablo daha sonraki analizler için.sql Server Agent bir wql isteği gönderdiğinde, WMI aldığında olays, yanıt olarak iş çalıştırır ve olay.Hizmet Aracısı nesneleri birden fazla bildirim iletisi işleme'de söz konusu olsa da, WMI Olay sağlayıcısı oluşturmak ve bu nesneleri yönetmek ayrıntılarını işleyen, dikkat edin.

Örnek

İlk olarak, bir tablo içinde oluşturulan AdventureWorks2008R2 veritabanı yerleştirileceği çıkmaz graph olay.Tablo iki sütun içerir: AlertTime Sütun tutan Uyarı çalıştığında, saat ve DeadlockGraph sütun içeren xml belgesi içeren çıkmaz grafik.

Daha sonra uyarı oluşturulur.Komut dosyası ilk uyarıyı çalıştıracak işin iş adım ekler ve hedefler geçerli iş olduğunu işi oluşturur örnek , SQL Server.Komut dosyası, daha sonra uyarı oluşturur.

iş adım alır TextData özellik WMI olay örnek ve içine değer ekler, DeadlockGraph sütunu DeadlockEvents tablo.Dikkat SQL Server örtülü olarak dönüştürür dize xml biçimi.İş adım kullandığından Transact-SQL alt sistemi, iş adım belirtilmemiştir proxy.

Uyarı çalışır iş her bir çıkmaz grafik İzleme olay oturum.Bir WMI uyarı için sql Server Agent ad alanı belirtilen wql deyim ile bildirim sorgusu oluşturur.Bu uyarı için sql Server Agent izler varsayılan örnek yerel bilgisayarda.wql deyim herhangi ister DEADLOCK_GRAPH bir olay varsayılan örnek.Uyarı izler kopyayı değiştirmek için örnek adını yerine MSSQLSERVER , @wmi_namespace için uyarı.

Not

sql Server Agent WMI olayları almak için Service Broker etkin olarak msdb ve 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

Örnek test

iş çalışması, yol açabilirsiniz görmek için bir çıkmaz.De SQL Server Management Studio, açık iki sql sorgusu sekmeler ve her iki sorgu aynı bağlanmak örnek.Aşağıdaki komut dosyası sorgu sekmelerden birini çalıştırın.Bu komut bir sonuç küme oluşturur ve biter.

USE AdventureWorks2008R2 ;
GO

BEGIN TRANSACTION ;
GO

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

İkinci sorgu sekmesi aşağıdaki komut dosyasını çalıştırın.Bu komut bir sonuç küme oluşturur ve ardından, üzerinde kilit almak için bekleyen engeller 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

İlk sorgu sekmesi aşağıdaki komut dosyasını çalıştırın.Bu komut dosyası blokları üzerinde kilit almak için beklerken, Production.Location.Kısa bir saat aşımı sonra SQL Server Bu komut dosyası veya komut dosyası örnek olarak çıkmaz seçeceğim kurban ve hareket sona

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

çıkmaz provoking sonra uyarı etkinleştirin ve çalıştırmak sql Server Agent için birkaç dakika bekleyin iş.İçeriğini incelemek DeadlockEvents tablo aşağıdaki komut dosyası çalıştırarak:

SELECT * FROM DeadlockEvents ;
GO

The DeadlockGraph column should contain an XML document that shows all the properties of the deadlock graph event.