Compreendendo notificações de eventos

As notificações de eventos são executadas em resposta a uma variedade de instruções DDL do Transact-SQL e eventos de rastreamento do SQL por meio do envio de informações sobre os eventos a um serviço Service Broker.

Notificações de eventos podem ser usadas para fazer o seguinte:

  • Registrar em log e examinar alterações ou atividade ocorridas no banco de dados.

  • Executar uma ação em resposta a um evento de maneira assíncrona, em vez de síncrona.

Notificações de eventos podem constituir uma alternativa de programação a gatilhos DDL e ao rastreamento do SQL.

Notificações de eventos são executadas de forma assíncrona, fora do escopo de uma transação. Portanto, ao contrário de gatilhos DDL, as notificações de eventos podem ser usadas dentro de um aplicativo de banco de dados para responder a eventos sem usar nenhum recurso definido pela transação imediata. Para obter mais informações, consulte Compreendendo notificações de eventos versus gatilhos.

Ao contrário do rastreamento do SQL, as notificações de eventos podem ser usadas para executar uma ação dentro de uma instância do SQL Server em resposta a um evento do rastreamento do SQL. Para obter mais informações, consulte Compreendendo notificações de eventos versus rastreamento do SQL.

Quando uma notificação de eventos é criada, uma ou mais conversações de Service Broker são abertas entre uma instância do SQL Server e o serviço de destino especificado. Normalmente, as conversações permanecem abertas enquanto a notificação de eventos existir como objeto na instância do servidor. Em alguns casos de erro, as conversações podem ser fechadas antes de a notificação de eventos ser descartada. Essas conversações nunca são compartilhadas entre notificações de eventos. Cada notificação de eventos tem suas próprias conversações exclusivas. Terminar uma conversa explicitamente impede que o serviço de destino receba mais mensagens, sendo que a conversa não será reaberta na próxima vez em que a notificação de eventos for acionada.

As informações dos eventos são entregues ao Service Broker na forma de uma variável de tipo xml que fornece, dentre outras coisas, informações sobre o momento da ocorrência de um evento, o objeto de banco de dados afetado e a instrução do lote Transact-SQL envolvida. Para obter mais informações sobre o esquema XML produzido por notificações de eventos, consulte EVENTDATA (Transact-SQL).

Dados de eventos podem ser usados por aplicativos que se encontram em execução junto com o SQL Server para rastrear o andamento e tomar decisões. Por exemplo, a notificação de eventos a seguir envia um aviso a certo serviço toda vez que uma instrução ALTER TABLE é emitida no banco de dados de exemplo AdventureWorks2008R2.

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

Um script de exemplo de notificações de eventos que pode ser executado em relação ao banco de dados de exemplo AdventureWorks2008R2, EventNotificationSample.sql, é fornecido em Exemplos do Mecanismo de Banco de Dados do SQL Server.