Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Oznámení událostí odesílají informace o událostech do služby Service Broker. Oznámení událostí se spouštějí v reakci na řadu Transact-SQL příkazů jazyka DDL (Data Definition Language) a událostí trasování SQL odesláním informací o těchto událostech do služby Service Broker.
Oznámení událostí se dají použít k následujícím akcím:
- Protokolujte a zkontrolujte změny nebo aktivity, ke kterým dochází v databázi.
- Proveďte akci v reakci na událost asynchronním způsobem místo synchronního způsobu.
Oznámení událostí můžou nabídnout programovací alternativu k triggerům DDL a trasování SQL.
Výhody oznámení událostí
Oznámení událostí se spouští asynchronně mimo rozsah transakce. Na rozdíl od triggerů DDL je proto možné oznámení událostí použít uvnitř databázové aplikace k reakci na události bez použití jakýchkoli prostředků definovaných okamžitou transakcí.
Na rozdíl od trasování SQL se oznámení událostí dají použít k provedení akce uvnitř instance SQL Serveru v reakci na událost trasování SQL.
Data událostí můžou používat aplikace, které běží společně s SQL Serverem, ke sledování průběhu a rozhodování. Například následující oznámení události odešle oznámení určité službě při ALTER TABLE každém vydání příkazu v AdventureWorks2025 ukázkové databázi.
USE AdventureWorks2022;
GO
CREATE EVENT NOTIFICATION NotifyALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE '//Adventure-Works.com/ArchiveService',
'8140a771-3c4b-4479-8ac0-81008ab17984';
Koncepty oznámení událostí
Při vytvoření oznámení události se otevře jedna nebo více konverzací service brokeru mezi instancí SQL Serveru a cílovou službou, kterou zadáte. Konverzace obvykle zůstávají otevřené, pokud oznámení události existuje jako objekt v instanci serveru. V některých případech se konverzace můžou zavřít před ukončením oznámení události. Tyto konverzace se nikdy nesdílí mezi oznámeními událostí. Každé oznámení události má vlastní exkluzivní konverzace. Ukončení konverzace explicitně zabrání cílové službě přijímat více zpráv a konverzace se znovu neotevře při příštím spuštění oznámení události.
Informace o události se doručují do služby Service Broker jako proměnná xml typu, která poskytuje informace o výskytu události, o ovlivněném databázovém objektu, o Transact-SQL dávkovém příkazu a dalších informacích. Další informace o schématu XML vytvořeném oznámeními událostí naleznete v tématu EVENTDATA.
Oznámení událostí vs. triggery
Následující tabulka porovnává triggery a oznámení událostí a kontrastuje.
| Triggers | Oznámení událostí |
|---|---|
| Triggery DML reagují na události jazyka DML (Data Manipulat Language). Triggery DDL reagují na události jazyka DDL (Data Definition Language). | Oznámení událostí reagují na události DDL a podmnožinu událostí trasování SQL. |
| Triggery můžou spouštět spravovaný kód Transact-SQL nebo clr (Common Language Runtime). | Oznámení událostí nespouštějí kód. Místo toho odesílají zprávy XML do služby Service Broker. |
| Triggery se zpracovávají synchronně v rámci rozsahu transakcí, které způsobují jejich aktivaci. | Oznámení událostí se můžou zpracovávat asynchronně a nespouští se v oboru transakcí, které je způsobují, že se aktivují. |
| Příjemce triggeru je úzce svázán s událostí, která způsobí, že se aktivuje. | Příjemce oznámení události je oddělen od události, která způsobí, že se aktivuje. |
| Aktivační události musí být zpracovány na místním serveru. | Oznámení událostí je možné zpracovat na vzdáleném serveru. |
| Triggery je možné vrátit zpět. | Oznámení událostí se nedají vrátit zpět. |
| Názvy triggerů DML jsou vymezené schématem. Názvy triggerů DDL jsou oborem databáze nebo oborem serveru. | Názvy oznámení událostí jsou vymezeny serverem nebo databází. Oznámení událostí v události QUEUE_ACTIVATION jsou vymezena na konkrétní frontu. |
| Triggery DML vlastní stejný vlastník jako tabulky, na kterých se používají. | Vlastník oznámení události ve frontě může mít jiného vlastníka než objekt, na kterém se používá. |
Triggery podporují klauzuli EXECUTE AS . |
Oznámení událostí klauzuli EXECUTE AS nepodporují. |
| Informace o události triggeru DDL lze zachytit pomocí funkce EVENTDATA, která vrací datový typ XML . | Oznámení událostí odesílají informace o události XML službě Service Broker. Informace jsou formátovány do stejného schématu jako funkce EVENTDATA. |
Metadata o triggerech se nacházejí v sys.triggers zobrazeních katalogu a sys.server_triggers v zobrazeních katalogu. |
Metadata o oznámeních událostí se nacházejí v sys.event_notifications zobrazeních katalogu.sys.server_event_notifications |
Oznámení událostí vs. SQL trasování
Následující tabulka porovnává a kontrasty pomocí oznámení událostí a trasování SQL pro monitorování událostí serveru.
| Trasování SQL | Oznámení událostí |
|---|---|
| Trasování SQL nevygeneruje žádné režijní náklady na výkon spojené s transakcemi. Balení dat je efektivní. | Při vytváření dat událostí formátovaných xml a odesílání oznámení události je spojeno režijní náklady na výkon. |
| Trasování SQL může monitorovat jakoukoli třídu událostí trasování. | Oznámení událostí můžou monitorovat podmnožinu tříd událostí trasování a také všechny události DDL (Data Definition Language). |
| Můžete přizpůsobit, které datové sloupce se mají vygenerovat v události trasování. | Schéma dat událostí formátovaných XML vrácených oznámeními událostí je opraveno. |
| Události trasování generované DDL se vždy generují bez ohledu na to, jestli se příkaz DDL vrátí zpět. | Oznámení událostí se neaktivuje, pokud se událost v odpovídajícím příkazu DDL vrátí zpět. |
| Správa přechodného toku dat událostí trasování zahrnuje naplnění a správu trasovacích souborů nebo trasovacích tabulek. | Průběžná správa dat oznámení událostí se provádí automaticky prostřednictvím front Service Broker. |
| Trasování se musí restartovat při každém restartování serveru. | Po registraci se oznámení událostí zachovají napříč cykly serveru a provádějí se. |
| Po zahájení není možné řídit spuštění trasování. Časy zastavení a časy filtrování lze použít k určení, kdy se iniciují. Trasování se přistupuje dotazováním odpovídajícího trasovacího souboru. | Oznámení událostí je možné řídit pomocí WAITFOR příkazu proti frontě, která přijímá zprávu vygenerovanou oznámením události. K nim je možné získat přístup dotazováním fronty. |
ALTER TRACE je nejmenší oprávnění, která je nutná k vytvoření trasování. K vytvoření trasovacího souboru v odpovídajícím počítači se také vyžaduje oprávnění. |
Nejnižší oprávnění závisí na typu vytvářeného oznámení události.
RECEIVE Pro odpovídající frontu je potřeba také oprávnění. |
| Trasování lze přijímat vzdáleně. | Oznámení událostí je možné vzdáleně přijímat. |
| Události trasování se implementují pomocí systémových uložených procedur. | Oznámení událostí se implementují pomocí kombinace příkazů databázového stroje a služby Service Broker Transact-SQL. |
| K datům událostí trasování lze přistupovat programově dotazováním odpovídající tabulky trasování, analýzou trasovacího souboru nebo pomocí třídy TRACEReader (SMO) SQL Server Management Objects (SMO). | K datům událostí se přistupuje prostřednictvím kódu programu vydáním XQuery proti datům událostí ve formátu XML nebo pomocí tříd událostí SMO. |
Úkoly oznámení událostí
| Task | Article |
|---|---|
| Popisuje, jak vytvářet a implementovat oznámení událostí. | Implementace oznámení událostí |
| Popisuje, jak nakonfigurovat zabezpečení dialogového okna Service Broker pro oznámení událostí, která odesílají zprávy do zprostředkovatele služeb na vzdáleném serveru. | Konfigurace zabezpečení dialogového okna pro oznámení událostí |
| Popisuje, jak vrátit informace o oznámeních událostí. | Získání informací o oznámeních událostí |