Criando notificações de eventos

Para criar uma notificação de eventos, você deve determinar o seguinte:

  • O escopo da notificação.

  • A instrução Transact-SQL ou grupo de instruções que emite a notificação de eventos.

ObservaçãoObservação

Notificações de eventos não ocorrem em resposta a eventos que afetem tabelas temporárias locais ou globais e procedimentos armazenados.

Definindo o escopo de notificação

Você pode especificar que uma notificação de evento ocorra em resposta a uma instrução feita em todos os objetos do banco de dados atual ou em todos os objetos de uma instância do SQL Server. Notificações de eventos especificadas nos eventos QUEUE_ACTIVATION e BROKER_QUEUE_DISABLED são do escopo das filas individuais. Nem todos os eventos podem ocorrer em qualquer escopo. Por exemplo, eventos CREATE_DATABASE só podem ocorrer no nível da instância do servidor. Por outro lado, uma notificação criada em um evento ALTER_TABLE pode ser programada para ocorrer em todas as tabelas do banco de dados ou em todas as tabelas da instância do servidor.

O exemplo a seguir envia uma notificação de qualquer instrução ALTER TABLE executada na instância do servidor para a instância do Service Broker no banco de dados atual.

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR ALTER_TABLE 
   TO SERVICE '//Adventure-Works.com/ArchiveService' , 'current database';

Links para as instruções Transact-SQL e os escopos que podem ser especificados para elas se encontram na seção "Selecionando uma instrução DDL em particular para emitir uma notificação de eventos", a seguir.

Especificando uma instrução ou grupo de instruções Transact-SQL

Podem ser criadas notificações de eventos em resposta ao seguinte:

  • Uma instrução DDL, um evento do Rastreamento do SQL ou um evento do Service Broker em particular

  • Um grupo predefinido de instruções DDL ou eventos do Rastreamento do SQL

Selecionando uma instrução DDL em particular para emitir uma notificação de eventos

Podem ser criadas notificações de eventos que ocorram mediante uma instrução Transact-SQL em particular ou uma execução de procedimento armazenado. O exemplo anterior mostrou uma notificação de eventos que ocorre mediante um evento ALTER_TABLE.

Para obter uma lista de instruções Transact-SQL individuais que podem ser especificadas para emitir uma notificação de eventos e o escopo no qual elas podem ser executadas, consulte Eventos DDL. Esses eventos também podem ser obtidos consultando-se a exibição do catálogo sys.event_notification_event_types.

ObservaçãoObservação

Certos procedimentos armazenados do sistema que executam operações similares a DDL também podem disparar notificações de eventos. Teste as notificações de eventos para determinar suas respostas aos procedimentos armazenados que são executados. Por exemplo, a instrução CREATE TYPE e o procedimento armazenado sp_addtype irão, ambos, disparar uma notificação de eventos que tenha sido criada em um evento CREATE_TYPE.

Selecionando um evento do Rastreamento do SQL em particular para emitir uma notificação de eventos

Podem ser criadas notificações de eventos que sejam disparadas mediante a ocorrência de um evento do Rastreamento do SQL. Por exemplo, a notificação de eventos a seguir é disparada mediante um evento Object_Created no servidor.

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR Object_Created 
   TO SERVICE '//Adventure-Works.com/ArchiveService', 'current database' ;

Para obter uma lista de eventos do Rastreamento do SQL que pode emitir uma notificação de eventos, consulte Eventos de rastreamento para uso com notificações de eventos. Também é possível obter uma lista desses eventos consultando-se a exibição do catálogo sys.event_notification_event_types. Eventos do Rastreamento SQL só podem ser executados no escopo da instância do servidor. Para obter mais informações sobre classes de eventos do Rastreamento do SQL, consulte Referência do SQL Server Profiler.

Selecionando um evento do Service Broker para emitir uma notificação de eventos

Podem ser criadas notificações de eventos que sejam disparadas mediante um evento QUEUE_ACTIVATION ou BROKER_QUEUE_DISABLED do Service Broker. O evento QUEUE_ACTIVATION ocorre quando uma fila tem mensagens a processar. Para obter mais informações, consulte Ativação baseada em eventos. O evento BROKER_QUEUE_DISABLED ocorre quando o status de uma fila é definido como OFF. Para obter mais informações, consulte Tratando de mensagens suspeitas.

Selecionando um grupo de instruções DDL predefinido para emitir uma notificação de eventos

Pode ocorrer uma notificação de eventos mediante a execução de qualquer evento Transact-SQL pertencente a um grupo predefinido de eventos similares. Por exemplo, se desejar que uma notificação de eventos ocorra mediante a execução de uma instrução CREATE TABLE, ALTER TABLE ou DROP TABLE, você pode especificar FOR DDL_TABLE_EVENTS na instrução CREATE EVENT NOTIFICATION. Após a execução de CREATE EVENT NOTIFICATION, o grupo de eventos será adicionado à exibição do catálogo sys.events.

ObservaçãoObservação

No SQL Server 2005, sys.events expande grupos de eventos listando apenas os eventos individuais compreendidos por um grupo. Logo, as alterações a eventos compreendidos por grupos de eventos no SQL Server 2008 não se aplicam às notificações de eventos criadas nesses grupos no SQL Server 2005.

Para obter uma lista de grupos predefinidos de instruções DDL e DML disponíveis para notificações de eventos, as instruções compreendidas e o escopo no qual esses grupos de eventos podem ser executados, consulte Grupos de eventos DDL.

Selecionando um grupo predefinido de eventos do Rastreamento do SQL para emitir uma notificação de eventos

Pode ocorrer uma notificação de eventos mediante a execução de qualquer evento do Rastreamento do SQL pertencente a um grupo predefinido de eventos de rastreamento similares. Por exemplo, se desejar que uma notificação de eventos ocorra mediante qualquer evento de rastreamento relacionado a bloqueios, o que compreende os eventos LOCK_DEADLOCK, LOCK_DEADLOCK_CHAIN, LOCK_ESCALATION e DEADLOCK_GRAPH, você pode especificar FOR TRC_LOCKS na instrução CREATE EVENT NOTIFICATION.

Para obter uma lista dos grupos predefinidos de eventos do Rastreamento do SQL disponíveis para notificações de eventos, consulte Grupos de eventos de rastreamento para uso com notificações de eventos. Esses grupos só podem ser executados no nível da instância do servidor.