Compartilhar via


Como adicionar uma testemunha de espelhamento de banco de dados usando a Autenticação do Windows (Transact-SQL)

Para definir uma testemunha para um banco de dados, o proprietário do banco de dados nomeia uma instância do Mecanismo de Banco de Dados para a função de servidor testemunha. A instância do servidor testemunha pode ser executada no mesmo computador que a instância do servidor principal ou espelho, mas isso reduz a robustez de failover automático substancialmente.

A localização da testemunha em um computador separado é altamente recomendável. Uma determinada instância do servidor pode participar de várias sessões de espelhamento de banco de dados simultâneos com os mesmos ou diferentes parceiros. Um determinado servidor pode ser um parceiro em algumas sessões e uma testemunha em outras sessões.

A testemunha é planejada exclusivamente para um modo de alta segurança com failover automático. Antes de você definir uma testemunha, recomendamos enfaticamente que verifique se a propriedade SAFETY está definida atualmente como FULL.

Observação importanteImportante

Recomendamos configurar o espelhamento de banco de dados para um período fora do pico de atividade, pois a configuração pode comprometer o desempenho.

Para estabelecer uma testemunha

  1. Na instância do servidor testemunha, verifique se existe um ponto de extremidade para espelhamento de banco de dados. Independentemente do número de sessões de espelhamento com suporte, a instância do servidor só deve ter um ponto de extremidade do espelhamento de banco de dados. Se você pretender usar essa instância de servidor exclusivamente como testemunha nas sessões de espelhamento de banco de dados, atribua a função de testemunha ao ponto de extremidade (ROLE**=**WITNESS). Se você também pretender usar essa instância do servidor como testemunha em uma ou mais sessões de espelhamento de banco de dados, atribua a função do ponto de extremidade como ALL.

    Para executar uma instrução SET WITNESS, a sessão de espelhamento de banco de dados já deve ter começado (entre parceiros), e o STATE do ponto de extremidade da testemunha deve estar definido como STARTED.

    Para saber se uma instância do servidor testemunha tem seu ponto de extremidade do espelhamento de banco de dados e conhecer sua função e estado, nessa instância, use a seguinte instrução Transact-SQL:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    
    Observação importanteImportante

    Se um ponto de extremidade do espelhamento de banco de dados já existir e estiver em uso, recomendamos que você use esse ponto de extremidade para cada sessão na instância do servidor. Descartando um ponto de extremidade em uso atrapalha o funcionamento das conexões das sessões existentes. Se uma testemunha foi definida para uma sessão, descartar o ponto de extremidade do espelhamento de banco de dados poderá fazer com que o servidor principal daquela sessão perca quorum; se isso acontecer, o banco de dados será colocado offline e seus usuários serão desconectados. Para obter mais informações, consulte Quorum: como uma testemunha afeta a disponibilidade do banco de dados.

    Se a testemunha não tiver um ponto de extremidade, consulte Como criar um ponto de extremidade de espelhamento para a Autenticação do Windows (Transact-SQL).

  2. Se as instâncias do parceiro estiverem sendo executadas em contas de usuário de domínio diferentes, crie um logon para cada uma das diferentes contas no banco de dados mestre de cada instância. Para obter mais informações, consulte Como permitir o acesso à rede de espelhamento de banco de dados usando a Autenticação do Windows (Transact-SQL).

  3. Conecte-se ao servidor principal e emita a seguinte instrução:

    ALTER DATABASE <database_name> SET WITNESS =<server_network_address>

    onde <database_name> é o nome do banco de dados a ser espelhado (esse 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 para um endereço de rede do servidor é a seguinte:

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

    onde o <system-address> é uma cadeia de caracteres que identifica inequivocamente o sistema de computador de destino, e <port> é o número da porta usado pelo ponto de extremidade do espelhamento da instância do servidor parceiro. Para obter mais informações, consulte Especificando um endereço de rede do servidor (Espelhamento de banco de dados).

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

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

Exemplo

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

  1. Crie um ponto de extremidade para essa instância do servidor para a função WITNESS usando apenas a porta 7022.

    CREATE ENDPOINT Endpoint_Mirroring
        STATE=STARTED 
        AS TCP (LISTENER_PORT=7022) 
        FOR DATABASE_MIRRORING (ROLE=WITNESS)
    GO
    
  2. Crie um logon para conta de usuário de domínio de instâncias de parceiro, se diferente; por exemplo, suponha que a testemunha está sendo executada como SOMEDOMAIN\witnessuser, mas os parceiros estão sendo executados como MYDOMAIN\dbousername. Crie um logon para os parceiros, como segue:

    --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 de servidor de parceiro, crie um logon para a instância do servidor 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çãoObservação

O endereço de rede do servidor indica a instância do servidor de destino pelo número da porta que mapeia para o ponto de extremidade do espelhamento da instância.

Para obter um exemplo completo que mostra a configuração de segurança, prepara o banco de dados espelho, configura os parceiros e inclui uma testemunha, consulte Configurando espelhamento de banco de dados.