Partilhar via


BASE DE DADOS ALTER (Transact-SQL) Espelhamento de bases de dados

Aplica-se a:SQL Server

Observaçã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. Em vez disso, use os grupos de disponibilidade Always On.

Controla o espelhamento de bases de dados para uma base de dados. Os valores especificados com as opções de espelhamento da base de dados aplicam-se tanto às cópias da base de dados como à sessão de espelhamento da base de dados como um todo. Apenas um <database_mirroring_option> é permitido por instrução ALTER DATABASE.

Observação

Recomendamos que configure o espelhamento da base de dados durante as horas fora de ponta, pois a configuração pode afetar o desempenho.

Para opções de ALTER DATABASE, veja ALTER DATABASE. Para opções de ALTERAR CONJUNTO DE BASE DE DADOS, veja ALTERAR DATABASE SET Options.

Transact-SQL convenções de sintaxe

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
            }
  

Arguments

Importante

Um comando SET PARTNER ou SET WITNESS pode ser concluído com sucesso quando introduzido, mas falhar mais tarde.

Observação

As opções de espelhamento da base de dados ALTER DATABASE não estão disponíveis para uma base de dados contida.

database_name É o nome da base de dados a ser modificada.

PARTNER <partner_option> Controla as propriedades da base de dados que definem os parceiros de failover de uma sessão de espelhamento de base de dados e o seu comportamento. Algumas opções de DEFINIR PARCEIROS podem ser definidas em qualquer um dos parceiros; outros estão restritos ao servidor principal ou ao servidor espelho. Para mais informações, consulte as opções individuais de PARCEIRO que se seguem. Uma cláusula SET PARTNER afeta ambas as cópias da base de dados, independentemente do parceiro onde está especificada.

Para executar uma instrução SET PARTNER, o STATE dos endpoints de ambos os parceiros deve ser definido como STARTED. Note-se também que o PAPEL do endpoint de espelhamento da base de dados de cada instância do servidor parceiro deve ser definido para PARTNER ou ALL. Para informações sobre como especificar um endpoint, consulte Criar um Endpoint de Espelhamento de Base de Dados para Autenticação do Windows. Para aprender o papel e o estado do endpoint de espelhamento de base de dados de uma instância de servidor, nessa instância, use a seguinte declaração Transact-SQL:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

<partner_option> ::=

Observação

Apenas uma <partner_option> é permitida por cláusula SET PARTNER.

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

Esta opção é especificada uma vez por sessão em cada parceiro. Iniciar uma sessão de espelhamento de base de dados requer duas instruções ALTERDATABASE database SET PARTNER ='partner_server'. A ordem deles é significativa. Primeiro, ligue-se ao servidor espelho e especifique a instância principal do servidor como partner_server (SET PARTNER ='principal_server'). Segundo, conectar-se ao servidor principal e especificar a instância do servidor espelho como partner_server (SET PARTNER ='mirror_server'); Isto inicia uma sessão de espelhamento de base de dados entre estes dois parceiros. Para mais informações, consulte Configuração do Espelhamento de Base de Dados.

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

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

where

  • <endereço> de sistema é uma cadeia, como um nome de sistema, um nome de domínio totalmente qualificado ou um endereço IP, que identifica inequívocamente o sistema informático de destino.
  • <porta> é um número de porta associado ao endpoint de espelhamento da instância do servidor parceiro.

Para mais informações, consulte Especificar um Endereço de Rede de Servidor - Espelhamento de Base de Dados.

O exemplo seguinte ilustra a cláusula SETPARTNER ='partner_server':

'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'

Importante

Se uma sessão for configurada usando a instrução ALTER DATABASE em vez do SQL Server Management Studio, a sessão é definida para total segurança de transações por defeito (SAFETY está definido para FULL) e corre em modo de alta segurança sem failover automático. Para permitir o failover automático, configure uma testemunha; para funcionar em modo de alto desempenho, desligue a segurança de transações (SAFETY OFF).

FAILOVER Faz failover manualmente do servidor principal para o servidor espelho. Pode especificar FAILOVER apenas no servidor principal. Esta opção só é válida quando a definição de SEGURANÇA está CHEIA (a predefinida).

A opção FAILOVER requer mestre como contexto da base de dados.

FORCE_SERVICE_ALLOW_DATA_LOSS Força o serviço da base de dados para a base de dados espelhada após a falha do servidor principal com a base de dados num estado não sincronizado ou num estado sincronizado quando o failover automático não ocorre.

Recomendamos vivamente que force o serviço apenas se o servidor principal já não estiver a funcionar. Caso contrário, alguns clientes podem continuar a aceder à base de dados principal original em vez da nova base de dados principal. FORCE_SERVICE_ALLOW_DATA_LOSS está disponível apenas no servidor espelho e apenas sob todas as seguintes condições:

  • O servidor principal está em baixo.
  • O WITNESS está definido como OFF ou o witness está ligado ao servidor espelho.

Forçar o serviço apenas se estiver disposto a arriscar perder alguns dados para restaurar o serviço imediatamente na base de dados.

Forçar o serviço suspende a sessão, preservando temporariamente todos os dados na base de dados principal original. Uma vez que o principal original esteja em serviço e possa comunicar com o novo servidor principal, o administrador da base de dados pode retomar o serviço. Quando a sessão recomeça, quaisquer registos de registo não enviados e as respetivas atualizações são perdidos.

DESLIGADO Remove uma sessão de espelhamento da base de dados e remove o espelhamento da base de dados. Podes especificar DESLIGADO em qualquer um dos parceiros. Para mais informações, veja sobre o impacto da remoção do espelhamento, veja Remoção do Espelhamento de Bases de Dados.

RESUME Retoma uma sessão suspensa de espelhamento de base de dados. Pode especificar RESUME apenas no servidor principal.

SEGURANÇA { COMPLETO | OFF } Define o nível de segurança das transações. Pode especificar SEGURANÇA apenas no servidor principal.

O padrão é CHEIO. Com total segurança, a sessão de espelhamento da base de dados corre de forma síncrona (em modo de alta segurança). Se SAFETY estiver definido para DESLIGADO, a sessão de espelhamento da base de dados corre de forma assíncrona (em modo de alto desempenho).

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

  • Quando a segurança está definida para FULL e uma testemunha está definida para a sessão, a sessão decorre em modo de alta segurança com failover automático. Quando o servidor principal é perdido, a sessão faz failover automaticamente se a base de dados estiver sincronizada e a instância do servidor espelho e a testemunha continuarem ligadas entre si (ou seja, tiverem quórum). Para mais informações, consulte Quórum: Como uma Testemunha Afeta a Disponibilidade da Base de Dados - Espelhamento de Bases de Dados.

    Se uma testemunha estiver definida para a sessão mas estiver atualmente desconectada, a perda do servidor espelho faz com que o servidor principal fique em baixa.

  • Quando a segurança está definida para FULL e a testemunha está definida para OFF, a sessão corre em modo de alta segurança sem failover automático. Se a instância do servidor espelho falhar, a instância principal do servidor não é afetada. Se a instância principal do servidor cair, podes forçar o serviço (com possível perda de dados) para a instância do servidor espelho.

  • Se a SEGURANÇA estiver definida para DESLIGADA, a sessão decorre em modo de alto desempenho, e o failover automático e o failover manual não são suportados. No entanto, problemas no espelho não afetam o principal e, se a instância do servidor principal cair, pode, se necessário, forçar o serviço (com possível perda de dados) para a instância do servidor espelho — se o WITNESS estiver definido como OFF ou se o witness estiver atualmente ligado ao espelho. Para mais informações sobre o serviço forçado, consulte "FORCE_SERVICE_ALLOW_DATA_LOSS" mais cedo nesta secção.

Importante

O modo de alto desempenho não se destina a usar uma testemunha. No entanto, sempre que definir SEGURANÇA como DESLIGADO, recomendamos vivamente que certifique-se de que TESTEMUNHA está definido como DESLIGADO.

SUSPEND pausa uma sessão de espelhamento de base de dados.

Podes especificar SUSPEND em qualquer um dos parceiros.

Inteiro TIMEOUT Especifica o período de timeout em segundos. O período de time-out é 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 considerar que essa outra instância está desconectada.

Podes especificar a opção TIMEOUT apenas no servidor principal. Se não especificar esta opção, por defeito, o período de tempo é de 10 segundos. Se especificar 5 ou mais, o período de tempo é definido para o número de segundos especificado. Se especificar um valor de tempo de 0 a 4 segundos, o período de tempo é automaticamente definido para 5 segundos.

Importante

Recomendamos que você mantenha o período de tempo limite em 10 segundos ou mais. Definir o valor para menos de 10 segundos cria a possibilidade de um sistema fortemente carregado perder PINGs e declarar uma falha falsa.

Para mais informações, veja Possíveis Falhas Durante o Espelhamento de Bases de Dados.

WITNESS <witness_option> Controla as propriedades da base de dados que definem uma testemunha espelhada de base de dados. Uma cláusula SET WITNESS afeta ambas as cópias da base de dados, mas pode especificar o SET WITNESS apenas no servidor principal. Se uma testemunha for marcada para uma sessão, é necessário quórum para servir a base de dados, independentemente da definição de SEGURANÇA; para mais informações, consulte Quórum: Como uma Testemunha Afeta a Disponibilidade da Base de Dados - Espelhamento de Bases de Dados.

Recomendamos que os parceiros testemunha e de failover residam em computadores separados. Para informações sobre a testemunha, consulte Testemunha de Espelhamento da Base de Dados.

Para executar uma instrução SET WITNESS, o STATE dos endpoints tanto das instâncias principal como do servidor witness deve ser definido como STARTED. Note-se, também, que o ROLE do endpoint de espelhamento da base de dados de uma instância de servidor witness deve ser definido como WITNESS ou ALL. Para informações sobre como especificar um endpoint, consulte The Database Mirroring Endpoint.

Para aprender o papel e o estado do endpoint de espelhamento de base de dados de uma instância de servidor, nessa instância, use a seguinte declaração Transact-SQL:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

Observação

As propriedades da base de dados não podem ser definidas na testemunha.

<witness_option> ::=

Observação

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

'witness_server' Especifica uma instância do Motor de Base de Dados para atuar como servidor de testemunha para uma sessão de espelhamento de base de dados. Pode especificar instruções SET WITNESS apenas no servidor principal.

Numa instrução SET WITNESS ='witness_server' , a sintaxe de witness_server é a mesma que a sintaxe de partner_server.

OFF Remove a testemunha de uma sessão de espelhamento na base de dados. Definir o testemunho como OFF desativa o failover automático. Se a base de dados estiver em TOTAL SEGURANÇA e a testemunha em DESLIGADO, uma falha no servidor espelho faz com que o servidor principal torne a base de dados indisponível.

Observações

Examples

A. Criar uma sessão de espelhamento de base de dados com uma testemunha

Configurar o espelhamento da base de dados com uma testemunha requer configurar a segurança e preparar a base de dados espelhada, e também usar o ALTER DATABASE para definir os parceiros. Para um exemplo do processo completo de configuração, veja Configurar o Espelhamento de Bases de Dados.

B. Falhar manualmente numa sessão de espelhamento de base de dados

O failover manual pode ser iniciado a partir de qualquer um dos parceiros de espelhamento da base de dados. Antes de fazer failover, deve verificar se o servidor que acredita ser o servidor principal atual é, na verdade, o servidor principal. Por exemplo, para a AdventureWorks2025 base de dados, nessa instância do servidor que pensa 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'AdventureWorks2022';
GO

Se a instância do servidor for de facto o principal, o valor de mirroring_role_desc é Principal. Se esta instância do servidor fosse o servidor espelho, a SELECT instrução retornaria Mirror.

O exemplo seguinte assume que o servidor é o principal atual.

  1. Faça failover manual para o parceiro de espelhamento da base de dados:

    ALTER DATABASE AdventureWorks2022 SET PARTNER FAILOVER;
    GO
    
  2. Para verificar os resultados do failover no novo espelho, 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'AdventureWorks2022';
    GO
    

O valor atual de mirroring_role_desc é agora Mirror.

Ver também