Por dentro da Microsoft.comGuia de introdução ao espelhamento do banco de dados

Saleem Hakani

Se o seu banco de dados fica offline, você provavelmente começa a chorar, não é? No entanto, se estiver usando o SQL Server 2005 com SP1, o recurso de espelhamento do banco de dados pode impedir um desastre. Esta nova tecnologia de alta disponibilidade permite manter um modo de espera ativo do banco de dados para ser usado quando o servidor do banco de dados de produção ficar

indisponível por qualquer motivo. O recurso de espelhamento do banco de dados funciona através da transferência dos registros de log da transação de um banco de dados do servidor primário para o secundário, que serve como o modo de espera ativo. Com o espelhamento do banco de dados, as alterações de dados são registradas no log de transação antes que qualquer alteração nas páginas de dados reais seja feita, assim como as atualizações do SQL Server™ sempre funcionam. Os registros de log são colocados primeiramente no buffer de log do banco de dados principal, na memória, e, em seguida, persistidos no disco. Esses logs de transação são copiados e reproduzidos no banco de dados do servidor de espelhamento. Com isso, as alterações do banco de dados do servidor principal são duplicadas no banco de dados de espelhamento. Observe que apenas o banco de dados principal é acessível às conexões do cliente. Quando o banco de dados principal recebe alterações solicitadas pelos clientes, o servidor principal envia essas alterações ativas para o servidor de espelhamento; o espelhamento não toma nenhuma dessas decisões. Quando o espelhamento do banco de dados está ativado e o banco de dados principal falha, o banco de dados espelhado fica disponível.

Mecânica do espelhamento do banco de dados

O espelhamento do banco de dados funciona com todos os hardwares padrão que suportam o SQL Server 2005 e assegura que não haja nenhuma perda de dados caso um banco de dados falhe. O banco de dados de espelhamento sempre será atualizado com a transação atual que está sendo processada no servidor do banco de dados primário. A Figura 1 ilustra o fluxo de dados.

Se o servidor principal falhar, você pode ter certeza de que o servidor de espelhamento tem uma cópia instantânea exata do banco de dados principal e também da última transação ocorrida. Assim, o espelhamento está sempre pronto para assumir a função do servidor principal.

Figure 1 Data replication to the mirror

Figure 1** Data replication to the mirror **(Clique na imagem para aumentar a exibição)

Na topologia do espelhamento do banco de dados, será necessário um terceiro servidor chamado testemunha se desejar ativar o failover automático do principal para o servidor de espelhamento e vice-versa. O servidor-testemunha pode ser qualquer computador que suporte o SQL Server 2005.

Modos operacionais

A topologia de espelhamento de banco de dados utilizada depende da segurança da transação e dos modos operacionais escolhidos. Os modos operacionais suportados pelo espelhamento do banco de dados incluem os de alta segurança (com ou sem failover automático) e de alto desempenho.

Alta segurança (com failover automático) - Esse modo suporta a máxima disponibilidade do banco de dados com transferência de dados síncrona e failover automático no banco de dados de espelhamento. Esse módulo operacional é mais útil quando há uma comunicação rápida e muito confiável entre os servidores principal e de espelhamento e o failover automático é necessário para um único banco de dados. Nesse esquema, o banco de dados principal aguarda a ocorrência de uma transação até receber uma mensagem do servidor de espelhamento informando que este fortaleceu o log da transação no disco.

Alta segurança (sem failover automático) - Esse modo suporta a máxima disponibilidade do banco de dados com transferência de dados síncrona, mas sem failover automático no banco de dados de espelhamento. Nesse modo, se a instância do servidor de espelhamento ficar indisponível, a instância do servidor principal continuará a funcionar, mas não será capaz de espelhar os dados. Se o servidor principal falhar, o espelhamento do banco de dado será suspenso, mas será possível forçar o failover do serviço manualmente.

Alto desempenho - Nesse modo operacional, a transferência de dados é assíncrona. O servidor principal não aguarda um reconhecimento do espelhamento assim como nos dois modos acima. O servidor de espelhamento faz o melhor para manter-se informado sobre o servidor principal, mas não é garantido em nenhum momento e todas as transações mais recentes do principal serão fortalecidas no log de transação do servidor de espelhamento. Se o servidor principal falhar, o espelhamento do banco de dado será suspenso, mas será possível forçar o failover do serviço manualmente.

Estabelecendo a base

A configuração do espelhamento do banco de dados é um processo simples se for estabelecida uma base sólida com as práticas recomendadas:

Edição do servidor Verifique se os servidores principal e de espelhamento estão executando a mesma edição do SQL Server 2005; é possível usar a edição Standard ou Enterprise.

Disponibilidade do servidor-testemunha Se pretende usar a alta segurança com failover automático, verifique se o servidor-testemunha está disponível e se o SQL Server 2005 (qualquer edição) está instalado. O servidor-testemunha pode ser executado em qualquer sistema de computador confiável que suporte o SQL Server 2005.

Imagem de espelhamento Verifique se a instância do servidor de espelhamento tem trabalhos, logins, pacotes do SQL Server Integration Service (SSIS), partições de disco, locais de arquivo e configuração do servidor idênticos aos da instância do servidor principal. Configurar o servidor de espelhamento exatamente como o principal permite que o servidor de espelhamento funcione da mesma maneira do principal.

Recuperação total É importante que todos os bancos de dados que participam do espelhamento sejam configurados no modelo de recuperação TOTAL.

Master e TempDB Verifique se todas as instâncias do servidor em uma topologia de espelhamento usam o agrupamento e a página de código Master e TempDB. Ter diferentes agrupamentos e páginas de código pode causar problemas durante a configuração do espelhamento do banco de dados.

Backup Se o banco de dados a ser espelhado for grande, faça um backup completo do banco de dados primeiro e, em seguida, restaure-o na instância do servidor de espelhamento usando a opção NORECOVERY.

Planeje com antecedência Determine todos os nomes de servidor, números de porta, contas de segurança e locais onde os bancos de dados residem e registre-os. Consulte a barra lateral “Práticas recomendadas do espelhamento do banco de dados” para obter uma lista de verificação.

Após ter cuidado da base, você está pronto para lidar com a configuração do espelhamento do banco de dados em seu ambiente.

Práticas recomendadas do espelhamento do banco de dados

  1. Use servidores parceiros que tenham CPU, memória, armazenamento e capacidade de rede idênticos.
  2. Verifique se ambos têm as mesmas edições de SQL Server e do sistema operacional, pacotes de serviço e atualizações.
  3. Instale o SQL Server em diretórios e estruturas de unidade iguais nas instâncias do servidor principal e de espelhamento.
  4. Se o desempenho se tornar uma preocupação, pense em usar uma placa de interface de rede dedicada para separar o carregamento.
  5. Assim como nos servidores parceiros, verifique se as instâncias do servidor principal e de espelhamento são idênticas em relação à CPU, memória, armazenamento e capacidade de rede. Assegurar que os dois servidores tenham a mesma estrutura de diretório, o mesmo esquema de particionamento de disco e a mesma configuração do SQL Server elimina a necessidade de fazer alterações em ambos durante ou após o failover no parceiro de espelhamento.
  6. Verifique se todos os aplicativos podem conectar e executar todas as ações necessárias e se todos os logins ativos do SQL Server (e suas permissões) na instância do servidor principal também estão presentes na instância do servidor de espelhamento. É possível usar a tarefa de logins de transferências do SQL Server 2005 Integration Services para realizar isso.
  7. Copie os trabalhos, alertas, pacotes SSIS, bancos de dados de suporte, definições vinculadas do servidor, dispositivos de backup, planos de manutenção e perfis de mensagem do banco de dados do SQL Server Agent, entre outras coisas, do servidor principal para o servidor de espelhamento.
  8. Estabeleça um procedimento para que quando qualquer modificação for feita no principal (como alterações no hardware, software, configurações do SQL Server ou qualquer objeto do banco de dados), essas alterações sejam automaticamente repetidas ou replicadas e transferidas na instância do servidor de espelhamento.
  9. Realize vários failovers de teste antes de disponibilizar o espelhamento.

Configuração do espelhamento do banco de dados

Vamos configurar o espelhamento do banco de dados usando o modo operacional de alta segurança com failover automático. (Conforme mencionado anteriormente, isso significa que uma instância do servidor-testemunha é necessária). Em meu exemplo, aqui usarei os nomes de servidor e de banco de dados mostrados na Figura 2, que também especifica a função de cada servidor.

Tenha em mente que como a configuração pode afetar o desempenho enquanto o log de transação pendente é copiado do servidor principal no servidor de espelhamento, talvez seja melhor realizar a configuração inicial do espelhamento do banco de dados durante as horas de pouco movimento.

A configuração do espelhamento é feita em três etapas: criação de pontos de extremidade nos servidores participantes, backup e restauração do banco de dados principal e ativação das sessões de espelhamento em todos os servidores participantes.

Antes de estabelecer uma sessão do espelhamento do banco de dados, é necessário estabelecer o mecanismo de comunicação entre todos os servidores que participam no espelhamento do banco de dados. Para tal, crie pontos de extremidade em todos os servidores executando essa instrução em ServerA e ServerB:

Create Endpoint Mirroring_Endpoint
State= Started as TCP (Listener_Port=5001)
For Database_Mirroring (Role=Partner);

Para o ServerC (que atuará como testemunha), altere (Role=Partner) para (Role=Witness) e execute a instrução. Isso controla a porta TCP ouvida por cada instância.

Na próxima etapa, faça o backup completo do banco de dados seguido pelo backup de log do banco de dados DBM_Demo do servidor principal e, em seguida, restaure-o na instância do servidor de espelhamento usando a opção NORECOVERY. (Usar NORECOVERY assegura que o banco de dados de espelhamento esteja no estado de restauração para que os logs de transação possam ser aplicados.)

Eis a instrução T-SQL para realizar o backup completo do banco de dados DBM_Demo do ServerA (a instância do servidor principal):

Backup Database DBM_Demo to DISK='E:\MSSQL\Bak\DBM_Demo_FULL.bak';

Se alguma alteração for feita no banco de dados após a realização do backup completo, talvez seja necessário fazer o backup do log do banco de dados; caso contrário, isso não é necessário.

Se for necessário, use a seguinte instrução T-SQL para realizar o backup do log do banco de dados DBM_Demo do ServerA:

Backup Log DBM_Demo to Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak';

Após realizar todos os backups, mova os arquivos de backup para o ServerB ou para um local compartilhado para que seja possível restaurá-los no ServerB. Depois de fazer isso, restaure também qualquer transação (os backups de log realizados desde o último backup completo do banco de dados do ServerA).

É possível usar a seguinte instrução T-SQL para restaurar os backups completo e de log no ServerB usando a opção NORECOVERY:

--Restore full database backup on the mirror --server instance
Restore Database DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_FULL.bak' with NORECOVERY;

Por fim, use a seguinte instrução T-SQL para restaurar o backup de log no servidor de espelhamento usando a opção NORECOVERY:

Restore Log DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak' with NORECOVERY;

Quando terminar de restaurar todos os backups, você estará pronto para realizar a etapa final, ativando a sessão de espelhamento do banco de dados em todos os servidores participantes.

A configuração da sessão de espelhamento do banco de dados requer um endereço de rede do seguidor para cada instância. Esse endereço deve identificar a instância fornecendo um endereço de sistema e o número da porta na qual a instância está ouvindo. A sintaxe do endereço de rede do servidor é similar a:

TCP://<System-address>:<port>

<System-address>: é um nome de domínio totalmente qualificado ou um endereço IP; para obter essa informação, execute IPCONFIG no computador local de um prompt de comando.

<Port> foi estabelecida durante a criação dos pontos de extremidade.

É possível iniciar a sessão de espelhamento do banco de dados no ServerB do seguinte modo:

Alter Database DBM_Demo
Set Partner= 'TCP://ServerA.com:5001';

Em seguida, execute a seguinte instrução T-SQL para iniciar a sessão no ServerA:

Alter Database DBM_Demo
Set Partner='TCP://ServerB.com:5001';

Finalmente, ative a sessão de espelhamento no ServerC (servidor-testemunha) do seguinte modo:

Alter Database DBM_Demo
Set Witness='TCP://ServerC.com:5001';

O espelhamento do banco de dados agora está pronto para ser executado em seu ambiente. Qualquer objeto adicionado ou modificado no banco de dados DBM_Demo será transferido para a cópia do ServerB. No entanto, se o banco de dados do ServerA ficar indisponível, um failover pode ocorrer, alterando a função do banco de dados espelhado para a função principal.

Agora que o espelhamento do banco de dados está ativado e em execução, você sempre terá um modo de espera ativo pronto se seu banco de dados de produção falhar.

Saleem Hakani é engenheiro sênior de banco de dados da Microsoft com mais de 14 anos de experiência em sistemas de banco de dados. Ele fundou e lidera a comunidade Microsoft SQL e é responsável por fornecer padrões e automatização ao SQL Server através da organização do Windows Live. Saleem possui os certificados MCTS, MCDBA e MCSA. Para entrar em contato com ele, envie um email para Saleem@sqlcommunity.net.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..