Solucionando problemas de implantação de espelhamento de banco de dados

Este tópico fornece informações para ajudá-lo a solucionar problemas ao configurar uma sessão de espelhamento de banco de dados.

ObservaçãoObservação

Assegure-se de que você está satisfazendo todos os pré-requisitos para o espelhamento de banco de dados.

Assunto

Resumo

Contas

Discute os requisitos para configurar corretamente as contas nas quais o SQL Server será executado.

Pontos de extremidade

Discute os requisitos para configurar corretamente o ponto de extremidade do espelhamento de banco de dados de cada instância do servidor .

Endereço de sistema

Resume as alternativas para especificar o nome de sistema de uma instância do servidor em uma configuração de espelhamento de banco de dados.

Acesso de rede

Documenta o requisito de cada instância do servidor para acessar as portas de outra instância do servidor ou instâncias no TCP.

Preparação do banco de dados espelho

Resume os requisitos para preparar o banco de dados espelho para habilitar o início do espelhamento.

Falha na operação para criar arquivo

Descreve como responder a uma falha na operação para criar arquivo.

Iniciar o espelhamento (Transact-SQL)

Descreve a ordem exigida para as instruções ALTER DATABASE database_name SET PARTNER ='partner_server'.

Contas

As contas nas quais o SQL Server está sendo executado devem ser configuradas corretamente.

  1. As contas têm as permissões corretas?

    1. Se as contas estiverem sendo executadas nas mesmas contas de domínio, as chances de uma configuração incorreta são reduzidas.

    2. Se as contas estiverem executando em domínios diferentes ou não são contas de domínio, o logon de uma conta deve ser criado em mestre no outro computador e esse logon deve ter permissões concedidas em CONNECT no ponto de extremidade. Para obter mais informações, consulte Gerenciando metadados ao disponibilizar um banco de dados em outra instância do servidor. Isso inclui a conta de Serviço de Rede.

  2. Se o SQL Server estiver executando como um serviço que está usando a conta Sistema Local, você deve usar certificados para autenticação. Para obter mais informações, consulte Usando certificados para espelhamento de banco de dados

Pontos de extremidade

Os pontos de extremidade devem ser configurados corretamente.

  1. Verifique se cada instância do servidor (o servidor principal, servidor espelho e testemunha, se houver) tem um ponto de extremidade de espelhamento de banco de dados. Para obter mais informações, consulte sys.database_mirroring_endpoints (Transact-SQL) e, dependendo do formato de autenticação, Como criar um ponto de extremidade de espelhamento para a Autenticação do Windows (Transact-SQL) ou Como permitir que o espelhamento de banco de dados use certificados para conexões de saída (Transact-SQL).

  2. Verifique se os números da porta estão corretos.

    Para identificar a porta associada atualmente com o ponto de extremidade de espelhamento de banco de dados de uma instância de servidor, use as exibições de catálogo sys.database_mirroring_endpoints e sys.tcp_endpoints.

  3. O logon para a conta de serviço da outra instância de servidor exige permissão CONNECT.

  4. Para os problemas da configuração de espelhamento de banco de dados que são difíceis de explicar, recomendamos que você inspecione cada instância do servidor para determinar se está escutando nas portas corretas. Para obter mais informações sobre verificação de disponibilidade de porta, consulte MSSQLSERVER_1418.

  5. Verifique se os pontos de extremidade foram iniciados (STATE=STARTED). Em cada instância do servidor, use a seguinte instrução Transact-SQL. 

    SELECT state_desc FROM sys.database_mirroring_endpoints
    

    Para obter mais informações sobre a coluna state_desc, consulte sys.database_mirroring_endpoints (Transact-SQL).

    Para iniciar um ponto de extremidade, use a seguinte instrução Transact-SQL.

    ALTER ENDPOINT Endpoint_Mirroring 
    STATE = STARTED 
    AS TCP (LISTENER_PORT = <port_number>)
    FOR database_mirroring (ROLE = ALL);
    GO
    

    Para obter mais informações, consulte ALTER ENDPOINT (Transact-SQL).

  6. Verifique se o ROLE está correto. Em cada instância do servidor, use a seguinte instrução Transact-SQL.

    SELECT role FROM sys.database_mirroring_endpoints;
    GO
    

    Para obter mais informações, consulte sys.database_mirroring_endpoints (Transact-SQL).

  7. Verifique se o logon do outro servidor tem permissão CONNECT. Para determinar quem tem permissão CONNECT para um ponto de extremidade, em cada instância do servidor use a instrução Transact-SQL seguinte.

    SELECT 'Metadata Check';
    SELECT EP.name, SP.STATE, 
       CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id)) 
          AS GRANTOR, 
       SP.TYPE AS PERMISSION,
       CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id)) 
          AS GRANTEE 
       FROM sys.server_permissions SP , sys.endpoints EP
       WHERE SP.major_id = EP.endpoint_id
       ORDER BY Permission,grantor, grantee; 
    GO
    

Endereço de sistema

Para o nome de sistema de uma instância do servidor em uma configuração de espelhamento de banco de dados, você pode usar qualquer nome que inequivocamente identifique o sistema. O endereço de servidor pode ser um nome de sistema (se os sistemas estiverem no mesmo domínio), um nome de domínio totalmente qualificado ou um endereço de IP (preferivelmente, um endereço de IP estático). Usando o nome de domínio totalmente qualificado o funcionamento é garantido. Para obter mais informações, consulte Especificando um endereço de rede do servidor (Espelhamento de banco de dados).

Acesso de rede

Cada instância do servidor deve poder acessar as portas da outra instância do servidor ou instâncias em TCP. Isso será especialmente importante se as instâncias do servidor estiverem em domínios diferentes que não confiam um no outro (domínios não confiáveis). Isso restringe muito da comunicação entre as instâncias do servidor.

Preparação do banco de dados espelho

Se iniciar o espelhamento pela primeira vez ou iniciá-lo novamente depois do espelhamento ser removido, verifique se o banco de dados espelho está preparado para o espelhamento.

Quando você criar o banco de dados espelho no servidor espelho, certifique-se de restaurar o backup do banco de dados principal especificando o mesmo nome de banco de dados WITH NORECOVERY. Além disso, deve-se aplicar também a todos os backups de log, criados depois que esse backup foi feito, WITH NORECOVERY novamente

Também, recomendamos que, se possível, o caminho (inclusive a letra de drive) 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 tiver uma unidade F:, será necessário incluir a opção MOVE na instrução RESTORE.

Observação importanteImportante

Se você mover os arquivos de banco de dados quando estiver criando o banco de dados espelho, pode não ser capaz de acrescentar arquivos posteriormente ao banco de dados sem a suspensão do espelhamento.

Se o espelhamento de banco de dados foi 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.

Para obter mais informações, consulte Como preparar um banco de dados espelho para o espelhamento (Transact-SQL).

Falha na operação criar arquivo

Para que a inclusão de um arquivo não afete uma sessão de espelhamento, o caminho do arquivo deve existir 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 corrigir o problema:

  1. O proprietário do banco de dados deve remover a sessão de espelhamento e restaurar o backup completo do grupo de arquivos que contém o arquivo adicionado.

  2. O proprietário do banco de dados deve fazer backup do log que contém a operação adicionar arquivo no servidor principal e restaurar manualmente o backup do log no banco de dados espelho usando as opções WITH NORECOVERY e WITH MOVE. Isso criará o caminho de arquivo especificado no servidor espelho e irá restaurar o novo arquivo nesse local.

  3. Para preparar o banco de dados para a nova sessão de espelhamento, o proprietário também deve restaurar usando WITH NORECOVERY todos os backups de log pendentes a partir do servidor principal.

Para obter mais informações, consulte Removendo o espelhamento de banco de dados, Como preparar um banco de dados espelho para o espelhamento (Transact-SQL), Como estabelecer uma sessão de espelhamento de banco de dados usando a Autenticação do Windows (Transact-SQL), Usando certificados para espelhamento de banco de dados ou Como configurar uma sessão de espelhamento de banco de dados (SQL Server Management Studio).

Iniciando o espelhamento (Transact-SQL)

A ordem na qual as instruções ALTER DATABASE database_name SET PARTNER ='partner_server' são emitidas é muito importante.

  1. A primeira instrução deve ser executada no servidor espelho. Quando essa instrução for emitida, o servidor espelho não tenta contatar qualquer outra instância do servidor. Em vez disso, o servidor espelho instrui seu banco de dados para esperar até que o servidor espelho seja contatado pelo servidor principal.

  2. A segunda instrução ALTER DATABASE deve ser executada no servidor principal. Essa instrução faz o servidor principal tentar se conectar ao servidor espelho. Depois que essa conexão é criada, o espelho, então, tenta conectar ao servidor principal em outra conexão.

Para obter mais informações, consulte ALTER DATABASE (Transact-SQL).

Mensagem de erro 1418

Essa mensagem do SQL Server indica que o endereço de rede de servidor não pode ser alcançado ou pode não existir, e sugere que você verifique o nome de endereço de rede e emita novamente o comando. Para obter mais informações, consulte MSSQLSERVER_1418.

Transações envolvendo todos os bancos de dados

Quando um banco de dados está sendo espelhado no modo de alta-segurança com failover automático, um failover automático pode levar a uma resolução automática e possivelmente incorreta de transações incertas. Se um failover automático acontecer em qualquer banco de dados enquanto uma transação envolvendo todos os bancos de dados está sendo confirmada, poderão ocorrer inconsistências lógicas entre os bancos de dados.

Os tipos de transações envolvendo todos os bancos de dados que podem ser afetadas por um failover automático incluem o seguinte:

  • Uma transação que está atualizando vários bancos de dados na mesma instância do SQL Server.

  • Transações que usam MS DTC (Coordenador de Transações Distribuídas da Microsoft).

Para obter mais informações, consulte Transações envolvendo todos os bancos de dados e espelhamento de banco de dados.