Udostępnij za pośrednictwem


Tworzenie zdarzenia powiadamiania (Transact-SQL)

Tworzy obiekt, który wysyła informacje o bazie danych lub serwera zdarzenie usługa broker usługa.Powiadomienia o zdarzeniach są tworzone tylko przy użyciu Transact-SQL instrukcji.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

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' }
[ ; ]

Argumenty

  • event_notification_name
    Jest nazwą zdarzenie powiadomienie.Nazwą zdarzenie powiadomienie muszą być zgodne z zasadami identyfikatorów i musi być unikatowa w obrębie zakres ich tworzenia: Serwer bazy danych, lub object_name.

  • SERWER
    Stosuje się zakres zdarzenie powiadomienie z bieżącego wystąpienie SQL Server.Jeśli określony, powiadomienie fires w każdym przypadku, gdy wystąpi określone zdarzenie w przypadku klauzula w dowolnym miejscu wystąpienie SQL Server.

  • BAZY DANYCH
    Stosuje się zakres zdarzenie powiadomienie do bieżącej bazy danych.Jeśli określony, powiadomienie fires przy każdym wystąpieniu określonego zdarzenie w dla klauzula w bieżącej bazie danych.

  • KOLEJKI
    Stosuje się zakres powiadomienie do określonej kolejki z bieżącej bazy danych.KOLEJKI można określić tylko jeśli dla QUEUE_ACTIVATION lub na określony jest również BROKER_QUEUE_DISABLED.

  • queue_name
    Jest to nazwa kolejki, do którego stosuje się zdarzenie powiadomienie .queue_namemożna określić tylko jeśli określono kolejki.

  • Z FAN_IN
    Powoduje, że SQL Server do wysłania tylko jeden na zdarzenie , aby wszystkie określone usługa dla wszystkich powiadomień o zdarzenie ,:

    • Tworzone są tego samego zdarzenie.

    • Są tworzone przez ten sam podmiot (identyfikowanego przez ten sam SID).

    • Określić tę samą usługa i broker_instance_specifier.

    • Określ FAN_IN.

    Na przykład tworzone są trzy powiadomienia o zdarzenie .Wszystkie powiadomienia o zdarzenie określenie dla ALTER_TABLE, Z FAN_IN, tej samej usługi do klauzulai są tworzone przez tego samego SID.Po uruchomieniu ALTER TABLE instrukcja wiadomości, które są tworzone przez te trzy powiadomienia o zdarzenie są scalane w jedną.Dlatego miejsce docelowe usługa odbiera tylko jeden komunikat zdarzenie.

  • event_type
    Jest nazwą typu zdarzenie , powodujący, że zdarzenie powiadomienie do wykonać.event_typemoże być Transact-SQLtypzdarzenieDDL, typu zdarzenie śledzenia SQL lub Service Brokertypuzdarzenie . Aby uzyskać listę kwalifikujących się Transact-SQLDDLtypówzdarzenie , zobacz Zdarzenia DDL.Aby listę kwalifikujących się typy zdarzenie śledzenia SQL , zobacz Śledzenie zdarzeń do użytku z powiadomień o zdarzeniach.Service Broker typyzdarzenie są QUEUE_ACTIVATION i BROKER_QUEUE_DISABLED.Aby uzyskać więcej informacji, zobacz Projektowanie powiadomień o zdarzeniach.

  • event_group
    Jest nazwą wstępnie zdefiniowane grupy Transact-SQL lub typów zdarzenie śledzenia SQL .Po wykonaniu wszelkich zdarzenie należy do grupy zdarzenie może wystrzelić zdarzeniepowiadomienie . Lista grupzdarzenie DDL Transact-SQL zdarzenia obejmują one, oraz zakres , jaką może być zdefiniowana, zobacz Grupy zdarzeń DDL. Lista grup zdarzenie śledzenia i obejmują one śledzenia zdarzeń, zobacz Śledzenie zdarzeń grup do użytku z powiadomień o zdarzeniach.

    event_groupdziała jako makro po zakończeniu tworzenia powiadomienie o zdarzeniu instrukcja przez dodanie typów zdarzenie to obejmuje również do sys.events wykazu widoku.

  • 'broker_service'
    Określa miejsce doceloweusługa pobierającego danewystąpienie zdarzenie. SQL ServerOtwiera okno konwersacji jeden lub więcej miejsce docelowe usługa dla zdarzenie powiadomienie.Ta usługa musi przestrzegać takie same SQL Server zdarzenia typ komunikatu i kontrakt , który jest używany do wysyłania wiadomości.Aby uzyskać więcej informacji, zobacz Tworzenie Service Broker usługi.

    Konwersacje pozostanie otwarta, aż porzucone zdarzenie powiadomienie .W przypadku niektórych błędów może spowodować, że konwersacji zamknąć wcześniej.Kończenie konwersacji niektórych lub wszystkich jawnie może uniemożliwić odbiera więcej wiadomości miejsce docelowe usługa .

  • { "broker_instance_specifier" | 'bieżąca baza danych' }
    Określa usługa broker wystąpienie przeciwko któremu broker_service został rozwiązany.Wartość broker określonej usługa mogą być nabyte przez badanie service_broker_guid kolumna sys.databases wykazu widoku.Użycie 'bieżąca baza danych' do określenia broker usługa wystąpienie w bieżącej bazie danych.'bieżąca baza danych' przypadek-niewrażliwe ciąg literału.

Uwagi

Service Brokerzawiera typ komunikatu i kontrakt specjalnie dla powiadomień o zdarzenie .Dlatego Service Broker inicjujący usługa nie ma utworzony, ponieważ istnieje już, określa następujące nazwy kontrakt : https://schemas.microsoft.com/SQL/Notifications/PostEventNotification

miejsce doceloweusługa otrzymuje powiadomienia o zdarzenie musi przestrzegać tego istniejące kontrakt. Aby uzyskać więcej informacji na temat tworzenia Service Brokerusługimiejsce docelowe , zobacz Zalety programowania przy użyciuService Broker.

Ważna informacjaWażne:

Service Brokerokno dialogowe zabezpieczeń, należy skonfigurować dla powiadomień o zdarzenie , które wysyłają wiadomości do usługa broker na serwerze zdalnym.Okno dialogowe zabezpieczeń musi być skonfigurowany ręcznie, zgodnie z modelem Zabezpieczenia pełne.Aby uzyskać więcej informacji, zobacz Okno dialogowe zabezpieczeń powiadomień o zdarzeniach.

Jeżeli transakcja zdarzenie , który uaktywnia powiadomienie zostanie przywrócona, wysyłania zdarzenie powiadomienie również przywracana jest.akcja określone w wyzwalacz, gdy transakcja zostanie przekazana lub wycofana wewnątrz wyzwalacz nie uruchamiaj powiadomień o zdarzeniach.Ponieważ śledzenia zdarzeń nie są związani z transakcji, niezależnie od tego, czy transakcji, który uaktywnia je jest przywracana są wysyłane powiadomienia o zdarzenie na podstawie śledzenia zdarzeń.

Jeśli konwersację między serwerem a miejsce docelowe usługa zostanie przerwane po fires zdarzenie powiadomienie , zgłaszany jest błąd i porzucone zdarzenie powiadomienie .

Nie dotyczy transakcji zdarzenie , które pierwotnie uruchomione powiadomienie przez sukcesu lub niepowodzenia wysyłania zdarzenie powiadomienie.

Jakikolwiek błąd, aby wysłaćpowiadomienie o zdarzeniejest rejestrowany.

Uprawnienia

Aby utworzyć zdarzenie powiadomienie o zakresie do bazy danych (na bazie danych), wymaga uprawnień powiadomienie o zdarzeniu DDL tworzenie bazy danych w bieżącej bazie danych.

Aby utworzyć zdarzenie powiadomienie DDL instrukcja , który jest objęty zakresem do serwera (na serwerze), wymaga uprawnień powiadomienie o zdarzeniu DDL Utwórz na serwerze.

Aby utworzyć zdarzenie powiadomienie na śledzenia zdarzeniewymaga uprawnień tworzenia śledzenia zdarzeń powiadamiania na serwerze.

Aby utworzyć zdarzenie powiadomienie , że jest objęty zakresem do kolejki, wymaga zmiany uprawnień dla kolejki.

Przykłady

Ostrzeżenie

W przykładach a i b poniżej identyfikator GUID w TO SERVICE 'NotifyService' klauzula ("8140a771-3c4b-4479-8ac0-81008ab17984") jest specyficzne dla komputera, na którym przykładzie został zestaw w górę.To wystąpieniebył identyfikator GUID dla AdventureWorks2008R2 bazy danych.

Do kopiowania i uruchamiania tych przykładów, należy zastąpić ten identyfikator GUID z komputera i SQL Server wystąpienie.Jak wyjaśniono w powyższej sekcji argumenty, można nabyć 'broker_instance_specifier" przez badanie service_broker_guid kolumna sys.databases wykazu widoku.

A.Tworzenie zdarzenie powiadomienie jest objęty zakresem serwera

Poniższy przykład tworzy wymagane obiekty, aby zestawusługa miejsce doceloweprzy użyciu Service Broker. miejsce doceloweusługa odwołuje się do typ komunikatu i kontrakt inicjujący usługa specjalnie dla powiadomień o zdarzenie . powiadomienie o zdarzeniezostanie utworzony na tym miejsce doceloweusługa , która wysyła powiadomienie , a następnie przy każdym Object_Created śledzenia zdarzenie w przypadku wystąpienie 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
([https://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 zdarzenie powiadomienie jest objęty zakresem bazy danych

Poniższy przykład tworzy zdarzenie powiadomienie tej samej miejsce docelowe usługa , co w poprzednim przykładzie.zdarzeniepowiadomienie fires po ALTER_TABLEzdarzenie zachodzi na AdventureWorks2008R2 przykładowej bazy danych.

CREATE EVENT NOTIFICATION Notify_ALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE 'NotifyService',
    '8140a771-3c4b-4479-8ac0-81008ab17984';

C.Uzyskiwanie informacji na temat zdarzenie powiadomienie jest objęty zakresem serwera

W następujących przykładowych kwerendach sys.server_event_notifications Widok katalogu metadane dotyczące zdarzenie powiadomienie log_ddl1 , został utworzony za pomocą serwera, zakres.

SELECT * FROM sys.server_event_notifications
WHERE name = 'log_ddl1'

D.Uzyskiwanie informacji na temat zdarzenie powiadomienie jest objęty zakresem bazy danych

W następujących przykładowych kwerendach sys.event_notifications Widok katalogu metadane dotyczące zdarzenie powiadomienie Notify_ALTER_T1 utworzony bazę danych zakres.

SELECT * FROM sys.event_notifications
WHERE name = 'Notify_ALTER_T1'