Eu tenho SERVERA e SERVERB configurados para espelhamento de banco de dados começando com A como principal e B como espelho. Eu criei um CNAME para SERVERA e uso isso na minha string de conexão. Não estou usando o atributo FailoverPartner da string de conexão, em parte porque suspeito que alguns de meus aplicativos não o suportarão e em parte porque estou tentando aprender sobre CNAMEs.
Minha expectativa no failover de A para B era que: 1. as conexões falhariam 2. Eu precisaria mudar o CNAME para apontar para o SERVERB. 3. Eu teria que ipconfig /flushdns em meus clientes. 4. Então tudo estaria bem.
Em vez disso, eu não tive que fazer nada disso. Meu aplicativo automaticamente começou a ir para o SERVERB, mesmo que meu CNAME esteja apontando para o SERVERA. Eu li que a string de conexão obterá a instância do espelho do SQL e isso substituirá o atributo FailoverPartner da string de conexão (e o CNAME, eu acho), mas esses eram todos posts sobre quando o atributo FailoverPartner estava sendo usado. Novamente, minha string de conexão não está usando esse atributo.
Alguém pode me explicar ou me indicar um recurso que indique como meu aplicativo soube chegar ao SERVERB mesmo que o CNAME sendo usado na string de conexão apontasse para o SERVERA?
A configuração é Windows 2008R2 / SQL 2008R2
Isso é por design. Na situação em que seu cliente é capaz de se conectar ao servidor primário, mas o banco de dados foi submetido a failover para o servidor secundário, o servidor primário informará o cliente sobre isso. Como o servidor não tem conhecimento do CNAME que você está usando, ele usará as informações que possui da configuração de espelhamento para direcionar o cliente para o local atual do banco de dados.
Onde seu CNAME entraria em jogo seria em uma situação em que o servidor primário não pudesse mais ser contatado. O cliente precisará então atingir o tempo limite ao entrar em contato com o primário antes de tentar se conectar ao servidor secundário configurado na cadeia de conexão.
A seguinte página do MS descreve o comportamento... https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql/database-mirroring-in-sql-server