Compartilhar via


Solução de problemas de configuração de espelhamento de banco de dados (SQL Server)

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.

Problema

Resumo

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 o tópico MSSQLSERVER_1418.

Accounts

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 .

SystemAddress

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.

Iniciando o espelhamento usando Transact-SQL

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

Transações envolvendo todos os bancos de dados

Um failover automático pode levar a uma resolução automática e possivelmente incorreta de transações duvidosas. Por esta razão, o espelhamento de banco de dados não dá suporte a transações envolvendo todos os bancos de dados.

Accounts

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 Gerenciar metadados ao disponibilizar um banco de dados em outra instância do servidor (SQL Server). 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 Usar certificados para um ponto de extremidade de espelhamento de banco de dados (Transact-SQL).

Ícone de seta usado com o link Voltar ao Início[Início]

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, Criar um ponto de extremidade de espelhamento de banco de dados para a Autenticação do Windows (Transact-SQL) ou Usar certificados para um ponto de extremidade de espelhamento de banco de dados (Transact-SQL).

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

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

  3. 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.

  4. 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).

  5. 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).

  6. O logon para a conta de serviço da outra instância de servidor exige permissão CONNECT. 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
    

Ícone de seta usado com o link Voltar ao Início[Início]

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 Especificar um endereço de rede do servidor (Espelhamento de banco de dados).

Ícone de seta usado com o link Voltar ao Início[Início]

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 do arquivo (inclusive a letra da unidade) do banco de dados espelho seja idêntico ao caminho do banco de dados principal. Se os caminhos de arquivo precisarem 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 Preparar um banco de dados espelho para espelhamento (SQL Server).

Ícone de seta usado com o link Voltar ao Início[Início]

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 (SQL Server), Preparar um banco de dados espelho para espelhamento (SQL Server), Estabelecer uma sessão de espelhamento de banco de dados com a Autenticação do Windows (Transact-SQL), Usar certificados para um ponto de extremidade de espelhamento de banco de dados (Transact-SQL) ou Estabelecer uma sessão de espelhamento de banco de dados usando a Autenticação do Windows (SQL Server Management Studio).

Ícone de seta usado com o link Voltar ao Início[Início]

Iniciando o espelhamento usando 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).

ObservaçãoObservação

Para obter informações sobre como usar o SQL Server Management Studio para iniciar o espelhamento, consulte Estabelecer uma sessão de espelhamento de banco de dados usando a Autenticação do Windows (SQL Server Management Studio).

Ícone de seta usado com o link Voltar ao Início[Início]

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 sem suporte para espelhamento de banco de dados ou Grupos de Disponibilidade AlwaysOn (SQL Server).

Ícone de seta usado com o link Voltar ao Início[Início]

Consulte também

Conceitos

Configurando uma sessão de espelhamento de banco de dados (SQL Server)

Segurança de transporte para espelhamento de banco de dados e grupos de disponibilidade AlwaysOn (SQL Server)