Estou tentando descobrir qual consulta (ou consultas) precisa ser executada para determinar se há algum tipo de problema com um grupo de disponibilidade. Eu tenho usado:
SELECT @@SERVERNAME AS 'primary_replica', cs.database_name, rs.synchronization_health_desc
FROM sys.dm_hadr_database_replica_states rs
join sys.dm_hadr_database_replica_cluster_states cs on rs.replica_id =
cs.replica_id and rs.group_database_id = cs.group_database_id
WHERE rs.is_local = 1
Acontece que a integridade da sincronização ( select * from sys.dm_hadr_availability_group_states
) pode ser NOT_HEALTHY, mas a consulta acima não apresenta nenhum problema com a réplica. Eu tentei olhar através de todos os vários DMs que contêm informações, mas é um labirinto ou palavras e não consigo encontrar o caminho para o queijo SQL que deve estar lá em algum lugar.
Qual é a única consulta que indicará que há um problema que precisa ser resolvido? Não preciso que seja específico ou designe a causa, só preciso saber que há um problema. Eu sei que durante o failover alguns dos estados serão NOT_HEALTHY, e nós explicamos isso exigindo x minutos de insalubridade antes de enviar um alerta.
A seguir está uma consulta SQL que pode ser executada em todos os nós do cluster para verificar todos os estados de integridade relacionados ao AG. A saída pode ser formatada de forma diferente dependendo de suas necessidades, mas esta retorna uma lista dos objetos que não estão íntegros ou uma linha que inclui o nome do servidor e que todos os objetos estão íntegros.