Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Managed Instance
Tworzy obiekt, który wysyła informacje o zdarzeniu bazy danych lub serwera do usługi Service Broker. Powiadomienia o zdarzeniach są tworzone tylko przy użyciu instrukcji Transact-SQL.
Transact-SQL konwencje składni
Składnia
CREATE EVENT NOTIFICATION event_notification_name
ON { SERVER | DATABASE | QUEUE queue_name }
[ WITH FAN_IN ]
FOR { event_type | event_group } [ , ...n ]
TO SERVICE 'broker_service' , { 'broker_instance_specifier' | 'current database' }
[ ; ]
Arguments
event_notification_name
Nazwa powiadomienia o zdarzeniu. Nazwa powiadomienia o zdarzeniach musi być zgodna z regułami identyfikatorów i musi być unikatowa w zakresie, w którym są tworzone: SERVER, DATABASElub object_name.
SERWER
Stosuje zakres powiadomienia o zdarzeniu do bieżącego wystąpienia programu SQL Server. Jeśli zostanie określony, powiadomienie jest uruchamiane za każdym razem, gdy określone zdarzenie w klauzuli występuje w FOR dowolnym miejscu w wystąpieniu programu SQL Server.
Uwaga / Notatka
Ta opcja nie jest dostępna w zawartej bazie danych.
DATABASE
Stosuje zakres powiadomienia o zdarzeniu do bieżącej bazy danych. Jeśli zostanie określony, powiadomienie jest uruchamiane za każdym razem, gdy określone zdarzenie w klauzuli FOR występuje w bieżącej bazie danych.
QUEUE
Stosuje zakres powiadomienia do określonej kolejki w bieżącej bazie danych.
QUEUE Można określić tylko wtedy, gdy FOR QUEUE_ACTIVATIONFOR BROKER_QUEUE_DISABLED określono lub jest również określony.
queue_name
Nazwa kolejki, do której ma zastosowanie powiadomienie o zdarzeniu.
queue_name można określić tylko wtedy, gdy QUEUE zostanie określony.
Z FAN_IN
Nakazuje programowi SQL Server wysyłanie tylko jednego komunikatu na zdarzenie do dowolnej określonej usługi dla wszystkich powiadomień o zdarzeniach, które:
- Są tworzone na tym samym zdarzeniu.
- Są tworzone przez tego samego podmiotu zabezpieczeń (co zidentyfikowane przez ten sam identyfikator SID).
- Określ tę samą usługę i broker_instance_specifier.
- Podaj wartość
WITH FAN_IN.
Na przykład są tworzone trzy powiadomienia o zdarzeniach. Wszystkie powiadomienia o zdarzeniach określają FOR ALTER_TABLE, , WITH FAN_INtę samą TO SERVICE klauzulę i są tworzone przez ten sam identyfikator SID. Po uruchomieniu ALTER TABLE instrukcji komunikaty tworzone przez te trzy powiadomienia o zdarzeniach są scalane w jeden. W związku z tym usługa docelowa odbiera tylko jeden komunikat zdarzenia.
event_type
Nazwa typu zdarzenia, który powoduje wykonanie powiadomienia o zdarzeniu.
event_type może być typem zdarzeń Transact-SQL DDL, typem zdarzenia śledzenia SQL lub typem zdarzeń usługi Service Broker. Aby uzyskać listę kwalifikowanych typów zdarzeń Transact-SQL DDL, zobacz Zdarzenia DDL. Typy zdarzeń usługi Service Broker to QUEUE_ACTIVATION i BROKER_QUEUE_DISABLED. Aby uzyskać więcej informacji, zobacz Powiadomienia o zdarzeniach.
event_group
Nazwa wstępnie zdefiniowanej grupy zdarzeń Transact-SQL lub śledzenia SQL. Powiadomienie o zdarzeniu może być uruchamiane po wykonaniu dowolnego zdarzenia należącego do grupy zdarzeń. Aby uzyskać listę grup zdarzeń DDL, Transact-SQL zdarzeń, które obejmują, oraz zakres, w którym można je zdefiniować, zobacz DDL Event Groups (Grupy zdarzeń DDL).
event_group działa również jako makro, gdy CREATE EVENT NOTIFICATION instrukcja zakończy działanie, dodając typy zdarzeń, które obejmuje do sys.events widoku wykazu.
"broker_service"
Określa usługę docelową, która odbiera dane wystąpienia zdarzenia. Program SQL Server otwiera co najmniej jedną konwersację w usłudze docelowej dla powiadomienia o zdarzeniu. Ta usługa musi przestrzegać tego samego typu komunikatu zdarzenia programu SQL Server i kontraktu używanego do wysyłania komunikatu.
Konwersacje pozostają otwarte do momentu porzucenia powiadomienia o zdarzeniu. Niektóre błędy mogą spowodować zamknięcie konwersacji wcześniej. Jawne zakończenie niektórych lub wszystkich konwersacji może uniemożliwić usłudze docelowej odbieranie większej liczby komunikatów.
{ 'broker_instance_specifier' | "current database" }
Określa wystąpienie brokera usług, względem którego broker_service jest rozpoznawana. Wartość dla określonego brokera usług można uzyskać, wysyłając service_broker_guid zapytanie do kolumny sys.databases widoku wykazu. Użyj 'current database' polecenia , aby określić wystąpienie brokera usług w bieżącej bazie danych.
'current database' jest literałem ciągu bez uwzględniania wielkości liter.
Uwaga / Notatka
Ta opcja nie jest dostępna w zawartej bazie danych.
Uwagi
Usługa Service Broker zawiera typ komunikatu i kontrakt przeznaczony specjalnie dla powiadomień o zdarzeniach. W związku z tym usługa inicjująca brokera usług nie musi być tworzona, ponieważ istnieje już taka, która określa następującą nazwę kontraktu: http://schemas.microsoft.com/SQL/Notifications/PostEventNotification
Usługa docelowa, która odbiera powiadomienia o zdarzeniach, musi przestrzegać tego istniejącego kontraktu.
Ważne
Zabezpieczenia okna dialogowego usługi Service Broker należy skonfigurować pod kątem powiadomień o zdarzeniach, które wysyłają komunikaty do brokera usług na serwerze zdalnym. Zabezpieczenia okna dialogowego należy skonfigurować ręcznie zgodnie z pełnym modelem zabezpieczeń. Aby uzyskać więcej informacji, zobacz Konfigurowanie zabezpieczeń okna dialogowego dla powiadomień o zdarzeniach.
Jeśli transakcja zdarzenia, która aktywuje powiadomienie, zostanie wycofana, wysłanie powiadomienia o zdarzeniu zostanie również wycofane. Powiadomienia o zdarzeniach nie są wyzwalane przez akcję zdefiniowaną w wyzwalaczu, gdy transakcja zostanie zatwierdzona lub wycofana wewnątrz wyzwalacza. Ponieważ zdarzenia śledzenia nie są powiązane przez transakcje, powiadomienia o zdarzeniach oparte na zdarzeniach śledzenia są wysyłane niezależnie od tego, czy transakcja, która je aktywuje, jest cofana.
Jeśli konwersacja między serwerem a usługą docelową zostanie przerwana po wyzwoleniu powiadomienia o zdarzeniu, zostanie zgłoszony błąd i powiadomienie o zdarzeniu zostanie porzucone.
Transakcja zdarzenia, która pierwotnie uruchomiła powiadomienie, nie ma wpływu na powodzenie lub niepowodzenie wysyłania powiadomienia o zdarzeniu.
Wszelkie niepowodzenia wysyłania powiadomienia o zdarzeniu są rejestrowane.
Permissions
Aby utworzyć powiadomienie o zdarzeniu o zakresie bazy danych (ON DATABASE), wymaga CREATE DATABASE DDL EVENT NOTIFICATION uprawnień w bieżącej bazie danych.
Aby utworzyć powiadomienie o zdarzeniu w instrukcji DDL, która jest ograniczona do serwera (ON SERVER), wymaga CREATE DDL EVENT NOTIFICATION uprawnień na serwerze.
Aby utworzyć powiadomienie o zdarzeniu śledzenia, wymagane jest CREATE TRACE EVENT NOTIFICATION uprawnienie na serwerze.
Aby utworzyć powiadomienie o zdarzeniu, które jest ograniczone do kolejki, wymaga ALTER uprawnień w kolejce.
Przykłady
Uwaga / Notatka
W przykładach A i B identyfikator GUID w klauzuli TO SERVICE 'NotifyService' (8140a771-3c4b-4479-8ac0-81008ab17984) jest specyficzny dla komputera, na którym został skonfigurowany przykład. W tym przypadku był to GUID bazy AdventureWorks2025.
Aby skopiować i uruchomić te przykłady, należy zastąpić ten identyfikator GUID jednym z komputera i wystąpienia programu SQL Server. Jak wyjaśniono w sekcji Argumenty , możesz uzyskać wartość "broker_instance_specifier", wykonując service_broker_guid zapytanie względem kolumny sys.databases widoku wykazu.
A. Tworzenie powiadomienia o zdarzeniu o zakresie serwera
Poniższy przykład tworzy obiekty wymagane do skonfigurowania usługi docelowej przy użyciu usługi Service Broker. Usługa docelowa odwołuje się do typu komunikatu i kontraktu inicjującego usługi specjalnie dla powiadomień o zdarzeniach. Następnie zostanie utworzone powiadomienie o zdarzeniu w tej usłudze docelowej, która wysyła powiadomienie za każdym razem, gdy Object_Created wystąpi zdarzenie śledzenia w wystąpieniu programu SQL Server.
--Create a queue to receive messages.
CREATE QUEUE NotifyQueue;
GO
--Create a service on the queue that references
--the event notifications contract.
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);
GO
--Create a route on the service to define the address
--to which Service Broker sends messages for the service.
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO
--Create the event notification.
CREATE EVENT NOTIFICATION log_ddl1
ON SERVER
FOR Object_Created
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984';
B. Tworzenie powiadomienia o zdarzeniu o zakresie bazy danych
Poniższy przykład tworzy powiadomienie o zdarzeniu w tej samej usłudze docelowej co w poprzednim przykładzie. Powiadomienie o zdarzeniu uruchamia się po ALTER_TABLE wystąpieniu zdarzenia w przykładowej bazie danych AdventureWorks2025.
CREATE EVENT NOTIFICATION Notify_ALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984';
C. Uzyskiwanie informacji o powiadomieniu o zdarzeniu o zakresie serwera
Poniższy przykład wysyła zapytanie sys.server_event_notifications do widoku wykazu dla metadanych dotyczących powiadomień log_ddl1 o zdarzeniach utworzonych z zakresem serwera.
SELECT *
FROM sys.server_event_notifications
WHERE name = 'log_ddl1';
D. Uzyskiwanie informacji o powiadomieniu o zdarzeniu o zakresie bazy danych
Poniższy przykład wysyła zapytanie sys.event_notifications do widoku wykazu dla metadanych dotyczących powiadomień Notify_ALTER_T1 o zdarzeniach utworzonych za pomocą zakresu bazy danych.
SELECT *
FROM sys.event_notifications
WHERE name = 'Notify_ALTER_T1';