Como preparar um banco de dados espelho para o espelhamento (Transact-SQL)

O banco de dados espelho deve existir antes de uma sessão de espelhamento de banco de dados ser iniciado. O nome do banco de dados espelho deve ser igual ao nome do banco de dados principal. O proprietário do banco de dados ou o administrador do sistema pode criar um banco de dados espelho a partir de um backup completo recente do banco de dados principal e, pelo menos, de um backup de log subsequente. Para o espelhamento funcionar, o banco de dados espelho deve permanecer em estado RESTORING. Além disso, ao restaurar um backup em um banco de dados espelho, é necessário sempre usar WITH NORECOVERY para todas as operações de restauração.

Se o espelhamento foi removido e o banco de dados espelho ainda está no estado de RECOVERING, você pode reinicializar o espelhamento. No entanto, primeiro, pelo menos um backup de log deve ser efetuado no banco de dados principal. Em seguida, no banco de dados espelho, é necessário restaurar todos os backups de log WITH NORECOVERY efetuados no banco de dados principal já que o espelhamento foi removido.

ObservaçãoObservação

Não é possível espelhar os bancos de dados do sistema master, msdb, temp ou modelo.

Procedimento

Para criar um espelhamento de banco de dados

  1. Verifique se todas as instâncias do servidor espelho e principal do Microsoft SQL Server 2008 estejam instaladas.

  2. Verifique se o banco de dados usa o modelo de recuperação completa.

    Para mais informações, consulte Como exibir ou alterar o modelo de recuperação de um banco de dados (SQL Server Management Studio) ou sys.databases (Transact-SQL) e ALTER DATABASE (Transact-SQL).

  3. Faça backup do banco de dados principal em um backup de banco de dados completo.

    Para obter mais informações, consulte Como executar backup de um banco de dados (SQL Server Management Studio) ou Como criar um backup de banco de dados completo (Transact-SQL).

    ObservaçãoObservação

    Como alternativa, é possível restaurar um backup de um banco de dados existente e, como opção, um backup de banco de dados diferencial, acompanhado por todos os backups de log subsequentes.

  4. Verifique se o sistema onde o banco de dados espelho será criado tenha um disco com espaço suficiente para armazenar o banco de dados.

  5. A menos que o backup esteja em uma unidade de rede acessível dos dois sistemas, copie o backup para aquele sistema.

  6. Para criar o banco de dados espelho, restaure o backup de banco de dados espelho completo na instância do servidor espelho. A instrução RESTORE DATABASEdatabase_name deve especificar WITH NORECOVERY, onde database_name é o nome do banco de dados que será espelhado.

    ObservaçãoObservação

    Se restaurar o grupo de arquivos de banco de dados pelo grupo de arquivos, restaure todo o banco de dados.

    Também é recomendável que, se possível, o caminho (inclusive a letra da unidade) do banco de dados espelho seja idêntico ao caminho do banco de dados principal.

    Se os layouts de arquivo tiverem de ser diferentes, por exemplo, se o banco de dados principal estiver na unidade 'F:' mas o sistema espelho não tem uma unidade F:, será necessário incluir a opção MOVE na instrução RESTORE.

    Observação importanteImportante

    Ao adicionar um arquivo durante uma sessão de espelhamento sem afetá-la, é necessário que o caminho do arquivo exista nos dois servidores. Portanto, se você mover os arquivos de banco de dados quando estiver criando o banco de dados espelho, uma operação adicionar arquivo posterior pode não funcionar no banco de dados espelho e causar a suspensão do espelhamento. Para obter mais informações sobre como lidar com uma falha na operação criar arquivo, consulte Solucionando problemas de implantação de espelhamento de banco de dados.

    Para obter mais informações, consulte RESTORE (Transact-SQL) e Argumentos de RESTORE (Transact-SQL).

  7. Normalmente, pelo menos um backup de log deve ser efetuado no banco de dados principal, copiado ao servidor espelho e restaurando no banco de dados espelho (usando WITH NORECOVERY). Porém, um backup de log pode ser desnecessário, caso o banco de dados tenha acabado de ser criado e nenhum backup realizado ou se o modelo de recuperação foi alterado de SIMPLE para FULL.

    Para aplicar o backup de log no banco de dados espelho, no servidor espelho é possível usar o SQL Server ou o Transact-SQL:

  8. Se alguns backups de log adicionais foram colocados no banco de dados principal desde o backup necessário, será necessário copiá-los para o servidor espelho e aplicar cada um dos backups de log ao banco de dados espelho, começando com o mais recente e sempre usando WITH NORECOVERY.

Observação sobre segurançaObservação sobre segurança

TRUSTWORTHY é definido como OFF em um backup de banco de dados. Portanto, em um novo banco de dados espelho, TRUSTWORTHY será sempre OFF. Se o banco de dados tiver que ser confiável depois de um failover, serão necessárias etapas de instalação adicionais. Para obter mais informações, consulte Como configurar um banco de dados espelho para usar a propriedade confiável.

Observação importanteImportante

Se o espelhamento de banco de dados for interrompido, todos os backups de logs subsequentes do banco de dados principal devem ser aplicados ao banco de dados espelho, antes que o espelhamento possa ser reinicializado.

Exemplo

Antes de poder iniciar uma sessão de espelhamento de banco de dados, é preciso criar o banco de dados espelho. Isso deve ser feito antes de iniciar a sessão de espelhamento.

Esse exemplo usa o banco de dados de exemplo do AdventureWorks2008R2 que, por padrão, usa o modelo de recuperação simples.

  1. Para usar espelhamento de banco de dados com o banco de dados AdventureWorks2008R2, modifique-o para usar o modelo de recuperação completa:

    USE master;
    GO
    ALTER DATABASE AdventureWorks2008R2 
    SET RECOVERY FULL;
    GO
    
  2. Depois de modificar o modelo de recuperação do banco de dados de SIMPLE para FULL, crie um backup completo, que pode ser usado para criar o banco de dados do espelho. Como o modelo de recuperação acabou de ser alterado, a opção WITH FORMAT estará especificada para criar um novo conjunto de mídias. Isso é útil para separar os backups sob o modelo de recuperação completa de qualquer backup anterior feito sob o modelo de recuperação simples. Com a finalidade deste exemplo, o arquivo de backup (C:\AdventureWorks2008R2.bak) será criado na mesma unidade do banco de dados.

    ObservaçãoObservação

    Em um banco de dados de produção, você deve sempre fazer o backup em um dispositivo separado.

    Na instância de servidor principal (em PARTNERHOST1), crie um backup completo do banco de dados principal conforme segue:

    BACKUP DATABASE AdventureWorks2008R2 
        TO DISK = 'C:\AdventureWorks2008R2.bak' 
        WITH FORMAT
    GO
    
  3. Copiar o backup completo para servidor espelho.

  4. Restaure o WITH NORECOVERY do backup completo sobre a instância de servidor espelho. O comando para restaurar depende que os caminhos dos bancos de dados principal e espelho sejam idênticos.

    • Se os caminhos forem idênticos:

      Na instância de servidor espelho (em PARTNERHOST5), restaure o backup completo conforme a seguir:

      RESTORE DATABASE AdventureWorks2008R2 
          FROM DISK = 'C:\AdventureWorks2008R2.bak' 
          WITH NORECOVERY
      GO
      
    • Se os caminhos forem diferentes:

      Se o caminho do banco de dados espelho for diferente do caminho do banco de dados principal (por exemplo, as letras da unidade são diferentes), crie o banco de dados espelho requer que a operação de restauração inclua uma cláusula MOVE.

      Observação importanteImportante

      Se os nomes do caminho dos bancos de dados espelho e principal forem diferentes, não será possível adicionar um arquivo. Isso acontece porque, ao receber o log para a operação do arquivo adicionado, a instância do servidor espelho tenta colocar o novo arquivo no local usado pelo banco de dados principal.

      Por exemplo, o seguinte comando restaura um backup de um banco de dados principal que está em C:\Arquivo_de_Programas\Microsoft SQL Server\MSSQL.n\MSSQL\Data\ para um local diferente, D:\Arquivo_de_Programas\Microsoft SQL Server\MSSQL.n\MSSQL\Data\, onde o banco de dados espelho precisa residir.

      RESTORE DATABASE AdventureWorks2008R2
         FROM DISK='C:\AdventureWorks2008R2.bak'
         WITH NORECOVERY, 
            MOVE 'AdventureWorks2008R2_Data' TO 
               'D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\AdventureWorks2008R2_Data.mdf', 
            MOVE 'AdventureWorks2008R2_Log' TO
               'D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\AdventureWorks2008R2_Log.ldf';
      GO
      
  5. Depois de criar o backup completo, deve-se criar um backup de log no banco de dados principal. Por exemplo, a seguinte instrução Transact-SQL faz o backup de log ao mesmo arquivo usado pelo backup completo anterior:

    BACKUP LOG AdventureWorks2008R2 
        TO DISK = 'C:\AdventureWorks2008R2.bak' 
    GO
    
  6. Antes de poder iniciar o espelhamento, é necessário aplicar o backup de log exigido (e qualquer backup de log subsequente).

    Por exemplo, a seguinte instrução Transact-SQL restaura o primeiro log de C:\AdventureWorks2008R2.bak:

    RESTORE LOG AdventureWorks2008R2 
        FROM DISK = 'C:\AdventureWorks2008R2.bak' 
        WITH FILE=1, NORECOVERY
    GO
    
  7. Se qualquer backup de log adicional ocorrer antes de começar o espelhamento, deve-se também restaurar todos os backups de log, em sequência, ao servidor espelho usando WITH NORECOVERY.

    Por exemplo, a instrução seguinte Transact-SQL restaura dois logs adicionais de C:\AdventureWorks2008R2.bak:

    RESTORE LOG AdventureWorks2008R2 
        FROM DISK = 'C:\AdventureWorks2008R2.bak' 
        WITH FILE=2, NORECOVERY
    GO
    RESTORE LOG AdventureWorks2008R2 
        FROM DISK = 'C:\AdventureWorks2008R2.bak' 
        WITH FILE=3, NORECOVERY
    GO
    

Para obter um exemplo completo de como mostrar uma configuração de banco de dados, preparar o banco de dados espelho, configurar os parceiros e adicionar uma testemunha, consulte Configurando espelhamento de banco de dados.