Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Managed Instance
Létrehoz egy objektumot, amely adatokat küld egy adatbázisról vagy kiszolgálóeseményről egy Service Broker szolgáltatásnak. Az eseményértesítések csak Transact-SQL utasítások használatával jönnek létre.
Transact-SQL szintaxis konvenciók
Szemantika
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
Az eseményértesítés neve. Az eseményértesítési névnek meg kell felelnie az azonosítókra vonatkozó szabályoknak, és egyedinek kell lennie a létrehozásuk hatókörében: SERVER, DATABASEvagy object_name.
SZERVER
Alkalmazza az eseményértesítés hatókörét az SQL Server aktuális példányára. Ha meg van adva, az értesítés akkor aktiválódik, amikor a FOR záradékban megadott esemény az SQL Server példányának bármely pontján bekövetkezik.
Megjegyzés:
Ez a beállítás nem érhető el egy tartalmazott adatbázisban.
DATABASE
Alkalmazza az eseményértesítés hatókörét az aktuális adatbázisra. Ha meg van adva, az értesítés akkor aktiválódik, amikor a FOR záradékban megadott esemény az aktuális adatbázisban történik.
QUEUE
Alkalmazza az értesítés hatókörét egy adott üzenetsorra az aktuális adatbázisban.
QUEUE csak akkor adható meg, ha FOR QUEUE_ACTIVATION vagy FOR BROKER_QUEUE_DISABLED meg is van adva.
queue_name
Annak az üzenetsornak a neve, amelyre az eseményértesítés vonatkozik.
queue_name csak akkor adható meg, ha QUEUE meg van adva.
A FAN_IN
Arra utasítja az SQL Servert, hogy eseményenként csak egy üzenetet küldjön egy adott szolgáltatásnak az összes olyan eseményértesítéshez, amely:
- Ugyanazon az eseményen jönnek létre.
- A rendszer létrehozása ugyanazzal a névvel történik (ugyanazzal a SID-sel azonosítva).
- Adja meg ugyanazt a szolgáltatást és broker_instance_specifier.
- Adja meg a következőt:
WITH FAN_IN.
Például három eseményértesítés jön létre. Minden eseményértesítés ugyanazt a FOR ALTER_TABLE záradékot adja megWITH FAN_INTO SERVICE, és ugyanaz a SID hozza létre.
ALTER TABLE Egy utasítás futtatásakor a három eseményértesítés által létrehozott üzenetek egybe lesznek egyesítve. Ezért a célszolgáltatás csak egy üzenetet kap az eseményről.
event_type
Annak az eseménytípusnak a neve, amely az eseményértesítés végrehajtását okozza.
event_type lehet Transact-SQL DDL-eseménytípus, SQL Trace-eseménytípus vagy Service Broker-eseménytípus. A jogosult Transact-SQL DDL-eseménytípusok listáját a DDL-események című témakörben találja. A Service Broker eseménytípusai és QUEUE_ACTIVATIONBROKER_QUEUE_DISABLED. További információ: Eseményértesítések.
event_group
A Transact-SQL vagy SQL Trace eseménytípusok előre definiált csoportjának neve. Az eseményértesítések bármely eseménycsoporthoz tartozó esemény végrehajtása után aktiválhatók. A DDL-eseménycsoportok listáját, az általuk lefedett Transact-SQL eseményeket és a definiálható hatókört a DDL-eseménycsoportok című témakörben találja.
event_group az utasítás befejeződésekor makróként CREATE EVENT NOTIFICATION is működik, ha hozzáadja az általa lefedett eseménytípusokat a sys.events katalógusnézethez.
"broker_service"
Megadja az eseménypéldány adatait fogadó célszolgáltatást. Az SQL Server egy vagy több beszélgetést nyit meg a célszolgáltatás számára az eseményértesítéshez. Ennek a szolgáltatásnak az üzenet küldéséhez használt SQL Server-események üzenettípusát és szerződését kell tiszteletben tartania.
A beszélgetések nyitva maradnak, amíg az eseményértesítés el nem kerül. Bizonyos hibák miatt a beszélgetések korábban bezárulhatnak. Egyes vagy az összes beszélgetés explicit befejezése megakadályozhatja, hogy a célszolgáltatás több üzenetet kapjon.
{ "broker_instance_specifier" | "aktuális adatbázis" }
Egy szolgáltatásközvetítő-példányt határoz meg, amely broker_service feloldva. Egy adott szolgáltatásközvetítő értéke a katalógusnézet oszlopának service_broker_guid lekérdezésével sys.databases szerezhető be. A 'current database' szolgáltatásközvetítő példányának megadása az aktuális adatbázisban.
'current database' egy kis- és nagybetűket nem megkülönböztető sztringkonstans.
Megjegyzés:
Ez a beállítás nem érhető el egy tartalmazott adatbázisban.
Megjegyzések
A Service Broker tartalmaz egy üzenettípust és egy kifejezetten az eseményértesítésekre vonatkozó szerződést. Ezért a Szolgáltatásközvetítőt kezdeményező szolgáltatást nem kell létrehozni, mert már létezik olyan szolgáltatás, amely a következő szerződésnevet adja meg: http://schemas.microsoft.com/SQL/Notifications/PostEventNotification
Az eseményértesítéseket fogadó célszolgáltatásnak tiszteletben kell tartania ezt a már létező szerződést.
Fontos
A Service Broker párbeszédpanel biztonságát olyan eseményértesítésekhez kell konfigurálni, amelyek üzeneteket küldenek egy távoli kiszolgálón lévő szolgáltatásközvetítőnek. A párbeszédpanelek biztonságát manuálisan kell konfigurálni a teljes biztonsági modellnek megfelelően. További információ: Az eseményértesítések párbeszédpanel-biztonságának konfigurálása.
Ha egy értesítést aktiváló eseménytranzakció visszagördül, az eseményértesítés küldése is vissza lesz állítva. Az eseményértesítések nem aktiválhatók egy eseményindítóban meghatározott művelet által, amikor a tranzakció véglegesítése vagy visszagördítése az eseményindítón belül történik. Mivel a nyomkövetési eseményeket nem kötik tranzakciók, a rendszer a nyomkövetési eseményeken alapuló eseményértesítéseket küldi, függetlenül attól, hogy az őket aktiváló tranzakció vissza lesz-e állítva.
Ha a kiszolgáló és a célszolgáltatás közötti beszélgetés megszakad egy eseményértesítés elindítása után, hibaüzenet jelenik meg, és a rendszer elveti az eseményértesítést.
Az eredetileg elindított eseménytranzakciót nem befolyásolja az eseményértesítés elküldésének sikeressége vagy sikertelensége.
Az eseményértesítés elküldésének sikertelensége naplózásra kerül.
Permissions
Az adatbázisra (ON DATABASE) hatókörrel rendelkező eseményértesítés létrehozásához engedélyre van szükség CREATE DATABASE DDL EVENT NOTIFICATION az aktuális adatbázisban.
Ha eseményértesítést szeretne létrehozni egy, a kiszolgálóra (ON SERVER) hatókörrel rendelkező DDL-utasításon, engedélyre van szükség CREATE DDL EVENT NOTIFICATION a kiszolgálón.
Ha eseményértesítést szeretne létrehozni egy nyomkövetési eseményen, engedélyre van szüksége CREATE TRACE EVENT NOTIFICATION a kiszolgálón.
Az üzenetsorra hatókörrel rendelkező eseményértesítés létrehozásához engedélyre van szükség ALTER az üzenetsoron.
Példák
Megjegyzés:
Az A és b példákban a TO SERVICE 'NotifyService' záradék (8140a771-3c4b-4479-8ac0-81008ab17984) GUID azonosítója arra a számítógépre vonatkozik, amelyen a példa be lett állítva. Például az AdventureWorks2025 adatbázis GUID-je volt.
A példák másolásához és futtatásához ezt a GUID-t a számítógép és az SQL Server-példány egyikére kell cserélnie. Az Argumentumok szakaszban leírtak szerint a katalógusnézet oszlopának lekérdezésével szerezheti be a service_broker_guidsys.databases".
A. Kiszolgáló hatókörébe tartozó eseményértesítés létrehozása
Az alábbi példa létrehozza a szükséges objektumokat egy célszolgáltatás Service Broker használatával történő beállításához. A célszolgáltatás a kezdeményező szolgáltatás üzenettípusára és szerződésére hivatkozik, kifejezetten eseményértesítésekhez. Ezután létrejön egy eseményértesítés a célszolgáltatáson, amely értesítést küld, amikor Object_Created nyomkövetési esemény történik az SQL Server példányán.
--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. Adatbázis hatókörébe tartozó eseményértesítés létrehozása
Az alábbi példa egy eseményértesítést hoz létre ugyanazon a célszolgáltatáson, mint az előző példa. Az eseményértesítés akkor indul, amikor egy ALTER_TABLE esemény megtörténik az AdventureWorks2025 mintaadatbázisban.
CREATE EVENT NOTIFICATION Notify_ALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984';
C. Információ kérése a kiszolgáló hatókörébe tartozó eseményértesítésről
Az alábbi példa lekérdezi a katalógusnézetet a sys.server_event_notifications kiszolgáló hatókörével létrehozott eseményértesítés log_ddl1 metaadataihoz.
SELECT *
FROM sys.server_event_notifications
WHERE name = 'log_ddl1';
D. Az adatbázis hatókörébe tartozó eseményértesítéssel kapcsolatos információk lekérése
Az alábbi példa lekérdezi az sys.event_notifications adatbázis hatókörével létrehozott eseményértesítés Notify_ALTER_T1 metaadatait a katalógusnézetben.
SELECT *
FROM sys.event_notifications
WHERE name = 'Notify_ALTER_T1';