Partilhar via


Adicionar uma Testemunha de Espelhamento de Base de Dados usando a Autenticação Windows (Transact-SQL)

Aplica-se a:SQL Server

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.

Para configurar uma testemunha para uma base de dados, o proprietário da base de dados atribui uma instância do Mecanismo de Base de Dados à função de servidor testemunha. A instância do servidor testemunha pode correr no mesmo computador que a instância principal ou do servidor espelho, mas isto reduz substancialmente a robustez do failover automático.

Recomendamos vivamente que a testemunha resida num computador separado. Um dado servidor pode participar em múltiplas sessões simultâneas de espelhamento de bases de dados com o mesmo parceiro ou parceiros diferentes. Um dado servidor pode ser parceiro em algumas sessões e testemunha noutras.

O testemunho destina-se exclusivamente ao modo de alta segurança com failover automático. Antes de nomear uma testemunha, recomendamos vivamente que certifique-se de que a propriedade de SEGURANÇA está atualmente definida como TOTAL.

Importante

Recomendamos que configure o espelhamento da base de dados durante as horas de menor afluência, pois a configuração pode afetar o desempenho.

Estabelecer uma testemunha

  1. Na instância do servidor testemunha, certifique-se de que existe um endpoint para espelhamento de bases de dados. Independentemente do número de sessões de espelhamento a suportar, a instância do servidor deve ter apenas um endpoint de espelhamento da base de dados. Se pretende usar esta instância do servidor exclusivamente como testemunha em sessões de espelhamento de base de dados, atribua o papel de testemunha ao endpoint (ROLE**=**WITNESS). Se pretende usar esta instância de servidor como parceiro numa ou mais outras sessões de espelhamento de base de dados, atribua o papel do endpoint como TODOS.

    Para executar uma instrução SET WITNESS, a sessão de espelhamento da base de dados deve já estar iniciada (entre os parceiros), e o ESTADO do endpoint da testemunha deve ser definido como STARTED.

    Para saber se a instância do servidor testemunha tem o seu endpoint de espelhamento da base de dados e para saber o seu papel e estado, nessa instância, use a seguinte instrução Transact-SQL:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints  
    

    Importante

    Se existir um endpoint de espelhamento de base de dados que já estiver em uso, recomendamos que utilize esse endpoint para todas as sessões na instância do servidor. A remoção de um endpoint em uso interrompe as ligações das sessões existentes. Se uma testemunha foi definida para uma sessão, a eliminação do endpoint de espelhamento da base de dados pode fazer com que o servidor principal dessa sessão perca quórum; Nesse caso, a base de dados é desativada e os seus utilizadores são desconectados. Para mais informações, consulte Quórum: Como uma Testemunha Afeta a Disponibilidade da Base de Dados (Espelhamento de Bases de Dados).

    Se a testemunha não tiver um endpoint, veja Criar um Endpoint de Espelhamento de Base de Dados para Autenticação Windows (Transact-SQL).

  2. Se as instâncias parceiras estiverem a correr sob contas de utilizador de domínio diferentes, crie um login para as diferentes contas na base de dados mestre de cada instância. Para mais informações, consulte Permitir Acesso à Rede a um Endpoint de Espelhamento de Base de Dados Usando Autenticação Windows (SQL Server).

  3. Ligue-se ao servidor principal e emita a seguinte declaração:

    ALTERAR BASE DE DADOS <database_name> DEFINIR WITNESS =<server_network_address>

    onde <database_name> é o nome da base de dados a ser espelhada (este nome é o mesmo em ambos os parceiros), e <server_network_address> é o endereço de rede do servidor da instância do servidor testemunha.

    A sintaxe de um endereço de rede de servidor é a seguinte:

    TCP://<system-address>:<port>

    onde <o endereço> do sistema é uma cadeia que identifica inequivocamente o sistema informático de destino, e <a porta> é o número de porta usado pelo endpoint espelhador da instância do servidor parceiro. Para mais informações, consulte Especificar um Endereço de Rede de Servidor (Espelhamento de Base de Dados).

    Por exemplo, na instância principal do servidor, a seguinte instrução ALTER DATABASE define a testemunha. O nome da base de dados é AdventureWorks, o endereço do sistema é DBSERVER3-o nome do sistema testemunha, e a porta usada pelo endpoint de espelhamento da base de dados da testemunha é 7022:

    ALTER DATABASE AdventureWorks   
      SET WITNESS = 'TCP://DBSERVER3:7022'  
    

Example

O exemplo seguinte estabelece uma testemunha de espelhamento de dados. Na instância do servidor testemunha (instância padrão em WITNESSHOST4):

  1. Crie um endpoint para esta instância de servidor para a função WITNESS apenas usando a porta 7022.

    CREATE ENDPOINT Endpoint_Mirroring  
        STATE=STARTED   
        AS TCP (LISTENER_PORT=7022)   
        FOR DATABASE_MIRRORING (ROLE=WITNESS)  
    GO  
    
  2. Crie um login para a conta de utilizador do domínio das instâncias parceiras, se for diferente; Por exemplo, assuma que a testemunha está a correr como SOMEDOMAIN\witnessuser, mas os parceiros estão a correr como MYDOMAIN\dbousername. Crie um login para os parceiros, da seguinte forma:

    --Create a login for the partner server instances,  
    --which are both running as MYDOMAIN\dbousername:  
    USE master ;  
    GO  
    CREATE LOGIN [MYDOMAIN\dbousername] FROM WINDOWS ;  
    GO  
    --Grant connect permissions on endpoint to login account   
    --of partners  
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [MYDOMAIN\dbousername];  
    GO  
    
  3. Em cada uma das instâncias do servidor parceiro, crie credenciais de acesso para a instância do servidor de testemunha.

    --Create a login for the witness server instance,  
    --which is running as SOMEDOMAIN\witnessuser:  
    USE master ;  
    GO  
    CREATE LOGIN [SOMEDOMAIN\witnessuser] FROM WINDOWS ;  
    GO  
    --Grant connect permissions on endpoint to login account   
    --of partners  
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [SOMEDOMAIN\witnessuser];  
    GO  
    
  4. No servidor principal, defina a testemunha (que está em WITNESSHOST4):

    ALTER DATABASE AdventureWorks   
        SET WITNESS =   
        'TCP://WITNESSHOST4:7022'  
    GO  
    

Observação

O endereço da rede do servidor indica a instância do servidor alvo pelo número da porta, que corresponde ao endpoint de espelhamento da instância.

Para um exemplo completo mostrando a configuração de segurança, preparação da base de dados espelhada, configuração dos parceiros e adição de uma testemunha, veja Configurar o Espelhamento de Base de Dados (SQL Server).

Ver também

ALTERAR BASE DE DADOS (Transact-SQL)
Permitir o acesso à rede a um endpoint de espelhamento de base de dados usando autenticação Windows (SQL Server)
Criar um endpoint de espelhamento de base de dados para autenticação do Windows (Transact-SQL)
Estabelecer uma Sessão de Espelhamento de Base de Dados Usando Autenticação Windows (Transact-SQL)
Remover a testemunha de uma sessão de espelhamento de banco de dados (SQL Server)
Testemunha de Espelhamento de Base de Dados