Por exemplo, desejo executar um trabalho de manutenção de índice em todos os bancos de dados.
Meu servidor tem muitos AOAGs e geralmente desempenha a função de réplica primária e secundária para diferentes AOAGs ao mesmo tempo.
Se eu tiver um banco de dados secundário nesse servidor e for somente leitura, não consigo encontrar essas informações sys.databases
porque ele mostra 0
.
Como posso executar um cursor e ignorar os bancos de dados que fazem parte de um AOAG que é uma réplica secundária e não interromper o trabalho?
Eu sei que posso usar… SELECT DATABASEPROPERTYEX('MyDBNAme', 'Updateability')
Mas existe uma maneira mais fácil de implementar isso em um cursor/consulta/procedimento?
obrigado
Eu normalmente uso a função do sistema fn_hadr_database_is_primary_replica. Ele aceita o nome do banco de dados como parâmetro. Em seguida, retorna 1 se o banco de dados fizer parte de um Grupo de Disponibilidade e da réplica primária, 0 se não estiver na réplica primária e NULL se o banco de dados não fizer parte de um Grupo de Disponibilidade.
Por exemplo…
Isso entraria em um loop existente, onde você já tem a lista de nomes de banco de dados de sys.databases. Então, ao passar para cada novo nome de banco de dados no loop, você chamaria essa instrução IF.