Partilhar via


Resolução de Problemas da Configuração de Espelhamento de Base de Dados (SQL Server)

Aplica-se a:SQL Server

Este tópico fornece informações para o ajudar a resolver problemas na configuração de uma sessão de espelhamento de base de dados.

Atenção

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. Para alta disponibilidade, utilize grupos de disponibilidade Always On.

Importante

O espelhamento de banco de dados no SQL Server é uma tecnologia distinta do espelhamento de banco de dados do Microsoft Fabric. O espelhamento para o Fabric oferece uma melhoria no desempenho analítico, a capacidade de unificar o seu património de dados com o OneLake no Fabric e um acesso aberto aos seus dados em formato Delta Parquet.

Com o Mirroring to Microsoft Fabric, você pode replicar continuamente seu conjunto de dados existente diretamente no OneLake in Fabric, incluindo dados do SQL Server 2016+, Banco de Dados SQL do Azure, Instância Gerenciada SQL do Azure, Cosmos DB, Oracle, Snowflake e muito mais.

Certifique-se de que cumpre todos os pré-requisitos para o espelhamento de bases de dados.

Questão Resumo
Mensagem de Erro 1418 Esta mensagem do SQL Server indica que o endereço de rede do servidor não pode ser alcançado ou não existe, e sugere que verifique o nome do endereço de rede e reemita o comando.
Contas Discute os requisitos para configurar corretamente as contas sob as quais o SQL Server está a correr.
Pontos de Extremidade Discute os requisitos para a configuração correta do ponto final de espelhamento da base de dados de cada instância de servidor.
SystemAddress Resume as alternativas para especificar o nome do sistema de uma instância de servidor numa configuração de espelhamento de base de dados.
Acesso à rede Documenta o requisito de que cada instância do servidor possa aceder às portas da outra instância ou instâncias do servidor através de TCP.
Preparação de bases de dados espelhadas Resume os requisitos para preparar a base de dados espelhada para permitir o início do espelhamento.
Falha na operação de criação de ficheiro Descreve como responder a uma operação falhada de criação de ficheiro.
Começar o espelhamento usando Transact-SQL Descreve a ordem necessária para as instruções ALTER DATABASE database_name SET PARTNER ='partner_server' .
Transações entre bases de dados Um failover automático pode levar à resolução automática e possivelmente incorreta de transações em dúvida. Por esta razão, o espelhamento de bases de dados não suporta transações entre bases de dados.

Accounts

As contas sob as quais o SQL Server está a correr devem estar corretamente configuradas.

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

    1. Se as contas estiverem a correr em contas do mesmo domínio, as hipóteses de configuração incorreta são reduzidas.

    2. Se as contas estiverem a correr em domínios diferentes ou não forem contas de domínio, o login de uma conta deve ser criado no master no outro computador, e esse login deve receber permissões CONNECT no endpoint. Para mais informações, consulte Gerir Metadados ao Disponibilizar uma Base de Dados Noutra Instância de Servidor (SQL Server). Isto inclui a conta de Serviço de Rede.

  2. Se o SQL Server estiver a correr como um serviço que utiliza a conta local do sistema, deve usar certificados para autenticação. Para mais informações, consulte Utilizar Certificados para o Endpoint de Espelhamento de Bases de Dados (Transact-SQL).

Endpoints

Os endpoints devem estar corretamente configurados.

  1. Certifica-te de que cada instância de servidor (o servidor principal, servidor espelho e testemunha, se existirem) tem um endpoint de espelhamento da base de dados. Para mais informações, veja sys.database_mirroring_endpoints (Transact-SQL) e, dependendo da forma de autenticação, Crie um Endpoint de Espelhamento de Base de Dados para Autenticação Windows (Transact-SQL) ou Use Certificados para um Endpoint de Espelhamento de Base de Dados (Transact-SQL).

  2. Verifica se os números de porta estão corretos.

    Para identificar a porta atualmente associada ao endpoint de espelhamento de base de dados de uma instância de servidor, use as vistas de catálogo sys.database_mirroring_endpoints e sys.tcp_endpoints.

  3. Para problemas de configuração do espelhamento de base de dados difíceis de explicar, recomendamos que inspecione cada instância do servidor para verificar se está a escutar nas portas corretas.

  4. Certifique-se de que os endpoints estão iniciados (STATE=STARTED). Em cada instância de servidor, utilize a instrução Transact-SQL seguinte.

    SELECT state_desc FROM sys.database_mirroring_endpoints  
    

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

    Para iniciar um endpoint, 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 mais informações, consulte ALTER ENDPOINT (Transact-SQL).

  5. Verifique se a FUNÇÃO está correta. Em cada instância de servidor, use a seguinte instrução Transact-SQL.

    SELECT role FROM sys.database_mirroring_endpoints;  
    GO  
    

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

  6. O login da conta do serviço a partir da outra instância do servidor requer permissão CONNECT. Certifica-te de que o login do outro servidor tem permissão CONNECT. Para determinar quem tem permissão CONNECT para um endpoint, em cada instância de servidor, deve ser utilizada a seguinte instrução Transact-SQL.

    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 do Sistema

Para o nome do sistema de uma instância de servidor numa configuração de espelhamento de base de dados, pode usar qualquer nome que identifique o sistema de forma inequívoca. O endereço do 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 IP (preferencialmente, um endereço IP estático). Usar o nome de domínio totalmente qualificado garante o seu funcionamento. Para mais informações, consulte Especificar um Endereço de Rede de Servidor (Espelhamento de Base de Dados).

Acesso à Rede

Cada instância de servidor deve ser capaz de aceder às portas da outra instância ou instâncias de servidor através de TCP. Isto é especialmente importante se as instâncias do servidor estiverem em domínios diferentes que não confiam uns nos outros (domínios não confiáveis). Isto restringe grande parte da comunicação entre as instâncias do servidor.

Preparação da Base de Dados em Espelho

Quer inicie o espelhamento pela primeira vez ou o reinicie após a remoção do espelhamento, verifique se a base de dados do espelho está preparada para espelhamento.

Quando criar a base de dados espelhada no servidor espelho, certifique-se de restaurar a cópia de segurança da base de dados principal especificando o mesmo nome da base de dados COM NORECOVERY. Além disso, todos os backups de log criados depois desse backup ter sido feito também têm de ser aplicados, novamente SEM RECUPERAÇÃO.

Além disso, recomendamos que, se possível, o caminho do ficheiro (incluindo a letra da unidade) da base de dados espelhada seja idêntico ao caminho da base de dados principal. Se os caminhos dos ficheiros tiverem de ser diferentes, por exemplo, se a base de dados principal estiver na unidade 'F:' mas o sistema de espelho não tiver uma unidade F:, deve incluir a opção MOVE na instrução RESTORE.

Importante

Se mover os ficheiros da base de dados ao criar a base de dados espelhada, pode não conseguir adicionar ficheiros à base de dados mais tarde sem que o espelhamento seja suspenso.

Se o espelhamento da base de dados tiver sido interrompido, todas as cópias de segurança subsequentes feitas na base de dados principal devem ser aplicadas à base de dados espelhada antes de o espelhamento poder ser reiniciado.

Para mais informações, consulte Preparar uma Base de Dados para Espelhamento (SQL Server).

Operação Falhada de Create-File

Adicionar um ficheiro sem afetar uma sessão de espelhamento requer que o caminho do ficheiro exista em ambos os servidores. Portanto, se mover os ficheiros da base de dados ao criar a base de dados espelhada, uma operação posterior de adição de ficheiros pode falhar na base de dados espelhada e causar a suspensão do espelhamento.

Para resolver o problema:

  1. O proprietário da base de dados deve remover a sessão de espelhamento e restaurar uma cópia de segurança completa do grupo de ficheiros que contém o ficheiro adicionado.

  2. O proprietário deve então fazer uma cópia de segurança do registo que contém a operação de adicionar ficheiro no servidor principal e restaurar manualmente o backup do registo na base de dados espelhada usando as opções WITH NORECOVERY e WITH MOVE. Ao fazer isto, cria-se o caminho do ficheiro especificado no servidor espelho e restaura o novo ficheiro nessa localização.

  3. Para preparar a base de dados para uma nova sessão de espelhamento, o proprietário deve também restaurar SEM RECUPERAÇÃO quaisquer outras cópias de segurança de registos pendentes do servidor principal.

Para mais informações, consulte Remoção do Espelhamento de Base de Dados (SQL Server),Preparar uma Base de Dados Espelhada para Espelhamento (SQL Server),Estabelecer uma Sessão de Espelhamento de Base de Dados usando Autenticação Windows (Transact-SQL),Usar Certificados para um Endpoint de Espelhamento de Base de Dados (Transact-SQL), ou Estabelecer uma Sessão de Espelhamento de Base de Dados usando Autenticação Windows (SQL Server Management Studio).

Iniciar o espelhamento usando Transact-SQL

A ordem em que 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 esta declaração é emitida, o servidor espelho não tenta contactar qualquer outra instância do servidor. Em vez disso, o servidor espelho instrui a sua base de dados a esperar até que o servidor espelho seja contactado pelo servidor principal.

  2. A segunda instrução ALTER DATABASE deve ser executada no servidor principal. Esta afirmação faz com que o servidor principal tente ligar-se ao servidor espelho. Depois de criada essa ligação, o espelho tenta então ligar-se ao servidor principal noutra ligação.

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

Observação

Para informações sobre como usar SQL Server Management Studio para começar a espelhar, consulte Estabelecer uma Sessão de Espelhamento de Base de Dados Usando Autenticação Windows (SQL Server Management Studio).

Transações entre bases de dados

Quando uma base de dados está a ser espelhada em modo de alta segurança com failover automático, um failover automático pode levar à resolução automática e possivelmente incorreta de transações em dúvida. Se ocorrer um failover automático em qualquer uma das bases de dados enquanto uma transação entre várias bases de dados está a ser efetuada, podem ocorrer inconsistências lógicas entre as bases de dados.

Os tipos de transações entre bases de dados que podem ser afetadas por um failover automático incluem os seguintes:

  • Uma transação que está a atualizar múltiplas bases de dados na mesma instância do SQL Server.

  • Transações que utilizam um Microsoft Distributed Transaction Coordinator (MS DTC).

Para obter mais informações, consulte transações entre bancos de dados e transações distribuídas para grupos de disponibilidade Always On e espelhamento de banco de dados (SQL Server).

Ver também

Configuração do Espelhamento de Base de Dados (SQL Server)
Segurança de Transporte para Espelhamento de Bases de Dados e Grupos de Disponibilidade Sempre Ativos (SQL Server)