Implementar notificações de evento

Aplica-se a:SQL Server

Para implementar uma notificação de evento, antes é necessário criar um serviço de destino para receber as notificações de evento e só então a notificação.

Importante

Agente de Serviço deve ser configurada para notificações de eventos que enviam mensagens a um agente de serviços em um servidor remoto. A segurança de caixa de diálogo deve ser configurada manualmente, de acordo com o modelo de segurança completo.

Criando o serviço de destino

Não é necessário criar um serviço que inicie o Service Broker, pois o Service Broker inclui o tipo de mensagem específica e o contrato de notificação de evento a seguir:

https://schemas.microsoft.com/SQL/Notifications/PostEventNotification  

O serviço de destino que recebe as notificações de eventos deve honrar esse contrato preexistente.

Para criar um serviço de destino:

  1. Crie uma fila para receber mensagens.

    Observação

    A fila recebe o seguinte tipo de mensagem: http://schemas.microsoft.com/SQL/Notifications/QueryNotification.

  2. Crie um serviço na fila que faça referência ao contrato de notificações de evento.

  3. Crie uma rota no serviço para definir o endereço para o qual o Service Broker deve enviar mensagens para o serviço. Para notificações de evento que visem um serviço no mesmo banco de dados, especifique ADDRESS = 'LOCAL'.

    Observação

    O roteamento do Service Broker determina o serviço que recebe as mensagens de notificação. Se a notificação de evento visar um serviço em um servidor remoto, tanto o servidor de origem, quanto o servidor de destino devem ter rotas definidas neles mesmos a fim de garantir a comunicação nas duas direções.

O exemplo a seguir cria uma fila, um serviço na fila e uma rota no serviço para manipular mensagens do contrato de notificação de evento.

CREATE QUEUE NotifyQueue ;  
GO  
CREATE SERVICE NotifyService  
ON QUEUE NotifyQueue  
(  
[http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]  
);  
GO  
CREATE ROUTE NotifyRoute  
WITH SERVICE_NAME = 'NotifyService',  
ADDRESS = 'LOCAL';  
GO  

Criando a notificação de evento

As notificações de evento são criadas por meio da instrução Transact-SQL CREATE EVENT NOTIFICATION e descartadas por DROP EVENT NOTIFICATION STATEMENT. Para modificar uma notificação de evento, você deve descartar e recriar a notificação de evento.

O exemplo a seguir cria a notificação de evento CreateDatabaseNotification. Essa notificação envia uma mensagem sobre quaisquer eventos CREATE_DATABASE que ocorrerem no servidor para o serviço NotifyService criado previamente.

CREATE EVENT NOTIFICATION CreateDatabaseNotification  
ON SERVER  
FOR CREATE_DATABASE  
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;  

Cuidado

Notificações de evento reconhecem eventos CREATE_SCHEMA e definições <schema_element> de instruções CREATE SCHEMA como eventos separados. Por exemplo, suponha que seja criada uma notificação de evento nos eventos CREATE_SCHEMA e CREATE_TABLE e você execute o lote a seguir.

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

Nesse caso, a notificação de evento é emitida duas vezes: uma, quando ocorre o evento CREATE_SCHEMA e, outra vez, quando ocorre o evento CREATE_TABLE. Recomendamos evitar criar notificações de evento ao mesmo tempo em eventos CREATE_SCHEMA e em textos <schema_element> de quaisquer definições CREATE SCHEMA correspondentes ou criar lógica em seu aplicativo para evitar capturar dados de eventos indesejados.

Para criar uma notificação de evento

Para descartar uma notificação de evento

Confira também

Obter informações sobre notificações de eventos
EVENTDATA (Transact-SQL)