Partilhar via


espelhamento de banco de dados ALTER DATABASE (Transact-SQL)

Controla o espelhamento de um banco de dados. Valores especificados com as opções de espelhamento de banco de dados se aplicam a ambas as cópias do banco de dados e à sessão de espelhamento de banco de dados como um todo. Apenas um <database_mirroring_option> é permitido por instrução ALTER DATABASE.

ObservaçãoObservação

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

Para obter mais informações sobre espelhamento de banco de dados, consulte Administração de espelhamento de banco de dados. Para outras opções ALTER DATABASE, consulte ALTER DATABASE (Transact-SQL). Para obter outras opções de ALTER DATABASE SET, consulte Opções ALTER DATABASE SET (Transact-SQL).

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

ALTER DATABASE database_name 
SET { <partner_option> | <witness_option> }
    <partner_option> ::=
    PARTNER { = 'partner_server' 
            | FAILOVER 
            | FORCE_SERVICE_ALLOW_DATA_LOSS
            | OFF
            | RESUME 
            | SAFETY { FULL | OFF }
            | SUSPEND 
            | TIMEOUT integer
            }
    <witness_option> ::=
    WITNESS { = 'witness_server' 
            | OFF 
            }

Argumentos

Observação importanteImportante

Um comando SET PARTNER ou SET WITNESS pode ser concluído com êxito quando digitado, mas falhar posteriormente.

  • database_name
    É o nome do banco de dados a ser modificado.

  • PARTNER <partner_option>
    Controla as propriedades de banco de dados que definem os parceiros de failover de uma sessão de espelhamento de banco de dados e seu comportamento. Algumas opções de SET PARTNER podem ser definidas em qualquer parceiro; outros se restringem ao servidor principal ou ao servidor espelho. Para obter mais informações, consulte as opções individuais de PARTNER a seguir. Uma cláusula SET PARTNER afeta ambas as cópias do banco de dados, independentemente do parceiro no qual é especificada.

    Para executar uma instrução SET PARTNER, o STATE dos pontos de extremidade de ambos os parceiros deve ser definido como STARTED. Note, também, que o ROLE do ponto de extremidade do espelhamento de banco de dados de cada instância de servidor parceiro deve ser definido como PARTNER ou ALL. Para obter informações sobre como especificar um ponto de extremidade, consulte Como criar um ponto de extremidade de espelhamento para a Autenticação do Windows (Transact-SQL). Para conhecer a função e o estado do ponto de extremidade do espelhamento de banco de dados de uma instância de servidor, naquela instância, use a seguinte instrução Transact-SQL:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    

    <partner_option>:: =

    ObservaçãoObservação

    Apenas um <partner_option> é permitido por cláusula SET PARTNER.

    • 'partner_server'
      Especifica o endereço de rede de servidor de uma instância do SQL Server para atuar como um parceiro de failover em uma nova sessão de espelhamento de banco de dados. Cada sessão requer dois parceiros: um começa como servidor principal e o outro, como servidor espelho. Recomendamos que estes parceiros residam em computadores diferentes.

      Esta opção é especificada uma vez por sessão em cada parceiro. Iniciar uma sessão de espelhamento de banco de dados requer duas instruções ALTER DATABASE database SET PARTNER ='partner_server'. A ordem delas é significativa. Primeiro, conecte ao servidor espelho e especifique a instância de servidor principal como partner_server (SET PARTNER ='principal_server'). Segundo, conecte ao servidor principal e especifique a instância de servidor espelho como partner_server (SET PARTNER ='mirror_server'); isto inicia uma sessão de espelhamento de banco de dados entre esses dois parceiros. Para obter mais informações, consulte Configurando espelhamento de banco de dados.

      O valor de partner_server é um endereço de rede de servidor. Tem a seguinte sintaxe:

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

      onde

      • <system-address> é uma cadeia de caracteres, como um nome de sistema, um nome de domínio totalmente qualificado ou um endereço IP que identifica inequivocamente o sistema de computador de destino.

      • <port> é um número de porta associado ao ponto de extremidade de espelhamento da instância de servidor parceiro.

      Para obter mais informações, consulte Especificando um endereço de rede do servidor (Espelhamento de banco de dados).

      O exemplo a seguir ilustra a cláusula SET PARTNER ='partner_server':

      'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'
      
      Observação importanteImportante

      Se uma sessão for configurada utilizando-se a instrução ALTER DATABASE, em vez de SQL Server Management Studio, a sessão será definida com segurança de transação completa, por padrão (SAFETY é definido como FULL), e será executada em modo de alta segurança sem failover automático. Para permitir failover automático, configure uma testemunha; para executar em modo de alto desempenho, desative a segurança de transação (SAFETY OFF).

    • FAILOVER
      Efetua failover do servidor principal manualmente para o servidor espelho. É possível especificar FAILOVER apenas no servidor principal. Esta opção só será válida quando a configuração SAFETY for FULL (o padrão).

      A opção de FAILOVER requer master como contexto de banco de dados.

      Para obter mais informações, consulte Failover manual.

    • FORCE_SERVICE_ALLOW_DATA_LOSS
      Força serviço de banco de dados no banco de dados espelho quando o servidor principal falha com o banco de dados em estado não sincronizado ou sincronizado quando não ocorre failover automático.

      É extremamente recomendável que você só force o serviço se o servidor principal não estiver mais em execução. Caso contrário, alguns clientes poderão continuar acessando o banco de dados principal original, em vez do novo banco de dados principal.

      FORCE_SERVICE_ALLOW_DATA_LOSS só está disponível no servidor espelho e apenas sob as seguintes condições:

      • O servidor principal está fora de operação.

      • WITNESS está definido como OFF ou a testemunha está conectada ao servidor espelho.

      Force o serviço apenas se você estiver disposto a arriscar perder alguns dados para restaurar imediatamente o serviço no banco de dados. Para obter informações sobre alternativas para forçar serviço, consulte Espelhamento de banco de dados assíncrono (Modo de alto desempenho).

      Forçar serviço suspende a sessão, preservando todos os dados temporariamente no banco de dados principal original. Uma vez que o banco de dados principal original estiver em serviço e conseguir se comunicar com o novo servidor principal, o administrador do banco de dados poderá continuar o serviço. Quando a sessão continuar, todos os registros de log não enviado e suas atualizações correspondentes serão perdidos.

      Para obter mais informações sobre os riscos de forçar serviço, consulte Serviço forçado (com possível perda de dados).

    • OFF
      Remove uma sessão de espelhamento de banco de dados e remove o espelhamento de banco de dados. Você pode especificar OFF em qualquer parceiro. Para obter informações sobre o impacto de remover espelhamentos, consulte Removendo o espelhamento de banco de dados.

    • RESUME
      Continua uma sessão de espelhamento de banco de dados suspenso. É possível especificar RESUME apenas no servidor principal.

    • SAFETY { FULL | OFF }
      Define o nível de segurança de transação. É possível especificar SAFETY apenas no servidor principal.

      O padrão é FULL. Com segurança total, a sessão de espelhamento de banco de dados é executada sincronicamente (em modo de segurança alta). Se SAFETY for definido como OFF, a sessão de espelhamento de banco de dados será executada assincronamente (em modo de alto desempenho).

      O comportamento do modo de alta segurança depende, em parte, da testemunha, como segue:

      • Quando a segurança é definida como FULL e uma testemunha é definida para a sessão, esta é executada em modo de alta segurança com failover automático. Quando o servidor principal for perdido, a sessão terá failover automaticamente se o banco de dados for sincronizado e a instância de servidor espelho e a testemunha ainda estiverem conectadas entre si (ou seja, tiverem quorum). Para obter mais informações, consulte Quorum: como uma testemunha afeta a disponibilidade do banco de dados.

        Se uma testemunha for definida para a sessão, mas estiver atualmente desconectada, a perda do servidor espelho fará com que o servidor principal caia.

      • Quando a segurança é definida como FULL e a testemunha é definida como OFF, a sessão é executada em modo de alta segurança sem failover automático. Se a instância de servidor espelho cair, a instância de servidor principal não será afetada. Se a instância de servidor principal cair, você poderá forçar o serviço (com possível perda de dados) na instância de servidor espelho.

      Se SAFETY for definido como OFF, a sessão será executada em modo de alto desempenho e não haverá suporte para failover automático ou manual. Porém, problemas no espelho não afetam o principal e, se a instância de servidor principal cair, você poderá, se necessário, forçar o serviço (com possível perda de dados) na instância de servidor espelho — se WITNESS estiver definido como OFF ou a testemunha estiver conectada atualmente ao espelho. Para obter mais informações sobre como forçar serviço, consulte "FORCE_SERVICE_ALLOW_DATA_LOSS" anteriormente, nesta seção.

      Observação importanteImportante

      Não se pretende que o modo de alto desempenho use uma testemunha. Porém, sempre que definir SAFETY como OFF, é altamente recomendável que você assegure que WITNESS seja definido como OFF.

      Para obter mais informações, consulte Configurações Transact-SQL e modos de operação de espelhamento de banco de dados.

    • SUSPEND
      Pausa uma sessão de espelhamento de banco de dados.

      Você pode especificar SUSPEND em qualquer parceiro.

    • TIMEOUT integer
      Especifica o tempo limite, em segundos. O tempo limite é o tempo máximo que uma instância de servidor espera para receber uma mensagem PING de outra instância na sessão de espelhamento antes de considerá-la desconectada.

      Você só pode especificar a opção TIMEOUT no servidor principal. Se você não especificar essa opção, por padrão, o período de tempo será de 10 segundos. Se você especificar 5 ou mais, o tempo limite será definido como o número de segundos especificado. Se você especificar um valor de tempo limite de 0 a 4 segundos, o período será definido automaticamente como 5 segundos.

      Observação importanteImportante

      Recomendamos que você mantenha o tempo limite em 10 segundos ou mais. Definir o valor como menos de 10 segundos cria a possibilidade de um sistema extremamente carregado perdendo PINGs e declarando uma falsa falha.

      Para obter mais informações, consulte Possíveis falhas durante espelhamento de banco de dados.

  • WITNESS <witness_option>
    Controla as propriedades de banco de dados que definem uma testemunha de espelhamento de banco de dados. Uma cláusula SET WITNESS afeta ambas as cópias do banco de dados, mas você só pode especificar SET WITNESS no servidor principal. Se uma testemunha for definida para uma sessão, será exigido quorum para atender ao banco de dados, independentemente da configuração de SAFETY; para obter mais informações, consulte Quorum: como uma testemunha afeta a disponibilidade do banco de dados.

    Recomendamos que a testemunha e os parceiros de failover residam em computadores separados. Para obter informações sobre a testemunha, consulte Testemunha de espelhamento de banco de dados. Para obter informações sobre failover automático, consulte Failover automático.

    Para executar uma instrução SET WITNESS, o STATE dos pontos de extremidade das instâncias do servidor testemunha e principal devem ser definidos como STARTED. Note, também, que o ROLE do ponto de extremidade do espelhamento de banco de dados de uma instância de servidor testemunha deve ser definido como WITNESS ou ALL. Para obter informações sobre como especificar um ponto de extremidade, consulte Ponto de extremidade de espelhamento de banco de dados.

    Para conhecer a função e o estado do ponto de extremidade do espelhamento de banco de dados de uma instância de servidor, naquela instância, use a seguinte instrução Transact-SQL:

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

    As propriedades do banco de dados não podem ser definidas na testemunha.

    <witness_option> ::=

    ObservaçãoObservação

    Apenas uma <witness_option> é permitida por cláusula SET WITNESS.

    • 'witness_server'
      Especifica uma instância de Mecanismo de Banco de Dados para atuar como servidor testemunha de uma sessão de espelhamento de banco de dados. Você só pode especificar instruções SET WITNESS no servidor principal.

      Em uma instrução SET WITNESS ='witness_server', a sintaxe de witness_server é igual à sintaxe de partner_server.

    • OFF
      Remove a testemunha de uma sessão de espelhamento de banco de dados. Definir a testemunha como OFF desabilita o failover automático. Se o banco de dados estiver definido como FULL SAFETY e a testemunha como OFF, uma falha no servidor espelho fará com que o servidor principal torne o banco de dados indisponível.

Exemplos

A. Criando uma sessão de espelhamento de banco de dados com uma testemunha

Definir espelhamento de banco de dados com testemunha requer configurar a segurança e preparar o banco de dados espelho, além de usar ALTER DATABASE para definir os parceiros. Para obter um exemplo do processo de configuração completo, consulte Configurando espelhamento de banco de dados.

B. Efetuando manualmente o failover de uma sessão de espelhamento de banco de dados

O failover manual pode ser iniciado a partir de qualquer parceiro de espelhamento de banco de dados. Antes de efetuar o failover, você deve verificar se o servidor que se acredita ser o servidor principal atual o é de fato. Por exemplo, para o banco de dados AdventureWorks, na instância de servidor que se acredita ser o servidor principal atual, execute a seguinte consulta:

SELECT db.name, m.mirroring_role_desc 
FROM sys.database_mirroring m 
JOIN sys.databases db
ON db.database_id = m.database_id
WHERE db.name = N'AdventureWorks'; 
GO

Se a instância de servidor for realmente a principal, o valor de mirroring_role_desc será Principal. Se essa instância de servidor fosse o servidor espelho, a instrução SELECT retornaria Mirror.

O exemplo a seguir presume que o servidor seja o principal atual.

  1. Efetue manualmente o failover no parceiro de espelhamento de banco de dados:

    ALTER DATABASE AdventureWorks SET PARTNER FAILOVER;
    GO
    
  2. Para verificar os resultados do failover no espelho novo, execute a seguinte consulta:

    SELECT db.name, m.mirroring_role_desc 
    FROM sys.database_mirroring m 
    JOIN sys.databases db
    ON db.database_id = m.database_id
    WHERE db.name = N'AdventureWorks'; 
    GO
    

    O valor atual de mirroring_role_desc agora é Mirror.