Aracılığıyla paylaş


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

WMI olay sağlayıcı kullanmak için bir genel yolu, belirli olaylara yanıt veren bir SQL Server Agent Uyarıları oluşturmaktır.Aşağıdaki örnek, bir tabloda daha sonraki analizler için XML çıkmaz grafik olayları kaydeden basit bir uyarı sunar.SQL Server Agent bir WQL isteği gönderdiğinde, WMI olay s alır ve yanıt olarak çalışan bir iş olay.Bildirim iletisi işlenirken dahil birkaç Hizmet Aracısı nesne olsa da, WMI olay sağlayıcı oluşturmak ve bu nesneleri yönetmek ayrıntılarını işleyen dikkat edin.

Example

Önce tablo içinde oluşturulur AdventureWorks çıkmaz grafik olay tutmak için veritabanı'ı tıklatın. Tablo, iki sütun içerir: The AlertTime Uyarı çalıştığında, saat sütunu içeren ve DeadlockGraph sütun, çıkmaz grafik içeren bir XML belgesi içerir.

Sonra uyarı oluşturulur.Komut, ilk uyarı çalışacak bir iş adım işe ekler ve geçerli iş hedefleri, iş oluşturur örnek, SQL Server. Komut, sonra uyarı oluşturur.

iş adımı alır TextData özellik WMI olay örnek ve değer eklerDeadlockGraph sütunDeadlockEvents tablosudur.Dikkat SQL Server örtülü olarak dize XML biçimine dönüştürür. Işlem adımı kullandığından Transact-SQL alt sistemi, iş adım proxy belirtmiyor.

uyarı çalışan iş her bir çıkmaz grafik izleme olayı kaydedilir.Bir WMI uyarısı için SQL Server Agent ad ile belirtilen bir WQL deyim bildirme sorgusu oluşturur.Bu uyarı, SQL Server Agent varsayılan izler örnek yerel bilgisayardaki.WQL deyim herhangi istekleri DEADLOCK_GRAPH Varsayılan örnek olay. Uyarının izleyen kopyayı değiştirmek için , örnek adı için Ek Yardım düğmesini kullanın. MSSQLSERVER içinde @wmi\_namespace Uyarı için.

Not

WMI olayları almak SQL Server Agent için Service Broker Etkin gerekir 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

Örnek sınama

Görmek için iş çalıştırmak, bir çıkmaz provoke.Içinde SQL Server Management Studio, iki açın. SQL sorgusu sekmeler ve her iki sorgu aynı bağlanın.Aşağıdaki komut dosyası, sorgu sekmelerden birini çalıştırın.Bu komut dosyasını bir sonuç üreten küme ve tamamlanır.

USE AdventureWorks ;
GO

BEGIN TRANSACTION ;
GO

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

Aşağıdaki komut dosyası ikinci sorgu sekmesinde çalıştırın.Bir sonuç kümesi'ni ve sonra bkilits almak için beklerken, bu komut dosyası üreten bir kilit hakkında 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

Aşağıdaki komut ilk sorguyu sekmesinde çalıştırın.Bir üzerinde kilidinin alınması beklenirken, bu komut dosyası blokları Production.Location. Kısa bir saat aşımı SQL Server Bu komut dosyası veya komut dosyası örnek çıkmaz kurban olarak seçin ve işlemi sona erdirmek.

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

çıkmaz provoking sonra SQL Server Agent'ı, uyarı etkinleştirmek ve işi çalıştırmak için birkaç dakika bekleyin.' In içeriğini inceleyin DeadlockEvents Aşağıdaki komut dosyası çalıştırarak Tablo:

SELECT * FROM DeadlockEvents ;
GO

The DeadlockGraph sütun should contain an XML document that shows all the properties of the çıkmaz graph olay.