Compreendendo quando ocorrem notificações de consulta
O conceito inerente a notificações de consulta é que o aplicativo somente pode confiar em dados armazenados em cache até a chegada de uma mensagem de notificação. Se o SQL Server não puder mais garantir que os dados armazenados em cache são confiáveis, o SQL Server enviará uma mensagem de notificação. O SQL Server envia uma notificação de consulta para uma assinatura quando ocorre um dos seguintes eventos:
As linhas contidas nos resultados da consulta podem ter sido alteradas.
A assinatura expira.
O servidor é reiniciado.
A assinatura de notificação de consulta não pôde ser criada (por exemplo, a instrução SELECT não está de acordo com os requisitos especificados em Criando uma consulta para notificação.
O servidor está fortemente carregado.
Os objetos dos quais a assinatura depende estão cancelados ou modificados.
Observe que o SQL Server pode produzir uma notificação de consulta em resposta a eventos que não alteram os dados, ou em resposta a uma mudança que realmente não afeta os resultados da consulta. Por exemplo, quando uma instrução UPDATE altera uma das linhas retornadas pela consulta, a notificação pode ser acionada mesmo que a atualização da linha não tenha alterado as colunas nos resultados da consulta. As notificações de consulta são criadas para dar suporte à meta global de melhorar o desempenho de aplicativos que armazenam dados em cache. Quando o servidor estiver fortemente carregado, o SQL Server pode produzir uma mensagem de notificação de consulta para a assinatura em vez de executar o trabalho de determinar se os resultados da consulta alteraram ou não.
Assinatura de notificação acontece antes de Mecanismo de Banco de Dados executar cada instrução na solicitação de assinatura. Portanto, se o comando contiver uma consulta e instruções que alteram os dados retornados pela consulta, o aplicativo poderá receber uma mensagem de notificação antes de o comando que contém a solicitação de assinatura ser concluído.
Cada assinatura tem um tempo de vida mínimo especificado. Depois do tempo de vida, o SQL Server remove a assinatura e cria uma mensagem de notificação. A mensagem informa o aplicativo que a notificação não está mais ativa, e SQL Server já não localiza mudanças à consulta.
Quando o SQL Server iniciar, o servidor cria automaticamente mensagens de notificação de consulta para todas as assinaturas de notificação de consulta no banco de dados. Isto permite que os aplicativos atualizem os dados armazenados em cache imediatamente e permite que o SQL Server iniciar sem processar a consulta em cada notificação. Quando você cancela um banco de dados, Mecanismo de Banco de Dados produz mensagens de notificação de consulta para todas as assinaturas registradas no respectivo banco de dados.
Se uma solicitação de assinatura de notificação for enviada com uma consulta que não satisfaz os requisitos da notificação de consulta, o banco de dados produzirá imediatamente uma mensagem de notificação de consulta. Essa mensagem informa o aplicativo que a consulta não satisfez os requisitos de uma assinatura. Além disso, como o SQL Server não pode localizar mudanças na consulta, o aplicativo deve considerar imediatamente os resultados da consulta como obsoleto.
Observação |
---|
Uma assinatura de notificação de consulta administrada por um objeto de dependência (como SqlDependency em ADO.NET) não produz um evento se a conexão entre o aplicativo e o banco de dados falhar. Porém, quando o aplicativo puder acessar o banco de dados mais uma vez, o aplicativo receberá imediatamente qualquer notificação criada enquanto o banco de dados não estiver acessível. |
Quando um comando produzir uma mensagem de notificação, o processo de criar e enviar uma mensagem de notificação acontece como parte de uma instrução, dentro da transação que produz a mensagem de notificação. Se o Mecanismo de Banco de Dados não puder criar e enviar a mensagem de notificação com êxito, o comando falhará e a falha será registrada no log de erros do SQL Server. Observe que o Mecanismo de Banco de Dados remove a assinatura de notificação quando a mensagem de notificação é produzida, independentemente se Mecanismo de Banco de Dados puder ou não produzir a mensagem de notificação com êxito.
Observação |
---|
As assinaturas são removidas sem produzir uma mensagem de notificação quando a conta do usuário de banco de dados que criou a assinatura for cancelada ou desabilitada, quando o banco de dados que contém a assinatura estiver anexado, ou quando KILL QUERY NOTIFICATION SUBSCRIPTION for usado para remover a consulta. |
Consulte também