O que é um grupo de disponibilidade independente?

Aplica-se a: SQL Server 2022 (16.x)

Um grupo de disponibilidade independente é um AG (grupo de disponibilidade Always On) que oferece suporte a:

  • Gerenciamento de objetos de metadados (usuários, logons, permissões, trabalhos do SQL Agent etc.) no nível do AG, além do nível da instância.

  • Bancos de dados do sistema independentes especializados no AG.

Este artigo detalha as semelhanças, diferenças e funcionalidades dos AGs independentes.

Visão geral

Os AGs geralmente são formados por um ou mais bancos de dados de usuário destinados a operar como um grupo coordenado que são replicados em alguns nós em um cluster. Quando houver uma falha no nó ou na integridade do SQL Server no nó que hospeda a cópia primária, o grupo de bancos de dados será movido como uma unidade para outro nó de réplica no AG. Todos os bancos de dados de usuário permanecem em sincronia em todas as réplicas do AG, em modo síncrono ou assíncrono.

Isso funciona bem para aplicativos que interagem apenas com esse conjunto de bancos de dados de usuário, mas há desafios quando os aplicativos também dependem de objetos como usuários, logons, permissões, trabalhos de agente etc., que são armazenados em um dos bancos de dados do sistema (master ou msdb). Para que os aplicativos funcionem de maneira suave e previsível, o administrador deve garantir manualmente que qualquer alteração nesses objetos seja duplicada em todas as instâncias de réplica no AG. Se uma nova instância for trazida para o AG, os bancos de dados poderão ser propagados de maneira automática ou manual em um processo simples, mas todas as personalizações do banco de dados do sistema deverão ser reconfiguradas na nova instância para corresponder às outras réplicas.

Os AGs independentes estendem o conceito do grupo de bancos de dados que está sendo replicado para incluir partes relevantes dos banco de dados master e msdb. Considere-o como o contexto de execução para aplicativos que usam o AG independente. A ideia é que o ambiente de AG independente inclua configurações que afetariam o aplicativo que depende deles. Assim, o ambiente de AG independente diz respeito a todos os bancos de dados com os quais o aplicativo interage, a autenticação que ele usa (logons, usuários, permissões), todos os trabalhos agendados que ele espera estar em execução e outras configurações que afetam o aplicativo.

Isso é diferente dos bancos de dados independentes, que usam um mecanismo diferente para as contas de usuário, armazenando as informações do usuário no próprio banco de dados. Os bancos de dados independentes replicam apenas logons e usuários, e o escopo do logon ou usuário replicado é limitado a esse banco de dados individual (e às respectivas réplicas).

Por outro lado, em um AG independente, é possível criar usuários, logons, permissões etc no nível do AG e eles serão automaticamente consistentes com as réplicas do AG, além de consistentes com os bancos de dados desse AG independente. Com isso, o administrador não precisa fazer essas alterações manualmente.

Diferenças

Há algumas diferenças práticas a serem consideradas ao trabalhar com AGs independentes, como a criação de bancos de dados do sistema independentes e a imposição de conexão no nível do AG independente, em vez de se conectarem no nível da instância.

Bancos de dados do sistema independentes

Cada AG independente tem bancos de dados do sistema próprios master e msdb, nomeados de acordo com o nome do grupo de disponibilidade. Por exemplo, no AG independente MyContainedAG, você terá bancos de dados chamados MyContainedAG_master e MyContainedAG_msdb. Esses bancos de dados do sistema são automaticamente propagados para novas réplicas e as atualizações são replicadas para esses eles, assim como qualquer outro banco de dados em um grupo de disponibilidade. Isso significa que, se você adicionar um objeto, como um logon ou um trabalho de agente, enquanto estiver conectado ao AG independente, quando o AG independente fizer failover para outra instância, conectando-se ao AG independente, você ainda verá os trabalhos do agente e poderá se autenticar usando o logon criado no AG independente.

Importante

Os AGs independentes são um mecanismo para manter as configurações do ambiente de execução consistentes entre as réplicas de um grupo de disponibilidade. Eles não representam um limite de segurança. Não há nenhum limite que evite que uma conexão com um AG independente acesse bancos de dados fora do AG, por exemplo.

Os bancos de dados do sistema em um AG independente recém-criado não são cópias da instância em que o comando CREATE AVAILABILITY GROUP é executado. Eles são modelos inicialmente vazios e sem dados. Imediatamente após a criação, as contas de administrador na instância que cria o AG independente são copiadas no AG independente master. Dessa forma, o administrador pode fazer logon no AG independente e definir o resto da configuração.

Se você tiver criado usuários locais ou configurações na instância, eles não serão exibidos automaticamente quando você criar os bancos de dados do sistema independentes e eles não ficarão visíveis quando você se conectar ao AG independente. Uma vez que o banco de dados de usuário tenha sido associado a um AG independente, ele se tornará imediatamente inacessível para esses usuários. Você precisa recriá-los manualmente nos bancos de dados do sistema independentes no contexto do AG independente conectando-se diretamente ao banco de dados ou usando o ponto de extremidade do ouvinte. A exceção a isso é que todos os logons na função sysadmin na instância pai são copiados para o novo banco de dados mestre específico master do AG.

Restaurar um bancos de dados do sistema independente

É possível restaurar um banco de dados do sistema independente usando uma das duas maneiras diferentes a seguir.

  • Restaure um banco de dados independente usando uma réplica secundária:

    1. Restaure os bancos de dados independentes master e msdb em uma instância de servidor que hospede a réplica secundária, usando RESTORE WITH NORECOVERY para cada operação de restauração. Para obter mais informações, consulte Preparar um banco de dados secundário manualmente para grupos de disponibilidade Always On.

    2. Una cada banco de dados independente ao grupo de disponibilidade. Para obter mais informações, confira Unir um banco de dados secundário a grupos de disponibilidade Always On.

  • Restaure um banco de dados independente descartando o AG independente:

    1. Descarte o AG independente.

    2. Restaure os bancos de dados independentes master e msdb em cada uma das instâncias que participam do AG independente.

    3. Recrie o AG independente usando nós e nome originais, usando a sintaxe WITH (CONTAINED, REUSE_SYSTEM_DATABASES).

Conectar (ambiente independente)

É importante distinguir a diferença entre conectar-se à instância e ao AG independente. A única maneira de acessar o ambiente do AG independente é conectar-se ao ouvinte do AG independente ou conectar-se a um banco de dados que esteja no AG independente.

"Persist Security Info=False;
User ID=MyUser;Password=*****;
Initial Catalog=MyContainedDatabase;
Server=MyServer;"

Em que MyContainedDatabase é um banco de dados dentro do AG independente com o qual você deseja interagir.

Isso significa que você deve criar um ouvinte para que o AG independente use efetivamente um AG independente. Se você se conectar a uma das instâncias que hospedam o AG independente em vez de diretamente ao grupo de disponibilidade independente por meio do ouvinte, você estará no ambiente da instância, e não no AG independente.

Por exemplo, se o grupo de disponibilidade MyContainedAG estiver hospedado no servidor SERVER\MSSQLSERVER e, em vez de se conectar ao ouvinte do MyContainedAG_Listener, você se conectar à instância usando SERVER\MSSQLSERVER, estará no ambiente da instância e não no ambiente de MyContainedAG. Isso significa que você estará sujeito ao conteúdo (usuários, permissões, trabalhos etc.) dos bancos de dados do sistema da instância. Para acessar o conteúdo encontrado nos bancos de dados do sistema independentes do AG independente, conecte-se ao ouvinte do AG independente (MyContainedAG_Listener, por exemplo) em vez disso. Quando você estiver conectado à instância por meio do ouvinte do AG independente, ao interagir com master, na realidade, você será redirecionado para o banco de dados independente master (por exemplo, MyContainedAG_master).

Roteamento somente leitura e grupos de disponibilidade independentes

Se você configurou o encaminhamento somente leitura para redirecionar conexões com a intenção de leitura para uma réplica secundária (confira Configurar o roteamento somente leitura para um grupo de disponibilidade Always On) e deseja se conectar usando um logon criado apenas no AG independente, há algumas considerações adicionais:

  • Você precisa especificar um banco de dados que faça parte do AG independente na cadeia de conexão
  • O usuário especificado na cadeia de conexão deve ter permissão para acessar os bancos de dados no AG independente.

Por exemplo, na cadeia de conexão abaixo, em que AdventureWorks é um banco de dados dentro do AG independente que tem MyContainedListener e em que MyUser é um usuário definido no AG independente e nenhuma das instâncias participantes:

"Persist Security Info=False;
User ID=MyUser;Password=*****;
Initial Catalog=AdventureWorks;
Server=MyContainedListener;
ApplicationIntent=ReadOnly"

Essa cadeia de conexão conectaria à réplica secundária para leitura que faz parte da configuração do Roteamento Somente Leitura e você estaria no contexto do AG independente.

Diferenças entre conectar-se à instância e conectar-se ao grupo de disponibilidade independente

  • Quando conectados ao AG independente, os usuários só verão bancos de dados no AG independente, além de tempdb.
  • No nível da instância, o AG independente master e os nomes msdb são [contained AG]_master e [contained AG]_msdb. No AG independente, os nomes são master e msdb.
  • A ID do banco de dados do AG independente master é 1 dentro do AG independente, mas quando conectado à instância, ela seria diferente.
  • Embora os usuários não vejam bancos de dados fora do AG independente em sys.databases quando conectados em uma conexão de AG independente, eles poderão acessar esses bancos de dados por três nomes de parte ou por meio do comando USE.
  • A configuração do servidor por meio de sp_configure pode ser lida da conexão do AG independente, mas só pode ser gravada no nível da instância.
  • Nessas conexões de AG independente, o sysadmin é capaz de executar operações no nível da instância, como desligar o SQL Server.
  • A maioria das operações no nível do banco de dados, do ponto de extremidade ou do AG só pode ser executada de conexões de instância, e não de conexões do AG independente.

Interações com outros recursos

Há considerações adicionais ao usar determinados recursos com AGs independentes e há alguns recursos que não têm suporte no momento.

Sem suporte

No momento, não há suporte para os seguintes recursos do SQL Server com um AG independente:

  • Replicação do SQL Server de qualquer tipo (transacional, mesclagem, instantâneo e assim por diante).
  • Grupos de disponibilidade distribuídos.
  • Envio de logs em que o banco de dados de destino está no AG independente. Há suporte para o envio de logs com o banco de dados de origem no AG independente.

captura de dados de alterações

A CDA (captura de dados de alterações) é implementada como trabalhos do SQL Agent, o qual precisa estar em execução em todas as instâncias com réplicas no AG independente.

Para usar a captura de dados de alterações com um AG independente, conecte-se ao ouvinte do AG ao configurar a CDA para que os metadados dela sejam configurados usando os bancos de dados do sistema independentes.

Envio de logs

O envio de logs poderá ser configurado se o banco de dados de origem estiver no AG independente. No entanto, não há suporte para um destino de envio de logs em um AG independente. Além disso, há uma etapa extra para modificar o trabalho de envio de logs após a configuração da CDA.

Para configurar o envio de logs com um AG independente, execute estas etapas:

  1. Conecte-se ao ouvinte do AG independente.
  2. Configure o envio de logs como faria normalmente.
  3. Depois que o trabalho de envio de logs for configurado, altere o trabalho para se conectar ao ouvinte do AG independente antes de fazer um backup.

TDE (Transparent Data Encryption)

Para usar a TDE (Transparent Data Encryption) com bancos de dados em um AG independente, instale manualmente a DMK (chave mestra do banco de dados) no banco de dados independente master dentro do AG independente.

Os bancos de dados que usam a TDE dependem de certificados no banco de dados master para descriptografar a DEK (chave de criptografia do banco de dados). Sem esse certificado, o SQL Server não consegue descriptografar bancos de dados criptografados com TDE nem os deixar online. Em um AG independente, o SQL Server verifica os dois bancos de dados master em relação à DMK, o banco de dados master em relação à instância e o banco de dados independente master no AG independente para descriptografar o banco de dados. Se ele não conseguir localizar o certificado em nenhum dos locais, o SQL Server não conseguirá fazer com que o banco de dados fique online.

Para transferir a DMK do banco de dados master da instância para o banco de dados independente master, confira Mover um banco de dados protegido por TDE para outro SQL Server, focando principalmente as partes em que a DMK é transferida do servidor antigo para o novo.

Pacotes SSIS e planos de manutenção

O uso de pacotes SSIS, incluindo planos de manutenção, não é suportado com grupos de disponibilidade contidos.

Alterações de DDL

As únicas alterações DDL estão no fluxo de trabalho CREATE AVAILABILITY GROUP. Há duas novas cláusulas WITH:

<with_option_spec> ::=
CONTAINED |
REUSE_SYSTEM_DATABASES

CONTAINED

Isso especifica que o AG que está sendo criado deve ser um AG independente.

REUSE_SYSTEM_DATABASES

Essa opção só é válida para AGs independentes e especifica que o AG recém-criado deve reutilizar bancos de dados do sistema independentes existentes para um AG independente anterior de mesmo nome. Por exemplo, se você tivesse um AG independente com o nome MyContainedAG e quisesse descartá-lo e recriá-lo, poderia usar essa opção para reutilizar o conteúdo dos bancos de dados do sistema independente independentes originais.

Alterações de DMV

Há duas adições às DMVs relacionadas aos AGs independentes:

  • O DMV sys.dm_exec_sessions tem uma coluna adicionada: contained_availability_group_id
  • A exibição de catálogo sys.availability_groups tem a coluna adicionada: is_contained