Notificações de eventosEvent Notifications

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

As notificações de evento enviam informações sobre eventos a um serviço do Service BrokerService Broker .Event notifications send information about events to a Service BrokerService Broker service. As notificações de evento são executadas em resposta a uma variedade de instruções DDL (linguagem de definição de dados) do Transact-SQLTransact-SQL e eventos de Rastreamento do SQL por meio do envio de informações sobre esses eventos a um serviço do Service BrokerService Broker .Event notifications execute in response to a variety of Transact-SQLTransact-SQL data definition language (DDL) statements and SQL Trace events by sending information about these events to a Service BrokerService Broker service.

Notificações de eventos podem ser usadas para fazer o seguinte:Event notifications can be used to do the following:

  • Registrar em log e examinar alterações ou atividade ocorridas no banco de dados.Log and review changes or activity occurring on the database.

  • Executar uma ação em resposta a um evento de maneira assíncrona, em vez de síncrona.Perform an action in response to an event in an asynchronous instead of synchronous manner.

As notificações de evento podem oferecer uma alternativa de programação a gatilhos DDL e ao Rastreamento do SQL.Event notifications can offer a programming alternative to DDL triggers and SQL Trace.

Benefícios das notificações de eventoEvent Notifications Benefits

Notificações de evento são executadas de forma assíncrona, fora do escopo de uma transação.Event notifications run asynchronously, outside the scope of a transaction. Portanto, ao contrário dos gatilhos DDL, as notificações de evento podem ser usadas dentro de um aplicativo de banco de dados para responder a eventos sem usar nenhum recurso definido pela transação imediata.Therefore, unlike DDL triggers, event notifications can be used inside a database application to respond to events without using any resources defined by the immediate transaction.

Ao contrário do Rastreamento do SQL, as notificações de evento podem ser usadas para executar uma ação dentro de uma instância do SQL ServerSQL Server em resposta a um evento do Rastreamento do SQL.Unlike SQL Trace, event notifications can be used to perform an action inside an instance of SQL ServerSQL Server in response to a SQL Trace event.

Os dados de evento podem ser usados por aplicativos que se encontram em execução junto com o SQL ServerSQL Server para rastrear o andamento e tomar decisões.Event data can be used by applications that are running together with SQL ServerSQL Server to track progress and make decisions. Por exemplo, a notificação de evento a seguir envia um aviso a determinado serviço todas as vezes que uma instrução ALTER TABLE é emitida no banco de dados de exemplo AdventureWorks2012AdventureWorks2012 .For example, the following event notification sends a notice to a certain service every time an ALTER TABLE statement is issued in the AdventureWorks2012AdventureWorks2012 sample database.

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

Conceitos das notificações de eventoEvent Notifications Concepts

Quando uma notificação de evento é criada, uma ou mais conversas de Service BrokerService Broker são abertas entre uma instância do SQL ServerSQL Server e o serviço de destino especificado.When an event notification is created, one or more Service BrokerService Broker conversations between an instance of SQL ServerSQL Server and the target service you specify are opened. Normalmente, as conversações permanecem abertas enquanto a notificação de eventos existir como objeto na instância do servidor.The conversations typically remain open as long as the event notification exists as an object on the server instance. Em alguns casos de erro, as conversações podem ser fechadas antes de a notificação de eventos ser descartada.In some error cases the conversations can close before the event notification is dropped. Essas conversações nunca são compartilhadas entre notificações de eventos.These conversations are never shared between event notifications. Cada notificação de eventos tem suas próprias conversações exclusivas.Every event notification has its own exclusive conversations. Terminar explicitamente uma conversa impede que o serviço de destino receba mais mensagens, e a conversa não será reaberta na próxima vez que a notificação de evento for acionada.Ending a conversation explicitly prevents the target service from receiving more messages, and the conversation will not reopen the next time the event notification fires.

As informações de evento são entregues ao serviço do Service BrokerService Broker como uma variável do tipo xml que fornece informações especificando quando um evento ocorreu, informações sobre o objeto de banco de dados afetado, a instrução do lote Transact-SQLTransact-SQL envolvida e outros dados.Event information is delivered to the Service BrokerService Broker service as a variable of type xml that provides information about when an event occurs, about the database object affected, the Transact-SQLTransact-SQL batch statement involved, and other information. Para obter mais informações sobre o esquema XML produzido por notificações de evento, consulte EVENTDATA (Transact-SQL).For more information about the XML schema produced by event notifications, see EVENTDATA (Transact-SQL).

Notificações de evento x GatilhosEvent Notifications vs. Triggers

A tabela a seguir compara e contrasta gatilhos e notificações de evento.The following table compares and contrasts triggers and event notifications.

GatilhosTriggers Notificações de eventosEvent Notifications
Os gatilhos DML respondem a eventos DML (linguagem de manipulação de dados).DML triggers respond to data manipulation language (DML) events. Gatilhos DDL respondem a eventos de linguagem de definição de dados (DDL).DDL triggers respond to data definition language (DDL) events. Notificações de eventos respondem a eventos DDL e a um subconjunto de eventos de Rastreamento do SQL.Event notifications respond to DDL events and a subset of SQL trace events.
Gatilhos podem executar Transact-SQL ou código gerenciado CLR (Common Language Runtime).Triggers can run Transact-SQL or common language runtime (CLR) managed code. Notificações de eventos não executam código.Event notifications do not run code. Em vez disso, enviam mensagens xml a um serviço de Service Broker.Instead, they send xml messages to a Service Broker service.
Gatilhos são processados sincronicamente, dentro do escopo das transações que os acionam.Triggers are processed synchronously, within the scope of the transactions that cause them to fire. Notificações de eventos podem ser processadas de forma assíncrona e não são executadas no escopo das transações que as acionam.Event notifications may be processed asynchronously and do not run in the scope of the transactions that cause them to fire.
O consumidor de um gatilho encontra-se estreitamente acoplado ao evento que o aciona.The consumer of a trigger is tightly coupled with the event that causes it to fire. O consumidor de uma notificação de eventos encontra-se desacoplado do evento que o aciona.The consumer of an event notification is decoupled from the event that causes it to fire.
Gatilhos devem ser processados no servidor local.Triggers must be processed on the local server. Notificações de eventos podem ser processadas em um servidor remoto.Event notifications can be processed on a remote server.
Gatilhos podem ser revertidos.Triggers can be rolled back. Notificações de eventos não podem ser revertidas.Event notifications cannot be rolled back.
Os nomes dos gatilhos DML seguem o escopo do esquema.DML trigger names are schema-scoped. Os nomes dos gatilhos DDL seguem o escopo do banco de dados ou do servidor.DDL trigger names are database-scoped or server-scoped. Os nomes das notificações de eventos seguem o escopo do servidor ou do banco de dados.Event notification names are scoped by the server or database. Notificações de eventos em um evento QUEUE_ACTIVATION seguem o escopo de uma fila específica.Event notifications on a QUEUE_ACTIVATION event are scoped to a specific queue.
Gatilhos DML são de propriedade do mesmo proprietário das tabelas a que se aplicam.DML triggers are owned by the same owner as the tables on which they are applied. O proprietário de uma notificação de eventos em uma fila pode ser diferente do proprietário do objeto a que se aplica.The owner of an event notification on a queue may have a different owner than the object on which it is applied.
Gatilhos têm suporte à cláusula EXECUTE AS.Triggers support the EXECUTE AS clause. Notificações de eventos não têm suporte à cláusula EXECUTE AS.Event notifications do not support the EXECUTE AS clause.
Informações de eventos de gatilhos DDL podem ser capturadas por meio da função EVENTDATA, que retorna um tipo de dados xml .DDL trigger event information can be captured using the EVENTDATA function, which returns an xml data type. Notificações de eventos enviam informações xml sobre o evento para um serviço de Service Broker.Event notifications send xml event information to a Service Broker service. As informações são formatadas no mesmo esquema da função EVENTDATA.The information is formatted to the same schema as that of the EVENTDATA function.
Metadados sobre gatilhos localizam-se nas exibições de catálogo sys.triggers e sys.server_triggers .Metadata about triggers is found in the sys.triggers and sys.server_triggers catalog views. Os metadados sobre notificações de evento localizam-se nas exibições de catálogo sys.event_notifications e sys.server_event_notifications.Metadata about event notifications is found in the sys.event_notifications and sys.server_event_notifications catalog views.

Notificações de evento x Rastreamento do SQLEvent Notifications vs. SQL Trace

A tabela a seguir compara e contrasta o uso de notificações de evento e do Rastreamento do SQL para monitorar eventos de servidor.The following table compares and contrasts using event notifications and SQL Trace for monitoring server events.

Rastreamento do SQLSQL Trace Notificações de eventosEvent Notifications
O Rastreamento do SQL não gera nenhuma sobrecarga de desempenho associada às transações.SQL Trace generates no performance overhead associated with transactions. O empacotamento de dados é eficiente.Packaging of data is efficient. Há sobrecarga de desempenho associada à criação dos dados de eventos formatados por XML e ao envio da notificação de eventos.There is performance overhead associated with creating the XML-formatted event data and sending the event notification.
O Rastreamento do SQL pode monitorar qualquer classe de evento.SQL Trace can monitor any trace event class. Notificações de eventos podem monitorar um subconjunto de classes de evento de rastreamento e também todos os eventos de linguagem de definição de dados (DDL).Event notifications can monitor a subset of trace event classes and also all data definition language (DDL) events.
Você pode personalizar quais colunas de dados devem ser geradas em um evento de rastreamento.You can customize which data columns to generate in a trace event. O esquema dos dados de evento formatados por XML retornado por notificações de eventos é fixo.The schema of the XML-formatted event data returned by event notifications is fixed.
Eventos de rastreamento gerados por DDL sempre são gerados, independentemente de a instrução DDL ser revertida ou não.Trace events generated by DDL are always generated, regardless of whether the DDL statement is rolled back. As notificações de eventos não serão acionadas se o evento na instrução DDL correspondente for revertido.Event notifications do not fire if the event in the corresponding DDL statement is rolled back.
Gerenciar o fluxo intermediário de dados de evento de rastreamento envolve popular e gerenciar arquivos ou tabelas de rastreamento.Managing the intermediate flow of trace event data involves populating and managing trace files or trace tables. O gerenciamento intermediário de dados de notificação de eventos é feito automaticamente, através de filas do Service Broker.Intermediate management of event notification data is accomplished automatically through Service Broker queues.
Os rastreamentos devem ser reiniciados toda vez que o servidor for reiniciado.Traces must be restarted every time the server restarts. Depois de registradas, as notificações de eventos persistem pelos ciclos de servidor e são transacionadas.After being registered, event notifications persist across server cycles and are transacted.
Depois de iniciado, o acionamento de rastreamentos não pode ser controlado.After being initiated, the firing of traces cannot be controlled. Podem ser usados horários de parada e de filtro para especificar quando devem ser iniciados.Stop times and filter times can be used to specify when they initiate. Os rastreamentos são acessados pela sondagem do arquivo de rastreamento correspondente.Traces are accessed by polling the corresponding trace file. As notificações de eventos podem ser controladas pelo uso da instrução WAITFOR em relação à fila que recebe a mensagem gerada pela notificação.Event notifications can be controlled by using the WAITFOR statement against the queue that receives the message generated by the event notification. Elas podem ser acessadas pela sondagem da fila.They can be accessed by polling the queue.
ALTER TRACE é a permissão mínima exigida para a criação de um rastreamento.ALTER TRACE is the least permission that is required to create a trace. Também é necessária permissão para criar um arquivo de rastreamento no computador correspondente.Permission is also required to create a trace file on the corresponding computer. A permissão mínima depende do tipo de notificação de evento que está sendo criada.Least permission depends on the type of event notification being created. Também é necessária permissão RECEIVE na fila correspondente.RECEIVE permission is also needed on the corresponding queue.
Os rastreamentos podem ser recebidos remotamente.Traces can be received remotely. As notificações de eventos podem ser recebidas remotamente.Event notifications can be received remotely.
Os eventos de rastreamento são implementados pelo uso de procedimentos armazenados do sistema.Trace events are implemented by using system stored procedures. As notificações de eventos são implementadas pelo uso de uma combinação de instruções de Mecanismo de Banco de DadosDatabase Engine e Service BrokerService BrokerTransact-SQLTransact-SQL .Event notifications are implemented by using a combination of Mecanismo de Banco de DadosDatabase Engine and Service BrokerService BrokerTransact-SQLTransact-SQL statements.
Os dados de eventos do rastreamento podem ser acessados via programação, por consultas à tabela de rastreamento correspondente, análise do o arquivo de rastreamento ou uso da classe TraceReader do SQL ServerSQL Server Management Objects (SMO).Trace event data can be accessed programmatically by querying the corresponding trace table, parsing the trace file, or using the SQL ServerSQL Server Management Objects (SMO) TraceReader Class. Os dados de evento são acessados via programação emitindo XQuery em relação aos dados de evento formatados por XML ou por meio das classes de evento do SMO.Event data is accessed programmatically by issuing XQuery against the XML-formatted event data, or by using the SMO Event classes.

Tarefas da notificação de eventoEvent Notification Tasks

TarefaTask TópicoTopic
Descreve como criar e implementar notificações de evento.Describes how to create and implement event notifications. Implementar notificações de eventoImplement Event Notifications
Descreve como configurar a caixa de diálogo do Service BrokerService Broker para notificações de evento que enviam mensagens a um agente de serviços em um servidor remoto.Describes how to configure Service BrokerService Broker dialog security for event notifications that send messages to a service broker on a remote server. Configurar segurança de caixa de diálogo para notificações de eventoConfigure Dialog Security for Event Notifications
Descreve como retornar informações sobre notificações de evento.Describes how to return information about event notifications. Obter informações sobre notificações de eventosGet Information About Event Notifications

Consulte TambémSee Also

Gatilhos DDL DDL Triggers
Gatilhos DML DML Triggers
Rastreamento do SQLSQL Trace