Servidores registrados SSMS com intenção de aplicativo ReadOnly

10

Estamos trabalhando no teste de POC do SQL Server 2014 com o AlwaysOn e um dos usuários perguntou sobre como salvar a configuração do SSMS com o ReadOnly Intent usando os servidores registrados no grupo de servidores Local. Dessa forma, eles não precisam digitar o nome alternativo toda vez que precisam acessar a réplica ReadOnly .

Infelizmente, não há opção nos servidores registrados para adicionar a opção ApplicationIntent ao contrário do explorador de objetos comum.

Me deparei com este artigo da Microsoft sobre como alterar a cadeia de conexão no RegSrvr.xml.

https://connect.microsoft.com/SQLServer/feedback/details/786323/ssms-sql-server-management-studio-2012-missing-connection-properties-for-availability-groups

Tentei a sugestão deles e ele não se conectou ao nó de réplica correto ao se conectar através do servidor local nos servidores registrados.

A opção ReadOnly funciona bem no explorador de objetos ao usar as opções na janela de conexão> Parâmetros adicionais de conexão. Mas isso não salva as alterações feitas na conexão.

Alguém conhece alguma solução alternativa para salvar as configurações com a propriedade ReadOnly Intent com o SSMS? Agradeço antecipadamente por sua ajuda.

DBAuser
fonte

Respostas:

3

SQL Management Studio (versões anteriores a 2016)

Infelizmente, existem algumas ressalvas que tornam o uso do Application Intent no SQL Management Studio algo doloroso:

Para se conectar manualmente com a intenção ReadOnly, depois de abrir a caixa de diálogo Conectar ao Servidor no Pesquisador de Objetos, os usuários devem se lembrar de:

  1. Clique em Opções >> .
  2. Vá para a guia Parâmetros adicionais de conexão .
  3. Digite o parâmetro adicional como ApplicationIntent = ReadOnly;
  4. (Nota: Os usuários não devem clicar no botão Opções << depois de inserir os Parâmetros adicionais de conexão, caso contrário os parâmetros serão perdidos.)
  5. Clique em conectar .
  6. Sempre inicie as janelas de consulta clicando com o botão direito do mouse no banco de dados desejado na visualização Object Explorer e escolhendo New Query para evitar a execução da ressalva nº 3 abaixo.

As advertências aplicáveis ​​são as seguintes:

  1. Embora você possa fazer com que o SQL Management Studio se conecte ao Read Only Intent, ele não armazena os Parâmetros Adicionais de Conexão quando uma conexão é adicionada aos Servidores Registrados.
  2. O comportamento ao editar manualmente os servidores registrados localmente no arquivo RegSrvr.xml para adicionar o Intenção do Aplicativo é extremamente inconsistente e será sobrescrito sempre que uma alteração for feita na GUI, tornando esta solução alternativa não confiável.
  3. O banco de dados Always On deve ser selecionado antes da janela de consulta ser aberta; caso contrário, a conexão será roteada para o servidor principal. Se você tentar selecionar o banco de dados usando a lista suspensa da janela de consulta após a janela de consulta já ter sido aberta em um banco de dados que não seja Always On, você receberá uma caixa de diálogo de erro. Se você tentar alterar o banco de dados para um banco de dados Always On com uma instrução USE após a janela de consulta já ter sido aberta para um banco de dados não Always Always, os resultados serão assim quando você tentar executar a consulta SQL:
      Msg 979, Level 14, State 1, Line 1
      The target database ('AlwaysOnDatabase') is in an availability group 
      and currently does not allow read only connections. For more 
      information about application intent, see SQL Server Books Online.

SQL Management Studio (versões 2016 ou posterior)

O SQL Server Management Studio 2016 ou superior pode conectar-se ao Intenção de Aplicativo Somente Leitura (usando as mesmas 6 etapas das versões anteriores) e armazena os Parâmetros Adicionais de Conexão. Ainda existem algumas ressalvas:

  1. A exibição do Pesquisador de Objetos não enumerará nenhuma das tabelas ou outros objetos nos bancos de dados AlwaysOn. Tentar expandi-los resulta em uma mensagem de acesso negado.
  2. Você não pode ter uma conexão somente leitura e não somente leitura com o mesmo ouvinte aberta ao mesmo tempo.
  3. O Intellisense para nomes de objetos no banco de dados não funciona. (Estranhamente, os Objetos são enumerados perfeitamente no Query Designer que você pode iniciar usando o Design Query no Editor ... no menu do botão direito do mouse.)
  4. A ressalva 3 das advertências das versões anteriores ainda se aplica.

Produtos de terceiros

O LinqPad armazena toda a cadeia de conexão, incluindo Application Intent e o banco de dados, quando você salva uma conexão e, portanto, pode ser uma opção viável para executar consultas Somente Leitura nos bancos de dados Always On.

JamieSee
fonte
0

Você pode estar perdendo uma parte importante do quebra-cabeça ou pelo menos não a vi em nenhum lugar da sua pergunta:

ApplicationIntent=readonlyé metade da equação. Você também precisa passar o parâmetro MultiSubnetFailover=True.

Por exemplo, na guia Parâmetros de conexão adicionais, você deseja inserir o seguinte:

MultiSubnetFailover=True;ApplicationIntent=readonly;
Tony Castro
fonte
Obrigado Tony, mas este não é o problema que estou tendo.
precisa saber é o seguinte
0

É possível que você crie um arquivo de configuração e crie automaticamente os servidores registrados necessários no SSMS? Assim como mencionado no meu artigo MSSQLTips:

Automatize o registro e a manutenção de servidores no SQL Server Management Studio (SSMS)

jyao
fonte
Oi jyao, Obrigado pela sua resposta. Você postou um script do PowerShell interessado nesse artigo, mas infelizmente não funciona com a propriedade ApplicationIntent. Alterei o PS para usar o seguinte: New-Item -Name $ (encode-sqlname $ g.value) -caminho "sqlserver: \ SQLRegistration \ $ ($ choice) \ $ ($ g.parentfolder)" -ItemType $ g .type -Value ("Servidor = $ regsrv; segurança integrada = true; Catálogo inicial = dbname; ApplicationIntent = ReadOnly"); Sem sorte! Se isso funcionasse, eu ficaria mais do que feliz em usar isso como uma opção. Obrigado novamente.
precisa saber é o seguinte
0

Isso foi corrigido no SQL 2016 SSMS ao usar com servidores registrados. Consegui registrar uma conexão ReadOnly Intent como parte do grupo de servidores locais e abrir a conexão salva para uso futuro. Obrigado pela ajuda com isso.

DBAuser
fonte
0

Não posso comentar, mas estou adicionando à resposta do DBAUser.

Não pude ver uma opção para adicionar o Application Intent na GUI ao configurar a conexão na área de servidores registrados.

Eu tive que conectar usando o explorador de objetos (usando Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly) e registrar o servidor depois que eu estava conectado.

Ou adicione Initial Catalog=<Database>;ApplicationIntent=ReadOnlyà cadeia de conexão no arquivo .regsrvr.

marclancy
fonte
Você precisará registrar o servidor readOnly no explorador de objetos para vê-lo como parte dos grupos de servidores locais nos servidores registrados. No explorador de objetos, Depois de criar uma conexão readOnly com o aplicativo applicationentent, clique com o botão direito do mouse no servidor e clique em Register. Em seguida, altere o Nome do servidor registrado para o que você deseja. Isso será salvo como parte dos servidores locais nos servidores registrados. Espero que isto ajude!
precisa saber é o seguinte