Anda di halaman 1dari 14

Database Mirroring - Configurando Alta Disponibilidade no Banco de Dados

O Database Mirroring uma feature disponvel no SQL Server 2005/2008 que permite a voc implementar alta disponibilidade no nvel de banco de dados. Na prtica ela permite que voc tenha uma cpia idntica do seu banco de dados de produo em um outro servidor. Neste artigo descrevo em detalhes todos os passos e requisitos necessrio para configurar o database mirroring em um banco de dados, bem como os erros mais comuns que voc pode encontrar durante a configurao. O database mirroring com certeza uma das mais interessantes features disponveis no SQL Server 2005/2008. Ele foi desenvolvido tendo em mente fornecer recursos de alta disponibilidade para os databases das pequenas e mdias empresas. Alguns dos seus principais benefcios so: 1) O failover automtico e realizado em menos de 3 segundos isso significa que se o servidor principal cair, o servidor espelho passar a atender as requisies dos clientes em at 3 segundos. Logicamente que esse tempo est diretamente relacionado s condies da sua rede e do seu hardware. 2) No necessrio hardwares especializados Voc pode configurar o database mirroring utilizando qualquer hardware padro do mercado e tambm no necessrio storage de discos externo. 3) Ele auto monitorvel na sesso de database mirroring existe um parceiro conhecido como witness server, ele responsvel por monitorar o mirror e fornecer o failover automtico no caso de problemas na base de dados principal. 4) A alta disponibilidade realizada no nvel de database. 5) O redirecionamento dos clientes automtico e transparente. 6) No possui um limite de distncia entre os ns que compem o mirror. Bom, claro que o database mirroring tambm possui algumas limitaes como: 1) Suporte a full-text limitado voc pode espelhar um database configurado para full-text da mesma forma que os demais, o problema que aps o incio do mirroring os subseqentes backups de log no contero as possveis alteraes realizadas nos catlogos do full-text. Para mais informaes sobre essa limitao e como resolv-la, consulte o tpico Database Mirroring and Full-Text Catalogs no Books Online do SQL Server 2005/2008. 2) A aplicao precisa ser escrita de forma a dar suporte a database mirroring normalmente uma simples alterao na string de conexo. Para mais informaes consulte o tpico Connecting Clients to a Mirrored Database no Books Online do SQL Server 2005/2008. 3) Enquanto a sesso de database mirroring estiver ativa no permitida a realizao de backup/restore da base espelho. 4) Enquanto a sesso de database mirroring estiver ativa, a base espelho no estar disponvel para as aplicaes. Isso porque a base ficar em status de recovering. Falando basicamente, o database mirroring envolve duas cpias de um mesmo banco de dados que reside em diferentes servidores ou instncias do SQL Server 2005/2008. Um ponto importante a ser observado que durante a sesso de database mirroring, apenas uma cpia do banco de dados ficar disponvel para as aplicaes, esta conhecida como principal database. Na prtica, o espelhamento envolve aplicar o log de cada transao (INSERT, UPDATE, DELETE) realizada no principal database na outra cpia do banco de dados, conhecida como mirror database. Embora o processo possa parecer semelhante ao j conhecido Log Shipping, a grande diferena que enquanto o log shipping realiza as atualizaes em bloco de transaes, atravs de um backup/restore do log de transao do database, no database mirroring as transaes so atualizadas de modo instantneo, sem necessitar de um backup/restore do log de transao do database. O principal e o mirror databases devem residir em servidores ou instncias diferentes e trabalham como

parceiros em uma sesso conhecida como database mirroring session. O parceiro que armazena o principal database conhecido como principal server e o parceiro que armazenada o mirror database conhecido como mirror server. A configurao mais simples de database mirroring envolve apenas duas instncias do SQL Server o principal e o mirror server. No entanto, caso voc deseje configurar o database mirroring para suportar failover automtico, ento uma terceira instncia ser necessria. Essa instncia conhecida como witness server. A figura abaixo mostra como ficaria uma sesso de database mirroring com dois servidores e uma sesso envolvendo tambm um witness server.

Modos de Operao Uma sesso de database mirroring pode ser configurada para operar em trs diferentes modos de operao: High Availability, High Protection ou High Performance. O modo de operao deve ser selecionado de acordo com o nvel de segurana desejado para as transaes (transaction safety) e pode trabalhar em modo de transferncia sncrono ou assncrono. O modo exato depender da configurao do transaction safety e se a sesso possuir ou no um witness server. A tabela abaixo resume as possveis configuraes para o modo de operao:
Modo operao High Availability High Protection High Performance Modo Transaction Safety Transferncia FULL FULL OFF Sncrono Sncrono Assncrono Requer Witness Sim No No Failover Automtico ou Manual Manual Forado

High Availability Como podemos observar na figura acima, o modo de operao high availability (alta disponibilidade) requer que o transaction safety seja definido como FULL. Este tambm o nico modo que oferece failover

automtico e consequentemente requer a presena de um witness server. O propsito do witness server simplesmente monitorar o status da sesso e fornecer a capacidade de failover automtico. Em casos de indisponibilidade do principal server, ocorrer um processo conhecido como role switching. Nesse momento o mirror server assume o papel de principal server e disponibilizar sua base como principal database. Quando o principal server original voltar a ficar disponvel, este assumir o papel de mirror server e seu database se tornar o novo mirror database. O modo high availability opera no modo de transferncia sncrono, isso garante que as transaes sempre sero efetivadas em ambos os parceiros antes de enviar um retorno ao cliente. Quando operando em modo sncrono o principal server dever aguardar uma resposta do mirror server dizendo que a transao foi efetivada com sucesso no mirror database e isso pode fazer com que a performance do principal server seja afetada pela capacidade do mirror server. No geral, esse modo de operao deve ser usado quando se possui um bom link de comunicao entre os parceiros. Voc deve estar se perguntando: Mas o que acontece se eu perder a comunicao entre o principal e o mirror server? Nesse caso, se o principal server estiver se comunicando normalmente com o witness server, ele continuar tratando as requisies dos clientes sem aguardar por um retorno (acknowledgement) do mirror server. Durante esse perodo o principal server armazenar as transaes em uma fila e as enviar ao mirror server assim que o mesmo estiver disponvel. O problema que se o tempo de indisponibilidade do mirror server for muito longo, essa fila pode estourar e alguns dados podem ser perdidos. Por outro lado, se o principal server perder a comunicao tambm com o witness server, ele deixar de responder os clientes. Isso porque ele no ter como confirmar se continua sendo o principal server ou no. High Protection O modo de operao high protection tambm requer que o transaction safety seja definido como FULL. Ele garante que no haver perda de dados, mas como no exige a presena de um witness server, nos casos de indisponibilidade do principal server o failover dever ser executado de forma manual. Em high protection mode, se ocorrer problemas de comunicao entre o principal e mirror server, o principal server deixar de responder os clientes. Isso porque ele no ter como confirmar se continua sendo o principal server ou no. High Performance Esse o mais rpido dos modos de operao, pois trabalha em modo assncrono. Ou seja, a transao efetivada no principal server e um retorno dado ao cliente mesmo sem esperar por uma resposta do mirror server dizendo se a transao foi efetivada com sucesso no mirror database ou no. Ele no requer a presena de um witness server e o nico tipo de failover permitido o "forado". O failover forado faz uma recuperao imediata do mirror database podendo envolver perda de dados nos casos onde o mirror server ainda no tiver recebido o log de transao do principal server. Em high performance mode, se ocorrer problemas de comunicao entre o principal e o mirror server, o principal server continuar tratando as requisies dos clientes e enfileirar as transaes para posterior envio ao mirror server. Pr-requisitos Antes de iniciar a configurao do database mirroring alguns pontos importantes devem ser observados: 1. Certifique-se que os dois ns do mirror (principal e mirror server) estejam com a mesma edio do SQL

Server 2005. As edies suportadas so Standard Edition ou Enterprise Edition. 2. Se o failover automtico um requisito para sua soluo de mirroring, voc dever configurar uma terceira mquina ou instncia do SQL Server 2005 como um witness server. O witness pode ser executado em qualquer estao que suporte o SQL Server 2005 Enterprise, Standard, Workgroup ou Express Edition. 3. Certifique-se que existe comunicao entre os servidores ou instncias envolvidas na configurao. 4. Se os servios do SQL Server nos diferentes servidores ou instncias esto sendo iniciados com diferentes contas de usurios de domnio ou ainda, os servidores esto fora de um domnio, ser preciso criar no database master de cada instncia um login para a conta de usurio que inicia o SQL Server das outras instncias. O ideal que ambas as instncias sejam iniciadas com uma mesma conta de usurio de domnio. Para mais informaes, consulte o link How to: Allow Database Mirroring Network Access Using Windows Authentication (Transact-SQL) no Books Online do SQL Server 2005. 5. O principal database deve ter seu recovery model configurado como FULL. 6. O mirror database deve ser iniciado a partir de um restore do principal database com a opo WITH NORECOVERY. 7. O mirror database deve ter o mesmo nome que o principal database. 8. Certifique-se que existe logins no mirror server para todos os usurios utilizados no principal database. 9. Todas as instncias do SQL Server 2005 (inclusive o Witness) devem estar atualizar com o Service Pack 1 ou mais recente Nota: importante lembrar que por default a verso RTM do SQL Server 2005 (build 9.0.1399) no oferece suporte ao database mirroring. Isso significa que embora ele possa ser habilitado atravs da ativao do trace flag 1400, oficialmente a Microsoft s oferece suporte a database mirroring a partir do SQL Server 2005 SP1 ou superior. A recomendao que database mirroring no seja configurado em ambientes de produo que no possuam o SQL Server 2005 SP1 ou superior. Configurando o Database Mirroring Nota: Esta configurao foi executada no SQL Server 2005, mas a funcionaldade de Database Mirroring tambm est disponvel no SQL Server 2008. Agora que voc j sabe como funciona o database mirroring, vamos ao que realmente interessa, a configurao passo-a-passo. Para este artigo estarei utilizando como exemplo a base de dados Pubs. Em um ambiente de produo, o ideal termos as instncias do SQL Server 2005 instaladas em mquinas diferentes, podendo o witness server ser configurado em qualquer estao com Windows XP SP2 e SQL Server Express Edition. Se voc quiser instalar a instncia do witness server em um dos servidores principais, a sugesto que este seja instalado no servidor que alocar a instncia do mirror server. Para configurar o database mirroring no SQL Server 2005, siga os passos descritos abaixo: 1. No Object Explorer, selecione o principal server, expanda databases e clique com o boto direito sobre o database que ser espelhado (principal database). Selecione properties e na pgina Options, altere seu recovery model para Full. Se preferir, execute o script abaixo no Query Editor do SQL Server Management Studio. ALTER DATABASE Pubs SET RECOVERY FULL 2. Faa um backup full e um backup de log do principal database. Se preferir, execute o script abaixo no Query Editor. Nota: O ideal que o principal database fique bloqueado at a concluso da configurao. Isso evitar alteraes no log de transao aps a realizao dos backups.

-- Rodar no Principal Server BACKUP DATABASE Pubs TO DISK='C:/Backup/Pubs_BKP.BAK' WITH INIT GO BACKUP LOG Pubs TO DISK='C:/Backup/Pubs_TRL.BAK' WITH INIT Nota: Durante todo este artigo estarei utilizando a barra (/) para a separao do diretrio. 3. Copie os backups para o mirror server e restaure o backup full no mirror server utilizando a opo WITH NORECOVERY. --Rodar no Mirror Server RESTORE DATABASE Pubs FROM DISK='C:/Backup/Pubs_BKP.BAK' WITH NORECOVERY A recomendao que quando possvel o caminho no mirror server seja idntico ao caminho do principal server (incluindo o nome das letras dos discos). Se o caminho for diferente, use a opo MOVE durante o restore informando o caminho onde os arquivos de dados e log devero ser armazenados. --Rodar no Mirror Server RESTORE DATABASE Pubs FROM DISK='C:/Backup/Pubs_BKP.BAK' WITH REPLACE,NORECOVERY, MOVE 'Pubs_Data' TO 'G:/Dados/Pubs_Data.mdf', MOVE 'Pubs_Log' TO 'G:/Dados/Pubs_Log.ldf' Feito isso, o mirror database ficar em status de Restoring, indicando que o database est pronto para receber as transaes do principal database.

4. No principal server, expanda Databases e selecione o principal database. Clique com o boto direito do mouse sobre o mesmo e seleciona All TasksMirror....

5. Clique sobre o boto Configure Security.... 6. Na janela Configure Database Mirroring Security Wizard, informe se voc quer configurar a segurana de forma a incluir um witness server e clique em Next. Nota: Lembre-se que para utilizar failover automtico a configurao de um witness server obrigatria. 7. Na janela Choose Server to Configure, selecione os servidores onde as configuraes de segurana devero ser salvas. Se estiver utilizando um witness server, marque as trs opes e clique em Next. 8. Na janela Principal Server Instance, especifique as informaes para o endpoint do principal server. Um endpoint um objeto SQL Server que permite ao SQL Server se comunicar atravs da rede. Quando configurando database mirroring, uma instncia requer seu prprio e dedicado database mirroring endpoint. Ele usado exclusivamente para receber comunicao de database mirroring dos demais parceiros que compem o mirror (o mirror e witness server).

Nota: Se o principal, mirror e witness servers so instncias SQL Server em um mesmo servidor fsico, os endpoints para cada uma das instncias devem utilizar nmero de portas diferentes (exemplo 5022, 5023 e 5024). Se estiver utilizando diferentes servidores para cada uma das instncias, a recomendao utilizar a porta default 5022. Especifique tambm se os dados enviados atravs do endpoint devero ou no ser criptografados. 9. Na janela Mirror Server Instance, selecione o servidor que ser o mirror server. Ao selecionar o servidor ser apresentada a janela Connect to Server, a qual permite configurar uma conexo com o servidor. Se o mirror server e o principal server estiverem no mesmo domnio do Windows, a recomendao que se utilize Windows Authentication, se estiverem em domnios diferentes, utilize SQL Authentication e entre com um login e senha do SQL Server (Por exemplo o login sa).

10. Na janela Witness Server Instance, selecione o servidor que ser o witness server. Esta configurao somente ser necessria se optar por configurar o failover automtico.

11. Ao clicar em Finish ser apresentado um sumrio das configuraes. 12. Clique em Finish para concluir o processo de configurao. 13. A janela Configuring Endpoint apresenta o status final da configurao. Se nenhum problema tiver ocorrido, voc dever ter o status de sucesso para a configurao dos endpoints das trs instncias. Clique em close. 14. Ao clicar em Close, a mensagem abaixo ser apresentada indicando que o database mirroring foi configurado com sucesso.

15. D volta janela principal temos algo como a janela abaixo. Clique em Start Mirroring para iniciar a sesso de database mirroring. Nota: Antes de clicar em Start Mirroring a recomendao executar um backup de transao do principal database e restaur-lo no mirror database para sincronizar os dados do log. Caso ao clicar em Start Mirroring seja apresentada a mensagem de erro 1478, restaure o backup de transao realizado no passo 3.

Configurando o Database Mirroring via Transact-SQL Para aqueles que preferem utilizar a linguagem Transact-SQL, tambm possvel configurar o database mirroring utilizando T-SQL. Aps certificar-se de que todos os requisitos foram satisfeitos, incluindo a ativao do trace flag 1400 para a verso do SQL Server 2005 sem o SP1 (build 9.0.1399), siga os passos abaixo para configurar o database mirroring via T-SQL. 1. Na guia Registered Servers do SQL Server Management Studio, clique com o boto direito sobre o principal server (servidor que possui o database a ser espelhado) e selecione Connect|New Query. Altere o recovery model do principal database para FULL. -- Rodar no Principal Server ALTER DATABASE Pubs SET RECOVERY FULL 2. Faa um backup Full e um backup de log do principal database.

-- Rodar no Principal Server BACKUP DATABASE Pubs TO DISK='C:/Backup/Pubs_BKP.BAK' WITH INIT GO BACKUP LOG Pubs TO DISK='C:/Backup/Pubs_TRL.BAK' WITH INIT 3. Copie os backups para o mirror server e restaure o backup full no mirror server utilizando a opo WITH NORECOVERY. --Rodar no Mirror Server RESTORE DATABASE Pubs FROM DISK='C:/Backup/Pubs_BKP.BAK' WITH REPLACE,NORECOVERY Se o caminho (incluindo o nome das letras dos discos) no mirror server for diferente do caminho do principal server, utilize a opo MOVE durante o restore. --Rodar no Mirror Server RESTORE DATABASE Pubs FROM DISK='C:/Backup/Pubs_BKP.BAK' WITH REPLACE,NORECOVERY, MOVE 'Pubs_Data' TO 'G:/Dados/Pubs_Data.mdf', MOVE 'Pubs_Log' TO 'G:/Dados/Pubs_Log.ldf' 4. Crie os endpoints no principal server, mirror server e witness server. Lembrando que a criao de um endpoint no witness server somente necessria se pretende configurar o database mirroring como High Availability. -- Rodar no Principal Server IF EXISTS (SELECT name FROM sys.database_mirroring_endpoints WHERE name='endpoint_mirroring') DROP ENDPOINT endpoint_mirroring GO CREATE ENDPOINT endpoint_mirroring STATE = STARTED AS TCP ( LISTENER_PORT = 5022 ) FOR DATABASE_MIRRORING (ROLE=PARTNER); GO --Rodar no Mirror Server IF EXISTS (SELECT name FROM sys.database_mirroring_endpoints WHERE name='endpoint_mirroring') DROP ENDPOINT endpoint_mirroring GO CREATE ENDPOINT endpoint_mirroring STATE = STARTED AS TCP ( LISTENER_PORT = 5022 ) FOR DATABASE_MIRRORING (ROLE=PARTNER); GO --Rodar no Witness Server IF EXISTS (SELECT name FROM sys.database_mirroring_endpoints WHERE name='endpoint_mirroring') DROP ENDPOINT endpoint_mirroring GO CREATE ENDPOINT endpoint_mirroring STATE = STARTED

AS TCP ( LISTENER_PORT = 5022 ) FOR DATABASE_MIRRORING (ROLE=WITNESS); GO Depois de preparado o mirror database e criado os endpoints em cada um dos servidores ou instncias do SQL Server 2005, podemos ento iniciar a criao de uma sesso de database morroring. Para iniciar uma sesso de database mirroring, siga os passos descritos abaixo: 1. Certifique-se de que os endpoints foram criados e iniciados com sucesso em cada um dos servidores ou instncias. Para isso, utilize o seguinte T-SQL script. SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints 2. Restaure o backup de log do principal database sobre o mirror database. Esse procedimento necessrio para sincronizar o log de transao do principal database com o do mirror database. -- Rodar no Mirror Server RESTORE LOG Pubs FROM DISK='C:/Backup/Pubs_TRL.BAK' WITH NORECOVERY 3. Configure o principal server como um parceiro do mirror server. Conecte-se ao query editor no mirror server e execute: -- Rodar no Mirror Server USE master GO ALTER DATABASE Pubs SET PARTNER = 'TCP://SERVER01.contoso.com:5022' Neste exemplo, SERVER01 o nome fsico do meu principal server e contoso.com o nome do meu domnio. Se preferir voc pode usar tambm o endereo IP do servidor. 4. Configure o mirror server como um parceiro do principal server, para isso, conecte-se ao query editor no principal server e execute: -- Rodar no Principal Server USE master GO ALTER DATABASE Pubs SET PARTNER = 'TCP://SERVER02.contoso.com:5022' 5. Opcionalmente, se configurar um witness server para a sesso de database mirroring, conecte-se ao query editor no principal server e execute o script abaixo: --- Rodar no Principal Server Use master GO ALTER DATABASE Pubs SET WITNESS = 'TCP://VPC.contoso.com:5022' Testando a Funcionalidade do Database Mirroring Concluda a configurao e inicializao da sesso de database mirroring, se tudo deu certo o database

mirroring j deve estar funcionando. A figura abaixo mostra o status do principal e mirror database aps a configurao.

Experimente fazer algumas alteraes em seu principal database (por exemplo, criando uma tabela e inserindo registros sobre a mesma) e depois verifique se estas foram espelhadas no mirror database. No entanto, lembre-se que o mirror database no fica disponvel para leitura. Para utilizar o mirror database preciso executar 2 passos: 1. Quebrar o mirroring Para quebrar o mirroring, podemos utilizar a janela de propriedades do principal database e na pgina Mirroring clicar sobre o boto Stop Mirroring, ou ainda executar o script abaixo no query editor de um dos partners da sesso: --Executar no Principal ou Mirror Server --Para desfazer o Mirror ALTER DATABASE Pubs SET PARTNER OFF Caso tenha configurado o mirroring para suportar alta disponibilidade, basta clicar sobre o boto Failover, na janela de propriedades do principal database e o failover ser realizado automaticamente. 2. Remover o status de Restoring do mirror database Aps quebrar o mirroring, o mirror database se manter no status de Restoring. Para utiliz-lo preciso antes deix-lo em seu status normal para utilizao realizando o recovering do database. Para fazer o recovering do mirror database, execute o script abaixo no query editor do mirror server. -- Rodar no Mirror Server RESTORE DATABASE Pubs WITH RECOVERY Pronto, com isso o mirror database estar disponvel para utilizao e dever conter as alteraes realizadas no principal database. Erros mais Comuns

Dois erros muito comuns durante a configurao de uma sesso de database mirroring so os erros 1418 e 1478. Msg 1418, Level 16, State 1, Line 1 The server network address "TCP://SERVER02.conto.com:5022" can not be reached or does not exist. Check the network address name and reissue the command. Msg 1478, Level 16, State 0, Line 1 The mirror database, "Pubs", has insufficient transaction log data to preserve the log backup chain of the principal database. This may happen if a log backup from the principal database has not been taken or has not been restored on the mirror database. Ambos os erros costumam ocorrer no mesmo ponto: no momento da configurao dos Partners da sesso (passos 3, 4 ou 5 quando configurando via script, ou ao clicar sobre o boto Start Mirroring quando configurando via tela grfica). O erro 1418 indica problemas de conectividade entre os ns, normalmente problemas de resoluo dos nomes das mquinas. Para corrig-lo, certifique-se de que os nomes das mquinas esto corretos ou ento tente configurar os partners utilizando o endereo IP. ALTER DATABASE Pubs SET PARTNER = 'TCP://192.168.0.12:5022' Nota: Lembre-se tambm de informar o mesmo nmero de porta utilizado na criao do endpoint do respectivo partner. O erro 1478 indica uma falta de sincronismo entre o log de transao do principal e o mirror database. Para corrigi-lo, efetue um backup de transao no principal database e restaure-o no mirror database utilizando a opo WITH NORECOVERY. RESTORE LOG Pubs FROM DISK='C:/Backup/Pubs_TRL.BAK' WITH NORECOVERY Aps a restaurao do bakup de transao, reinicie a configurao dos Partners em ambos os servidores da sesso. Bom pessoal, isso a. Qualquer dvida ou problema na configura do database mirroring, post uma mensagem em nosso frum. Caso desejem saber mais sobre database mirroring, incluindo a parte conceitual sobre seu funcionamento, uma excelente fonte de documentao o Whitepaper Database Mirroring in SQL Server 2005 (http://www.microsoft.com/technet/prodtechnol/sql/2005/dbmirror.mspx) ou ainda o prprio Books Online do SQL Server 2005. Dois Webcasts tambm muito interessantes sobre database mirroring so: Implementing Database Mirroring in SQL Server 2005 (Part 1 of 2) e Implementing Database Mirroring in SQL Server 2005 (Part 2 of 2)

Anda mungkin juga menyukai