Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Para configurar um grupo de disponibilidade Always On para dar suporte ao roteamento somente leitura no SQL Server, você pode usar o Transact-SQL ou o PowerShell. Roteamento somente leitura refere-se à capacidade do SQL Server de rotear solicitações de conexão somente leitura qualificadas para uma réplica secundária legível Always On disponível (ou seja, uma réplica configurada para permitir cargas de trabalho somente leitura quando executadas sob a função secundária). Para oferecer suporte ao roteamento de leitura apenas, o grupo de disponibilidade deve possuir um ouvinte do grupo de disponibilidade. Os clientes somente leitura devem direcionar suas solicitações de conexão para esse ouvinte e as cadeias de conexão do cliente devem especificar a intenção do aplicativo como "somente leitura". Ou seja, devem ser solicitações de conexão com intenção de leitura.
O roteamento de leitura única está disponível no SQL Server 2016 (13.x) e versões posteriores.
Observação
Para obter informações sobre como configurar uma réplica secundária legível, consulte Configurar o acesso Read-Only em uma réplica de disponibilidade (SQL Server).
Pré-requisitos
O grupo de disponibilidade deve possuir um ouvinte do grupo de disponibilidade. Para obter mais informações, consulte Criar ou Configurar um Listener de Grupo de Disponibilidade (SQL Server).
Uma ou mais réplicas de disponibilidade devem ser configuradas para aceitar somente leitura na função secundária (ou seja, para serem réplicas secundárias legíveis). Para obter mais informações, consulte Configurar o acesso Read-Only em uma réplica de disponibilidade (SQL Server).
Você deve estar conectado à instância do servidor que hospeda a réplica primária atual.
Se estiver usando um Logon SQL, verifique se a conta está configurada corretamente. Para obter mais informações, consulte Gerenciamento de logons e trabalhos para os bancos de dados de um grupo de disponibilidade (SQL Server).
Quais propriedades de réplica você precisa configurar para dar suporte ao roteamento Read-Only?
Para cada réplica secundária legível que ofereça suporte à roteação somente leitura, é necessário especificar uma URL de roteação somente leitura. Essa URL entra em vigor somente quando a réplica local está sendo executada sob a função secundária. A URL de roteamento somente leitura deve ser especificada em uma base de réplica por réplica, conforme necessário. Cada URL de roteamento somente leitura é usado para rotear solicitações de conexão com intenção de leitura para uma réplica secundária legível específica. Normalmente, a cada réplica secundária legível é atribuída uma URL de encaminhamento apenas para leitura.
Para obter informações sobre como calcular a _read_only_routing_url_ para uma réplica de disponibilidade, consulte Calculando read_only_routing_url para Always On
Para cada réplica de disponibilidade que você deseja oferecer suporte ao roteamento somente leitura quando for a réplica primária, você precisa especificar uma lista de roteamento somente leitura. Uma determinada lista de roteamento somente leitura entra em vigor somente quando a réplica local está sendo executada sob a função principal. Essa lista deve ser especificada réplica a réplica, conforme necessário. Normalmente, cada lista de roteamento somente leitura conteria todas as URLs de roteamento somente leitura, com a URL da réplica local no final da lista.
Observação
As solicitações de conexão com intenção de leitura são encaminhadas para a primeira entrada disponível na lista de encaminhamento de leitura da réplica primária atual. No entanto, o balanceamento de carga entre réplicas de leitura é suportado. Para obter mais informações, consulte Configurar o balanceamento de carga em réplicas somente leitura.
Observação
Para obter informações sobre os ouvintes de grupos de disponibilidade e sobre o roteamento em modo de leitura, consulte Ouvintes de Grupos de Disponibilidade, Conectividade de Cliente e Failover de Aplicação (SQL Server).
Permissões
| Tarefa | Permissões |
|---|---|
| Para configurar réplicas ao criar um grupo de disponibilidade | Requer associação à função de servidor fixa sysadmin e uma das seguintes permissões: permissão de servidor CREATE AVAILABILITY GROUP, permissão ALTER ANY AVAILABILITY GROUP ou permissão CONTROL SERVER. |
| Para modificar uma réplica de disponibilidade | É necessário ter permissão ALTER AVAILABILITY GROUP no grupo de disponibilidade, permissão CONTROL AVAILABILITY GROUP, permissão ALTER ANY AVAILABILITY GROUP ou permissão CONTROL SERVER. |
Usando Transact-SQL
Configurar uma lista de roteamento somente leitura
Use as etapas a seguir para configurar o roteamento somente leitura usando o Transact-SQL. Para obter um exemplo de código, consulte Exemplo (Transact-SQL), mais adiante nesta seção.
Conecte-se à instância do servidor que hospeda a réplica primária.
Se você estiver especificando uma réplica para um novo grupo de disponibilidade, use a instrução Transact-SQL CREATE AVAILABILITY GROUP . Se estiveres a adicionar ou a modificar uma réplica para um grupo de disponibilidade existente, usa a instrução ALTER AVAILABILITY GROUP Transact-SQL.
Para configurar o roteamento somente leitura para a função secundária, na cláusula ADD REPLICA ou MODIFY REPLICA WITH, especifique a opção SECONDARY_ROLE, da seguinte maneira:
SECONDARY_ROLE ( READ_ONLY_ROUTING_URL ='TCP://system-address:port')
Os parâmetros da URL de roteamento somente leitura são os seguintes:
de endereço do sistema
É uma cadeia de caracteres, como um nome de sistema, um nome de domínio totalmente qualificado ou um endereço IP, que identifica inequivocamente o sistema do computador de destino.porto
É um número de porta usado pelo Mecanismo de Banco de Dados da instância do SQL Server.Por exemplo:
SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')Em uma cláusula MODIFY REPLICA, o ALLOW_CONNECTIONS é opcional se a réplica já estiver configurada para permitir conexões somente leitura.
Para obter mais informações, consulte Calculando read_only_routing_url para Always On.
Para configurar o roteamento somente leitura para a função principal, na cláusula ADD REPLICA ou MODIFY REPLICA WITH, especifique a opção PRIMARY_ROLE, da seguinte maneira:
PRIMARY_ROLE ( READ_ONLY_ROUTING_LIST =('servidor' [ ,... n ] ))
onde o servidor identifica uma instância de servidor que hospeda uma réplica secundária de leitura no grupo de disponibilidade.
Por exemplo:
PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))Observação
Você deve definir a URL de roteamento somente leitura antes de configurar a lista de roteamento somente leitura.
Configurar o balanceamento de carga em réplicas somente leitura
A partir do SQL Server 2016 (13.x), você pode configurar o balanceamento de carga em um conjunto de réplicas somente leitura. Antes, o encaminhamento de apenas leitura direcionava sempre o tráfego para a primeira réplica disponível na lista de encaminhamento. Para tirar partido desse recurso, use um único nível de parênteses aninhados em torno das instâncias do servidor READ_ONLY_ROUTING_LIST nos comandos CREATE AVAILABILITY GROUP ou ALTER AVAILABILITY GROUP.
Por exemplo, a lista de roteamento a seguir equilibra a carga da solicitação de conexão com intenção de leitura entre duas réplicas somente leitura, Server1 e Server2. Os parênteses aninhados que envolvem esses servidores identificam um conjunto balanceado de carga. Se nenhuma das réplicas estiver disponível nesse conjunto, ela continuará a tentar se conectar sequencialmente às outras réplicas, Server3 e Server4, na lista de roteamento somente leitura.
READ_ONLY_ROUTING_LIST = (('Server1','Server2'), 'Server3', 'Server4')
Observe que cada entrada na lista de roteamento pode ser um conjunto de réplicas somente leitura com balanceamento de carga. O exemplo a seguir demonstra isso.
READ_ONLY_ROUTING_LIST = (('Server1','Server2'), ('Server3', 'Server4', 'Server5'), 'Server6')
Apenas um nível de parênteses aninhados é suportado.
Exemplo (Transact-SQL)
O exemplo a seguir modifica duas réplicas de disponibilidade de um grupo de disponibilidade existente, AG1 para oferecer suporte ao encaminhamento só de leitura se uma dessas réplicas atualmente desempenhar a função principal. Para identificar as instâncias do servidor que hospedam a réplica de disponibilidade, este exemplo especifica os nomes das instâncias COMPUTER01 e COMPUTER02.
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER01' WITH
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER01' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433'));
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER02' WITH
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER02' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.contoso.com:1433'));
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER01' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON
N'COMPUTER02' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));
GO
Usando o PowerShell
Configurar uma lista de roteamento somente leitura
Use as etapas a seguir para configurar o roteamento somente leitura usando o PowerShell. Para obter um exemplo de código, consulte Exemplo (PowerShell), mais adiante nesta seção.
Defina o padrão (cd) para a instância do servidor que hospeda a réplica primária.
Ao adicionar uma réplica de disponibilidade a um grupo de disponibilidade, use o cmdlet New-SqlAvailabilityReplica . Ao modificar uma réplica de disponibilidade existente, use o cmdlet Set-SqlAvailabilityReplica . Os parâmetros relevantes são os seguintes:
Para configurar o roteamento de leitura apenas para a função secundária, especifique o parâmetro ReadonlyRoutingConnectionUrl"url".
onde, url é o FQDN (nome de domínio totalmente qualificado) de conectividade e a porta a ser usada ao rotear para a réplica para conexões somente leitura. Por exemplo:
-ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"Para obter mais informações, consulte Calculando read_only_routing_url para Always On.
Para configurar o acesso à conexão para a função principal, especifique ReadonlyRoutingList"server" [ ,... n ], onde o servidor identifica uma instância do servidor que hospeda uma réplica secundária somente leitura no grupo de disponibilidade. Por exemplo:
-ReadOnlyRoutingList "SecondaryServer","PrimaryServer"Observação
Você deve definir a URL de roteamento somente leitura de uma réplica antes de configurar sua lista de roteamento somente leitura.
Observação
Para exibir a sintaxe de um cmdlet, use o cmdlet Get-Help no ambiente do SQL Server PowerShell. Para obter mais informações, consulte Obter Ajuda no SQL Server PowerShell.
Configurar e usar o provedor do SQL Server PowerShell
Exemplo (PowerShell)
O exemplo a seguir configura a réplica primária e uma réplica secundária em uma grupo de disponibilidade para roteamento de leitura única. Primeiro, o exemplo atribui uma URL de roteamento somente leitura a cada réplica. Em seguida, configura a lista de roteamento somente leitura na réplica primária. As conexões com a propriedade "ReadOnly" definida na cadeia de conexão serão redirecionadas para a réplica secundária. Se essa réplica secundária não for legível (conforme determinado pela configuração ConnectionModeInSecondaryRole ), a conexão será direcionada de volta para a réplica primária.
Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica
Acompanhamento: Após configurar o encaminhamento Read-Only
Depois que a réplica primária atual e as réplicas secundárias legíveis forem configuradas para oferecer suporte ao roteamento somente leitura em ambas as funções, as réplicas secundárias legíveis poderão receber solicitações de conexão com intenção de leitura de clientes que se conectam por meio do ouvinte do grupo de disponibilidade.
Sugestão
Ao usar o Utilitário bcp ou o Utilitário sqlcmd, você pode especificar o acesso somente leitura a qualquer réplica secundária habilitada para acesso somente leitura especificando a opção Somente leitura -K .
Requisitos e recomendações para Cliente Connection-Strings
Para que um aplicativo cliente use roteamento somente leitura, sua cadeia de conexão deve atender aos seguintes requisitos:
Use o protocolo TCP.
Defina o atributo/propriedade de intenção do aplicativo como somente leitura.
Faça referência ao ouvinte de um grupo de disponibilidade configurado para oferecer suporte ao roteamento somente leitura.
Faça referência a um banco de dados nesse grupo de disponibilidade.
Além disso, recomendamos que as cadeias de conexão habilitem o failover de várias sub-redes, que oferece suporte a um thread de cliente paralelo para cada réplica em cada sub-rede. Isso minimiza o tempo de reconexão do cliente após um failover.
A sintaxe de uma cadeia de conexão depende do provedor do SQL Server que um aplicativo está usando. O exemplo de cadeia de conexão a seguir para o Provedor de Dados do .NET Framework 4.0.2 para SQL Server ilustra as partes de uma cadeia de conexão que são necessárias e recomendadas para funcionar para roteamento somente leitura.
Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True
Para mais informações sobre a intenção de aplicação de leitura apenas e o roteamento de leitura apenas, consulte Ouvintes de Grupos de Disponibilidade, Conectividade de Cliente e Failover de Aplicação (SQL Server).
Se o roteamento Read-Only não estiver funcionando corretamente
Para obter informações sobre como solucionar problemas de uma configuração de roteamento somente leitura, consulte Read-Only o roteamento não está funcionando corretamente.
Reverter para o comportamento de roteamento padrão
A partir do SQL Server 2025 (17.x), pode especificar NONE como o destino READ_WRITE_ROUTING_URL ou READ_ONLY_ROUTING_URL para reverter o encaminhamento especificado para a réplica de disponibilidade e encaminhar o tráfego com base no comportamento predefinido. Para saber mais, consulte o comando ALTER AVAILABILITY GROUP Transact-SQL.
Próximas Etapas
Para exibir configurações de roteamento somente leitura
sys.availability_replicas (Transact-SQL) (coluna read_only_routing_url )
Para configurar o acesso à conexão do cliente
Criar ou Configurar um Listener de Grupo de Disponibilidade (SQL Server)
Configurar Read-Only Access numa réplica de disponibilidade (SQL Server)
Para usar cadeias de conexão em aplicativos
Suporte ao SQL Server Native Client para alta disponibilidade e recuperação de desastres
Usando palavras-chave de cadeia de conexão com o SQL Server Native Client
Blogues:
Conteúdo adicional