Delen via


Gebeurtenismeldingen

Van toepassing op:SQL Server

Gebeurtenismeldingen verzenden informatie over gebeurtenissen naar een Service Broker-service. Gebeurtenismeldingen worden uitgevoerd als reactie op verschillende Transact-SQL DDL-instructies (Data Definition Language) en SQL Trace-gebeurtenissen door informatie over deze gebeurtenissen naar een Service Broker-service te verzenden.

Gebeurtenismeldingen kunnen worden gebruikt om het volgende te doen:

  • Logboek en controleer wijzigingen of activiteiten die plaatsvinden in de database.
  • Voer een actie uit als reactie op een gebeurtenis op een asynchrone manier in plaats van synchroon.

Gebeurtenismeldingen kunnen een programmeer alternatief bieden voor DDL-triggers en SQL Trace.

Voordelen van gebeurtenismeldingen

Gebeurtenismeldingen worden asynchroon uitgevoerd, buiten het bereik van een transactie. In tegenstelling tot DDL-triggers kunnen gebeurtenismeldingen daarom in een databasetoepassing worden gebruikt om te reageren op gebeurtenissen zonder resources te gebruiken die zijn gedefinieerd door de onmiddellijke transactie.

In tegenstelling tot SQL Trace kunnen gebeurtenismeldingen worden gebruikt om een actie uit te voeren binnen een exemplaar van SQL Server als reactie op een SQL Trace-gebeurtenis.

Gebeurtenisgegevens kunnen worden gebruikt door toepassingen die samen met SQL Server worden uitgevoerd om de voortgang bij te houden en beslissingen te nemen. Met de volgende gebeurtenismelding wordt bijvoorbeeld telkens wanneer een ALTER TABLE instructie wordt uitgegeven in de AdventureWorks2025 voorbeelddatabase een kennisgeving naar een bepaalde service verzonden.

USE AdventureWorks2022;
GO

CREATE EVENT NOTIFICATION NotifyALTER_T1
    ON DATABASE
    FOR ALTER_TABLE
    TO SERVICE '//Adventure-Works.com/ArchiveService',
        '8140a771-3c4b-4479-8ac0-81008ab17984';

Concepten van gebeurtenismeldingen

Wanneer er een gebeurtenismelding wordt gemaakt, worden een of meer Service Broker-gesprekken tussen een exemplaar van SQL Server en de doelservice die u opgeeft, geopend. De gesprekken blijven doorgaans geopend zolang de gebeurtenismelding bestaat als een object op het serverexemplaren. In sommige foutgevallen kunnen de gesprekken worden gesloten voordat de gebeurtenismelding wordt verwijderd. Deze gesprekken worden nooit gedeeld tussen gebeurtenismeldingen. Elke gebeurtenismelding heeft zijn eigen exclusieve gesprekken. Als u een gesprek beëindigt, voorkomt u expliciet dat de doelservice meer berichten ontvangt en wordt het gesprek de volgende keer dat de gebeurtenismelding wordt geactiveerd, niet opnieuw geopend.

Gebeurtenisgegevens worden aan de Service Broker-service geleverd als een variabele van het type XML die informatie biedt over wanneer een gebeurtenis plaatsvindt, over het betrokken databaseobject, de betrokken batchinstructie Transact-SQL en andere informatie. Zie EVENTDATA voor meer informatie over het XML-schema dat wordt geproduceerd door gebeurtenismeldingen.

Gebeurtenismeldingen versus triggers

De volgende tabel vergelijkt triggers en gebeurtenismeldingen en contrasten.

Triggers Gebeurtenismeldingen
DML-triggers reageren op DML-gebeurtenissen (Data Manipulat Language). DDL-triggers reageren op DDL-gebeurtenissen (Data Definition Language). Gebeurtenismeldingen reageren op DDL-gebeurtenissen en een subset van SQL-traceringsevenementen.
Triggers kunnen beheerde code Transact-SQL of Common Language Runtime (CLR) uitvoeren. Gebeurtenismeldingen voeren geen code uit. In plaats daarvan verzenden ze XML-berichten naar een Service Broker-service.
Triggers worden synchroon verwerkt, binnen het bereik van de transacties die ervoor zorgen dat ze worden geactiveerd. Gebeurtenismeldingen kunnen asynchroon worden verwerkt en worden niet uitgevoerd binnen het bereik van de transacties die ervoor zorgen dat ze worden geactiveerd.
De consument van een trigger is nauw gekoppeld aan de gebeurtenis die ervoor zorgt dat deze wordt geactiveerd. De consument van een gebeurtenismelding wordt losgekoppeld van de gebeurtenis waardoor deze wordt geactiveerd.
Triggers moeten worden verwerkt op de lokale server. Gebeurtenismeldingen kunnen worden verwerkt op een externe server.
Triggers kunnen worden teruggedraaid. Gebeurtenismeldingen kunnen niet worden teruggedraaid.
DML-triggernamen zijn schemabereik. DDL-triggernamen zijn databasebereik of serverbereik. Namen van gebeurtenismeldingen worden bepaald door de server of database. Gebeurtenismeldingen voor een QUEUE_ACTIVATION gebeurtenis zijn gericht op een specifieke wachtrij.
DML-triggers zijn eigendom van dezelfde eigenaar als de tabellen waarop ze worden toegepast. De eigenaar van een gebeurtenismelding in een wachtrij kan een andere eigenaar hebben dan het object waarop het wordt toegepast.
Triggers ondersteunen de EXECUTE AS component. Gebeurtenismeldingen bieden geen ondersteuning voor de EXECUTE AS component.
DDL-trigger gebeurtenisgegevens kunnen worden vastgelegd met behulp van de functie EVENTDATA, die een XML-gegevenstype retourneert. Gebeurtenismeldingen verzenden xml-gebeurtenisgegevens naar een Service Broker-service. De informatie is opgemaakt in hetzelfde schema als die van de functie EVENTDATA.
Metagegevens over triggers vindt u in de sys.triggers en sys.server_triggers catalogusweergaven. Metagegevens over gebeurtenismeldingen vindt u in de sys.event_notifications en sys.server_event_notifications catalogusweergaven.

Gebeurtenismeldingen vs. SQL Traceren

In de volgende tabel worden gebeurtenissen en contrasten vergeleken met behulp van gebeurtenismeldingen en SQL Trace voor het bewaken van server gebeurtenissen.

SQL Trace Gebeurtenismeldingen
SQL Trace genereert geen prestatieoverhead die is gekoppeld aan transacties. Het verpakken van gegevens is efficiënt. Er is prestatieoverhead gekoppeld aan het maken van de gebeurtenisgegevens in XML-indeling en het verzenden van de gebeurtenismelding.
SQL Trace kan elke tracerings gebeurtenisklasse bewaken. Gebeurtenismeldingen kunnen een subset van tracerings gebeurtenisklassen en ook alle DDL-gebeurtenissen (Data Definition Language) bewaken.
U kunt aanpassen welke gegevenskolommen moeten worden gegenereerd in een tracerings gebeurtenis. Het schema van de xml-opgemaakte gebeurtenisgegevens die worden geretourneerd door gebeurtenismeldingen, is opgelost.
Traceringsgebeurtenissen die door DDL worden gegenereerd, worden altijd gegenereerd, ongeacht of de DDL-instructie wordt teruggedraaid. Gebeurtenismeldingen worden niet geactiveerd als de gebeurtenis in de bijbehorende DDL-instructie wordt teruggedraaid.
Het beheren van de tussenstroom van traceringsgebeurtenisgegevens omvat het invullen en beheren van traceringsbestanden of traceringstabellen. Tussenliggend beheer van gebeurtenismeldingsgegevens wordt automatisch uitgevoerd via Service Broker-wachtrijen.
Traceringen moeten telkens opnieuw worden opgestart wanneer de server opnieuw wordt opgestart. Nadat de gebeurtenismeldingen zijn geregistreerd, blijven gebeurtenismeldingen over servercycli bestaan en worden ze verwerkt.
Nadat de tracering is gestart, kan het ontslaan van traceringen niet worden beheerd. Stoptijden en filtertijden kunnen worden gebruikt om op te geven wanneer ze worden gestart. Traceringen worden geopend door het bijbehorende traceringsbestand te peilen. Gebeurtenismeldingen kunnen worden beheerd met behulp van de WAITFOR instructie voor de wachtrij die het bericht ontvangt dat is gegenereerd door de gebeurtenismelding. Ze kunnen worden geopend door de wachtrij te peilen.
ALTER TRACE is de minste machtiging die is vereist om een tracering te maken. Er is ook een machtiging vereist voor het maken van een traceringsbestand op de bijbehorende computer. De minste machtiging is afhankelijk van het type gebeurtenismelding dat wordt gemaakt. RECEIVE er is ook een machtiging nodig voor de bijbehorende wachtrij.
Traceringen kunnen op afstand worden ontvangen. Gebeurtenismeldingen kunnen op afstand worden ontvangen.
Traceer gebeurtenissen worden geïmplementeerd met behulp van door het systeem opgeslagen procedures. Gebeurtenismeldingen worden geïmplementeerd met behulp van een combinatie van Database Engine- en Service Broker-Transact-SQL-instructies.
Traceringsgebeurtenisgegevens kunnen programmatisch worden geopend door een query uit te voeren op de bijbehorende traceringstabel, het traceringsbestand te parseren of door de SMO-klasse TraceReader (SQL Server Management Objects) te gebruiken. Gebeurtenisgegevens worden programmatisch geopend door XQuery uit te geven op basis van de xml-gebeurtenisgegevens of met behulp van de SMO-gebeurtenisklassen.

Gebeurtenismeldingstaken

Opdracht Article
Hierin wordt beschreven hoe u gebeurtenismeldingen maakt en implementeert. Gebeurtenismeldingen implementeren
Hierin wordt beschreven hoe u de beveiliging van servicebrokerdialoogvensters configureert voor gebeurtenismeldingen die berichten verzenden naar een servicebroker op een externe server. Dialoogvensterbeveiliging configureren voor gebeurtenismeldingen
Hierin wordt beschreven hoe u informatie over gebeurtenismeldingen retourneert. Informatie over gebeurtenismeldingen ophalen