Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Managed Instance
Cria um objeto que envia informações sobre um banco de dados ou evento de servidor para um serviço do Service Broker. As notificações de eventos são criadas somente usando instruções Transact-SQL.
Transact-SQL convenções de sintaxe
Sintaxe
CREATE EVENT NOTIFICATION event_notification_name
ON { SERVER | DATABASE | QUEUE queue_name }
[ WITH FAN_IN ]
FOR { event_type | event_group } [ , ...n ]
TO SERVICE 'broker_service' , { 'broker_instance_specifier' | 'current database' }
[ ; ]
Arguments
event_notification_name
O nome da notificação de evento. Um nome de notificação de evento deve estar em conformidade com as regras para identificadores e deve ser exclusivo dentro do escopo no qual eles são criados: SERVER, DATABASEou object_name.
SERVIDOR
Aplica o escopo da notificação de evento à instância atual do SQL Server. Se especificado, a notificação é acionada sempre que o evento especificado na FOR cláusula ocorre em qualquer lugar na instância do SQL Server.
Observação
Essa opção não está disponível em um banco de dados contido.
DATABASE
Aplica o escopo da notificação de evento ao banco de dados atual. Se especificado, a notificação é acionada sempre que o evento especificado na FOR cláusula ocorre no banco de dados atual.
QUEUE
Aplica o escopo da notificação a uma fila específica no banco de dados atual.
QUEUE só pode ser especificado se FOR QUEUE_ACTIVATION ou FOR BROKER_QUEUE_DISABLED também for especificado.
queue_name
O nome da fila à qual a notificação de evento se aplica.
queue_name só pode ser especificado se QUEUE for especificado.
COM FAN_IN
Instrui o SQL Server a enviar apenas uma mensagem por evento para qualquer serviço especificado para todas as notificações de eventos que:
- São criados no mesmo evento.
- São criados pelo mesmo principal (conforme identificado pelo mesmo SID).
- Especifique o mesmo serviço e broker_instance_specifier.
- Especifique
WITH FAN_IN.
Por exemplo, três notificações de eventos são criadas. Todas as notificações de eventos especificam FOR ALTER_TABLE, WITH FAN_IN, a mesma TO SERVICE cláusula e são criadas pelo mesmo SID. Quando uma ALTER TABLE instrução é executada, as mensagens criadas por essas três notificações de evento são mescladas em uma. Portanto, o serviço de destino recebe apenas uma mensagem do evento.
event_type
O nome de um tipo de evento que faz com que a notificação de evento seja executada.
event_type pode ser um tipo de evento DDL Transact-SQL, um tipo de evento de Rastreamento SQL ou um tipo de evento do Service Broker. Para obter uma lista de tipos de eventos DDL Transact-SQL qualificados, consulte Eventos DDL. Os tipos de evento do Service Broker são QUEUE_ACTIVATION e BROKER_QUEUE_DISABLED. Para obter mais informações, consulte Notificações de eventos.
event_group
O nome de um grupo predefinido de tipos de eventos Transact-SQL ou Rastreamento SQL. Uma notificação de evento pode ser acionada após a execução de qualquer evento que pertença a um grupo de eventos. Para obter uma lista de grupos de eventos DDL, os eventos Transact-SQL que eles cobrem e o escopo no qual eles podem ser definidos, consulte Grupos de eventos DDL.
event_group também atua como uma macro, quando a CREATE EVENT NOTIFICATION instrução termina, adicionando os tipos de evento que abrange à exibição de sys.events catálogo.
'broker_service'
Especifica o serviço de destino que recebe os dados da instância do evento. O SQL Server abre uma ou mais conversas para o serviço de destino para a notificação de evento. Esse serviço deve respeitar o mesmo tipo de mensagem e contrato de Eventos do SQL Server usado para enviar a mensagem.
As conversas permanecem abertas até que a notificação de evento seja descartada. Alguns erros podem fazer com que as conversas sejam encerradas mais cedo. Encerrar algumas ou todas as conversas explicitamente pode impedir que o serviço de destino receba mais mensagens.
{ 'broker_instance_specifier' | 'base de dados atual' }
Especifica uma instância do agente de serviços em relação à qual broker_service é resolvida. O valor de um agente de serviços específico pode ser adquirido consultando a service_broker_guid coluna da sys.databases exibição de catálogo. Use 'current database' para especificar a instância do service broker no banco de dados atual.
'current database' é um literal de cadeia de caracteres que não diferencia maiúsculas de minúsculas.
Observação
Essa opção não está disponível em um banco de dados contido.
Observações
O Service Broker inclui um tipo de mensagem e um contrato especificamente para notificações de eventos. Portanto, um Service Broker iniciando o serviço não precisa ser criado porque já existe um que especifica o seguinte nome de contrato: http://schemas.microsoft.com/SQL/Notifications/PostEventNotification
O serviço de destino que recebe notificações de eventos deve honrar este contrato preexistente.
Importante
A segurança da caixa de diálogo do Service Broker deve ser configurada para notificações de eventos que enviam mensagens para um agente de serviços em um servidor remoto. A segurança da caixa de diálogo deve ser configurada manualmente de acordo com o modelo de segurança total. Para obter mais informações, consulte Configurar a segurança da caixa de diálogo para notificações de eventos.
Se uma transação de evento que ativa uma notificação for revertida, o envio da notificação de evento também será revertido. As notificações de eventos não são acionadas por uma ação definida em um gatilho quando a transação é confirmada ou revertida dentro do gatilho. Como os eventos de rastreamento não são vinculados por transações, as notificações de eventos baseadas em eventos de rastreamento são enviadas independentemente de a transação que os ativa ser revertida.
Se a conversa entre o servidor e o serviço de destino for interrompida depois que uma notificação de evento for acionada, um erro será relatado e a notificação de evento será descartada.
A transação de evento que iniciou originalmente a notificação não é afetada pelo sucesso ou falha do envio da notificação de evento.
Qualquer falha no envio de uma notificação de evento é registrada.
Permissions
Para criar uma notificação de evento com escopo para o banco de dados (ON DATABASE), requer CREATE DATABASE DDL EVENT NOTIFICATION permissão no banco de dados atual.
Para criar uma notificação de evento em uma instrução DDL com escopo para o servidor (ON SERVER), requer CREATE DDL EVENT NOTIFICATION permissão no servidor.
Para criar uma notificação de evento em um evento de rastreamento, requer CREATE TRACE EVENT NOTIFICATION permissão no servidor.
Para criar uma notificação de evento com escopo para uma fila, requer ALTER permissão na fila.
Examples
Observação
Nos Exemplos A e B, o TO SERVICE 'NotifyService' GUID na cláusula (8140a771-3c4b-4479-8ac0-81008ab17984) é específico do computador no qual o exemplo foi configurado. Nesse caso, foi o GUID da base de dados AdventureWorks2025.
Para copiar e executar esses exemplos, você precisa substituir esse GUID por um do seu computador e instância do SQL Server. Conforme explicado na seção Argumentos , você pode adquirir o 'broker_instance_specifier' consultando a service_broker_guid coluna da sys.databases visualização do catálogo.
A. Criar uma notificação de evento com escopo de servidor
O exemplo a seguir cria os objetos necessários para configurar um serviço de destino usando o Service Broker. O serviço de destino faz referência ao tipo de mensagem e ao contrato do serviço iniciador especificamente para notificações de eventos. Em seguida, uma notificação de evento é criada nesse serviço de destino que envia uma notificação sempre que um Object_Created evento de rastreamento acontece na instância do SQL Server.
--Create a queue to receive messages.
CREATE QUEUE NotifyQueue;
GO
--Create a service on the queue that references
--the event notifications contract.
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);
GO
--Create a route on the service to define the address
--to which Service Broker sends messages for the service.
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO
--Create the event notification.
CREATE EVENT NOTIFICATION log_ddl1
ON SERVER
FOR Object_Created
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984';
B. Criar uma notificação de evento com escopo de banco de dados
O exemplo a seguir cria uma notificação de evento no mesmo serviço de destino que o exemplo anterior. A notificação de evento é ativada após ocorrer um ALTER_TABLE evento na base de dados de exemplo AdventureWorks2025.
CREATE EVENT NOTIFICATION Notify_ALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984';
C. Obter informações sobre uma notificação de evento com escopo de servidor
O exemplo a seguir consulta a exibição de catálogo em busca de metadados sobre notificação sys.server_event_notifications de evento que foi criada com o log_ddl1 escopo do servidor.
SELECT *
FROM sys.server_event_notifications
WHERE name = 'log_ddl1';
D. Obter informações sobre uma notificação de evento com escopo de banco de dados
O exemplo a seguir consulta a exibição de catálogo em busca de metadados sobre notificação sys.event_notificationsNotify_ALTER_T1 de evento que foi criada com o escopo do banco de dados.
SELECT *
FROM sys.event_notifications
WHERE name = 'Notify_ALTER_T1';