Recentemente, consegui habilitar o CDC em um AG sempre ativo. Embora muitas fontes afirmem que ativar o CDC no alwaysON AG é tão fácil quanto em qualquer servidor autônomo, na verdade não é. Como MS diz aqui :
Você deve criar os trabalhos de [captura e limpeza do CDC] em todos os possíveis destinos de failover antes do failover e marcá-los como desabilitados até que a réplica de disponibilidade em um host se torne a nova réplica primária. Os trabalhos do CDC em execução no antigo banco de dados primário também devem ser desabilitados quando o banco de dados local se tornar um banco de dados secundário. Para desabilitar e habilitar trabalhos, use a opção @enabled de sp_update_job (Transact-SQL). Para obter mais informações sobre como criar trabalhos de CDC, consulte sys.sp_cdc_add_job (Transact-SQL).
Acontece que depois que habilitamos o CDC na réplica primária, absolutamente nada aconteceu na secundária. Portanto, de acordo com o conselho do MS, fiz um failover manual e criei os trabalhos lá, depois fiz outro failover de volta ao primário original.
E, aparentemente, conforme sugerido na citação acima, tão totalmente compatível quanto o CDC deve ser com o alwaysOn AG, ele é totalmente incapaz de determinar se está sendo executado na réplica primária ou secundária.
Então, com o pano de fundo fora do caminho, vamos à minha pergunta : como você garante que os trabalhos do CDC estejam sempre habilitados na réplica primária atual? E sempre desativado (para não produzir erros) nos secundários?
Uma vez que, obviamente, um grande ponto do alwaysOn AG é que você não precisa estar lá manualmente no segundo em que o primário falha por qualquer motivo, porque um secundário vai pegar a folga e manter o sistema online, presumo que seja esperado apenas criar um trabalho em cada uma das réplicas, pesquisando constantemente seus status e alterando os estados dos trabalhos do CDC enquanto faz isso?
Se estiver correto, você tem algum conselho específico sobre como fazer isso, scripts ou guias específicos, etc.? Porque, para o que obviamente deveria ser um dilema bastante comum em todo o mundo, parece estranho que eu tenha que criar manualmente um novo trabalho TSQL em cada réplica apenas para executar o que é essencialmente a funcionalidade básica básica do CDC com alwaysOn AG .
Isso parece improvável, e é por isso que estou perguntando. Ou eu entendi errado alguma coisa? Obrigado!
A maneira mais comum e aceita é que, assim que um trabalho chega a um servidor em um AG, você começa a editá-lo:
Isso foi explorado em algumas outras questões SE (elas não se relacionam especificamente ao CDC, e é por isso que você não as encontrou):
Como executar o SQL Job apenas na réplica primária nos Grupos de Disponibilidade AlwaysOn?
Trabalhos do SQL Server Agent e grupos de disponibilidade
A segunda maneira é criar um trabalho de vigilância usando métodos semelhantes que ativarão e desativarão os trabalhos. Isso provavelmente é mais aceitável, visto que você está mexendo nos trabalhos internos do SQL Server. Mas depende de você.
Não fiquei muito satisfeito com as amostras acima de nomes de AG codificados e outros. Prefiro apenas que a etapa do trabalho opere dentro do banco de dados em questão, e assim pode funcionar por si mesmo se tiver um grupo e fizer parte dele (já que seus trabalhos devem continuar em execução mesmo se você removê-los temporariamente de um AG).
Esse tipo de coisa também é útil para trabalhos SSIS e outros bits que surgem com o tempo.
Indo um passo além, você provavelmente deseja criar um script do PowerShell que verificará seus servidores de tempos em tempos em busca de AGs que tenham trabalhos de CDC e que não tenham um watchdog, para que você seja notificado para criar um.
Lembre-se de que o CDC usa o agente de leitura de log da replicação transacional que, por padrão, não processará registros de log que ainda não tenham sido protegidos em todas as réplicas secundárias do grupo de disponibilidade. Considere também manter a ativação do sinalizador de rastreamento 1448 para forçar a ação no modo de confirmação assíncrona.
Dê uma olhada em alguns pensamentos adicionais sobre CDC com AlwaysON aqui .