Korzystanie z dostawcy WMI WQL, dla zdarzeń serwera
Dostępu do funkcji zarządzania aplikacjami SQL Server zdarzeń przy użyciu dostawcy WMI dla zdarzeń serwera poprzez wydanie oświadczenia język kwerend usługi WMI (WQL).WQL jest uproszczony podzbiór z structured query language (SQL) niektóre rozszerzenia specyficzne dla usługi WMI.Przy użyciu języka WQL, aplikacja pobiera typ zdarzenie przeciwko konkretne wystąpienie SQL Server, bazy danych lub obiektu bazy danych (tylko obiekt aktualnie obsługiwany jest kolejki).Dostawca WMI dla zdarzeń serwera tłumaczy kwerendy do powiadomienie o zdarzeniu utworzona w miejsce docelowe bazie danych dla zakresu bazy danych lub obiektu o zakresie powiadomienie o zdarzenius, lub w wzorca bazy danych dla zakresu serwera powiadomienie o zdarzenius.
Na przykład rozważmy następujące kwerendy WQL:
SELECT * FROM DDL_DATABASE_LEVEL_EVENTS WHERE DatabaseName = 'AdventureWorks2008R2'
Z tej kwerendy próbuje wyprodukowania równoważne to powiadomienie o zdarzeniu w dostawcy WMI serwer docelowy:
USE AdventureWorks2008R2 ;
GO
CREATE EVENT NOTIFICATION SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9
ON DATABASE
WITH FAN_IN
FOR DDL_DATABASE_LEVEL_EVENTS
TO SERVICE
'SQL/Notifications/ProcessWMIEventProviderNotification/v1.0',
'A7E5521A-1CA6-4741-865D-826F804E5135';
GO
Argument w FROM klauzula kwerendy WQL (DDL_DATABASE_LEVEL_EVENTS) mogą być wszelkie ważne zdarzenie od których można tworzyć powiadomienie o zdarzeniu.Argumenty w SELECT i WHERE klauzul można określić wszelkie właściwość zdarzenia skojarzone zdarzenie lub jego zdarzeń nadrzędnej.Nieprawidłowa lista zdarzenies i zdarzenie właściwości, zobacz Dostawca WMI dla zdarzeń serwera klasy i właściwości.
Następującej składni WQL jest obsługiwana przez dostawcę WMI jawnie dla zdarzeń serwera.Można określić dodatkowe składni WQL, ale nie jest specyficzna dla tego dostawca i jest analizowany zamiast przez hosta usługa WMI.Aby uzyskać więcej informacji na temat język kwerend usługi WMI dokumentacji WQL na Microsoft Developer Network (MSDN).
Składnia
SELECT { event_property [ ,...n ] | * }
FROM event_type
WHERE where_condition
Argumenty
event_property
Jest to właściwość zdarzenie.Przykładami PostTime, SPID, i LoginName.Odszukiwanie każdego zdarzenie wymienione w Dostawcy WMI dla klas zdarzeń serwera i właściwości do określenia właściwości, które posiada.Na przykład, posiada zdarzenie DDL_DATABASE_LEVEL_EVENTS DatabaseName i UserName Właściwości.Również dziedziczy SQLInstance, LoginName, PostTime, SPID, i ComputerName Właściwości z jego zdarzeń nadrzędnej.,...n
Wskazuje, że event_property może przeszukiwać wiele razy, oddzielonych przecinkami.*
Określa, że wszystkie właściwości skojarzone z zdarzenie są badane.event_type
Jest dowolnym zdarzeniem, przeciwko której powiadomienie o zdarzeniu mogą być tworzone.Aby uzyskać listę dostępnych zdarzeń, zobacz Dostawca WMI dla zdarzeń serwera klasy i właściwości.Należy zauważyć, że event type nazwy odpowiadają tym samym event_type | event_group może być określony podczas ręcznego tworzenia powiadomienie o zdarzeniu za pomocą tworzenia zdarzenie powiadamiania.Przykłady event type CREATE_TABLE, LOCK_DEADLOCK, DDL_USER_EVENTS, i TRC_DATABASE.Ostrzeżenie
Niektóre procedury składowane w systemie , wykonywać operacje DDL like można również powiadomienia o zdarzeniach pożaru.Badania do określenia ich odpowiedzi na powiadomienia o zdarzenie procedury składowane w systemie , są uruchamiane.Na przykład utworzyć typ instrukcja i sp_addtype zarówno procedura składowana zostanie zastosowana powiadomienie o zdarzeniu utworzonego zdarzenie CREATE_TYPE.Jednakże sp_rename procedura składowana nie ognia dowolnego zdarzenie powiadomienia.Aby uzyskać więcej informacji, zobacz Zdarzenia DDL.
where_condition
Jest predykat kwerend klauzula WHERE składa się z event_property nazwy i logicznych i operatory porównania.where_condition Określa zakres, w którym odpowiednie powiadomienie o zdarzeniu jest zarejestrowany w miejsce docelowe bazie danych.Może także działać jako filtru do miejsce docelowe określonego schematu lub obiektu, z którego kwerendę event_type. Aby uzyskać więcej informacji, zobacz sekcję Spostrzeżenia w dalszej części tego tematu.Tylko = operand mogą być używane razem z DatabaseName, SchemaName, i ObjectName.Inne wyrażenia nie można korzystać z tych zdarzenie właściwości.
Uwagi
where_condition Dostawcy WMI dla zdarzeń serwera składnia określa następujące:
Zakres, w którym usiłuje pobrać określonego dostawca event_type: poziom serwera, poziom bazy danych lub poziomu obiektu (obiekt tylko aktualnie obsługiwany jest kolejki).Ostatecznie, ten zakres Określa typ powiadomienie o zdarzeniu utworzone w miejsce docelowe bazie danych.Ten proces nazywany powiadomienie o zdarzeniu rejestracji.
Bazy danych, schematu i obiekt, gdzie stosowne, na którym należy zarejestrować.
Dostawca WMI dla zdarzeń serwera używa algorytmu dół góra, nadające się najpierw do produkcji możliwie najwęższej zakres dla podstawowej powiadomienie o zdarzeniu.Algorytm próbuje zminimalizować wewnętrznego działania na serwer i sieć ruch między wystąpienie SQL Server i proces hosta usługi WMI.Sprawdza, czy dostawca event_type określonych w klauzula FROM i warunków w klauzula WHERE i próbuje zarejestrować podstawowej powiadamianie O ZDARZENIACH z najwęższy zakres możliwych.Jeśli dostawca nie może zarejestrować się w najwęższy zakres, usiłuje zarejestrować się w zakresach kolejno wyższe aż wreszcie powiedzie się rejestracji.Jeśli zostanie osiągnięty zakres najwyższy poziom serwera) i się nie powiedzie, zwraca błąd konsumenta.
For example, if DatabaseName='AdventureWorks2008R2' is specified in the WHERE clause, the provider tries to register an event notification in the AdventureWorks2008R2 database.Jeśli AdventureWorks2008R2 Baza danych istnieje i klient wywołującego ma wymagane uprawnienia do tworzenia powiadomienie o zdarzeniu w AdventureWorks2008R2, rejestracja się powiedzie.W przeciwnym razie podjęta próba zarejestrowania powiadomienie o zdarzeniu poziom serwera.Rejestracja się powiedzie, jeśli klient WMI ma wymagane uprawnienia.Jednak w tym scenariuszu zdarzenia nie są zwracane do klient, dopóki AdventureWorks2008R2 Baza danych została utworzona.
where_condition Może także działać jako filtr, aby dodatkowo ograniczyć kwerendy do określonej bazy danych, schemacie lub obiektu.Na przykład rozważmy następujące kwerendy WQL:
SELECT * FROM ALTER_TABLE
WHERE DatabaseName = 'AdventureWorks2008R2' AND SchemaName = 'Sales'
AND ObjectType='Table' AND ObjectName = 'SalesOrderDetail'
W zależności od wyniku procesu rejestracji tej kwerendy WQL może być zarejestrowane poziom bazy danych lub serwera.Jednak nawet jeśli jest zarejestrowany poziom serwera, dostawca ostatecznie filtruje żadnego ALTER_TABLE zdarzenia, które nie mają zastosowania do AdventureWorks2008R2.Sales.SalesOrderDetail tabela.Innymi słowy, dostawca zwraca tylko właściwości ALTER_TABLE zdarzenia, które występują w tym określonej tabela.
Jeśli wyrażenie złożonych, takich jak DatabaseName='AW1' lub DatabaseName='AW2' określono próby zarejestrowania zgłoszenia pojedynczego zdarzenie na serwerze zakres zamiast dwóch oddzielnych zdarzenie powiadomienia.Rejestracja się powiedzie, jeśli klient wywołujący ma uprawnienia.
Jeśli SchemaName='X' AND ObjectType='Y' AND ObjectName='Z' są określone w WHERE klauzula, podjęta próba zarejestrować powiadomienie o zdarzeniu bezpośrednio na obiekcie Z w schemacie X.Rejestracja się powiedzie, jeśli klient ma uprawnienia.Należy zauważyć, że obecnie zdarzeń poziom obiektu są obsługiwane tylko w kolejkach i tylko dla QUEUE_ACTIVATION event_type.
Należy zauważyć, że nie wszystkie zdarzenia mogą być wyszukiwane w dowolnym z określonego zakres.Na przykład kwerendy WQL na zdarzenie śledzenia, takich jak Lock_Deadlock lub grupy śledzenia zdarzeń takich jak TRC_LOCKS, mogą być rejestrowane poziom serwera.Podobnie zdarzenie CREATE_ENDPOINT i DDL_ENDPOINT_EVENTS grupy zdarzeń również mogą być rejestrowane tylko poziom serwera.Aby uzyskać więcej informacji o odpowiedni zakres rejestrowania zdarzeń, zobacz Projektowanie powiadomień o zdarzeniach.Próba zarejestrowania WQL kwerendy, których event_type może być rejestrowane tylko na serwerze poziom jest zawsze wykonywane na poziomie serwera.Rejestracja się powiedzie, jeśli klient WMI ma uprawnienia.W przeciwnym razie do klient zwracany jest błąd.W niektórych przypadkach jednak nadal można klauzula WHERE jako filtr dla zdarzeń poziom serwera na podstawie właściwości odpowiadające zdarzenie.Na przykład mieć wielu zdarzeń śledzenia DatabaseName właściwość, które mogą być używane w klauzula WHERE jako filtru.
Buforuj serwera zdarzenie powiadomienia są tworzone w wzorca bazy danych i metadane mogą być wyszukiwane przy użyciu sys.server_zdarzenie_notifications wykazu widoku.
Buforuj bazy danych lub powiadomienia o zakresie obiektu zdarzenie w określonej bazie danych są tworzone i mogą być wyszukiwane metadane za pomocą sys.event_notifications wykazu widoku.(Należy prefiks widoku wykazu z odpowiednią nazwą bazy danych).
Przykłady
A.Podczas badania zdarzenia na serwerzezakres
Następujące kwerendy WQL pobiera wszystkie właściwości zdarzenie dla każdego SERVER_MEMORY_CHANGE śledzenia zdarzeń, który występuje na wystąpienie z SQL Server.
SELECT * FROM SERVER_MEMORY_CHANGE
B.Podczas badania zdarzenia w bazie danychzakres
Następujące kwerendy WQL pobiera właściwości określonego zdarzenie dla dowolnego zdarzenie, występujący w AdventureWorks2008R2 bazy danych i istnieje w DDL_DATABASE_LEVEL_EVENTS grupy zdarzeń.
SELECT SPID, SQLInstance, DatabaseName FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks2008R2'
C.Podczas badania zdarzenia na filtrowanie według schematu i obiekt zakres bazy danych
Następująca kwerenda pobiera wszystkie właściwości zdarzenie dla każdego ALTER_TABLE zdarzenie, który występuje w tabela AdventureWorks2008R2.Sales.SalesOrderDetail.
SELECT * FROM ALTER_TABLE
WHERE DatabaseName = 'AdventureWorks2008R2' AND SchemaName = 'Sales'
AND ObjectType='Table' AND ObjectName = 'SalesOrderDetail'
Zobacz także