Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se:SQL Server
Observação
Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Use Grupos de disponibilidade AlwaysOn em vez disso.
Controla o espelhamento de um banco de dados. Valores especificados com as opções de espelhamento de banco de dados aplicam-se 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 ALTER DATABASE declaração.
Observação
Recomendamos configurar um espelhamento de banco de dados fora do período do pico de atividade, pois a configuração pode comprometer o desempenho.
Para opções ALTER DATABASE , veja ALTER DATABASE. Para opções ALTER DATABASE SET , veja ALTER DATABASE SET Opções.
Convenções de sintaxe de 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
Importante
Um SET comando PARCEIRO ou SET TESTEMUNHA pode ser concluído com sucesso quando inserido, mas falhar depois.
Observação
ALTER DATABASE Opções de espelhamento de banco de dados não estão disponíveis para um banco de dados contido.
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 SET opções de PARCEIRO podem ser definidas em qualquer um dos parceiros; outras são restritas ao servidor principal ou ao servidor espelho. Para obter mais informações, consulte as opções individuais de PARTNER a seguir. Uma SET cláusula PARTNER afeta ambas as cópias do banco de dados, independentemente do parceiro em que ela esteja especificada.
Para executar uma SET instrução PARTNER, o ESTADO dos pontos de extremidade de ambos os parceiros deve ser definido como STARTED. Note também que o ROLE endpoint de espelhamento do banco de dados de cada instância de servidor parceiro deve ser definido como PARCEIRO ou TODOS. Para obter informações sobre como especificar um ponto de extremidade, consulte Criar um ponto de extremidade de espelhamento de banco de dados para a Autenticação do Windows. 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ção
Apenas uma <partner_option> é permitida conforme SET a cláusula do SÓCIO.
'partner_server' Especifica o endereço de rede do 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 ALTER DATABASEinstruções PARTNER='partner_server' do banco de dadosSET. A ordem delas é significativa. Primeiro, conecte-se ao servidor espelho e especifique a instância principal do servidor como partner_server (SET PARTNER ='principal_server'). Segundo, conecte-se ao servidor principal e especifique a instância do servidor espelho como partner_server (SET PARCEIRO ='mirror_server'); isso inicia uma sessão de espelhamento de banco de dados entre esses dois parceiros. Para obter mais informações, consulte Configurando o espelhamento de banco de dados.
O valor de partner_server é um endereço de rede do servidor. Tem a seguinte sintaxe:
TCP**://<system-address>:**<porta>
onde
- <system-address> é uma cadeia de caracteres, como um nome do sistema, um nome de domínio totalmente qualificado ou um endereço IP, que identifica de forma exclusiva o sistema do 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 Especificar um endereço de rede do servidor – espelhamento de banco de dados.
O exemplo a seguir ilustra a SETcláusula PARTNER='partner_server':
'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'
Importante
Se uma sessão for configurada usando a ALTER DATABASE instrução em vez do SQL Server Management Studio, a sessão é definida como segurança total de transações por padrão (SAFETY está definido como FULL) e roda 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 FAILOVER exige master como o contexto de banco de dados.
FORCE_SERVICE_ALLOW_DATA_LOSS Força o serviço de banco de dados no banco de dados espelho depois que o servidor principal falha com o banco de dados em estado não sincronizado ou em estado 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.
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á retomar o serviço. Quando a sessão retomar, todos os registros de log não enviado e suas atualizações correspondentes serão perdidos.
OFF Remove uma sessão de espelhamento de banco de dados e o espelhamento de banco de dados. Você pode especificar OFF em qualquer parceiro. Para obter informações sobre o impacto da remoção do espelhamento, consulte Removendo o espelhamento de banco de dados.
RESUME Retoma uma sessão de espelhamento de banco de dados suspensa. É possível especificar RESUME apenas no servidor principal.
SAFETY { FULL | OFF } Define o nível de segurança da 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 de maneira síncrona (em modo de segurança alta). Se SAFETY for definido como OFF, a sessão de espelhamento de banco de dados será executada de forma assíncrona (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, confira Quorum: como uma testemunha afeta a disponibilidade do banco de dados – Espelhamento de 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 está definida como FULL e a testemunha está 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 estiver 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 o serviço, consulte "FORCE_SERVICE_ALLOW_DATA_LOSS" anteriormente, nesta seção.
Importante
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ê verifique se WITNESS está definido como OFF.
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.
Importante
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, veja Possíveis falhas durante o 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 WITNESS afeta SET ambas as cópias do banco de dados, mas você pode especificar SET WITNESS apenas 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, confira Quorum: como uma testemunha afeta a disponibilidade do banco de dados – Espelhamento de 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 executar uma SET instrução WITNESS, o ESTADO dos endpoints tanto das instâncias principal quanto do servidor witness deve ser definido como START. Note também que o ROLE endpoint de espelhamento do banco de dados de uma instância de servidor witness deve ser definido como WITNESS ou ALL. Para obter informações sobre como especificar um ponto de extremidade, consulte O 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ção
As propriedades do banco de dados não podem ser definidas na testemunha.
<witness_option> ::=
Observação
Apenas um <witness_option> é permitido conforme SET a cláusula de TESTEMUNHA.
'witness_server' Especifica uma instância do Mecanismo de Banco de Dados para atuar como servidor testemunha para uma sessão de espelhamento de banco de dados. Você pode especificar SET declarações WITNESS apenas no servidor principal.
Em uma SET afirmação WITNESS ='witness_server' , a sintaxe de witness_server é a mesma da 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.
Comentários
Exemplos
a. Criando uma sessão de espelhamento de banco de dados com uma testemunha
Configurar o espelhamento de banco de dados com uma testemunha exige configurar a segurança e preparar o banco de dados espelhado, além de usar ALTER DATABASE para definir os parceiros. Para obter um exemplo do processo completo de instalação, consulte Configurando o 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 AdventureWorks2025, 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'AdventureWorks2022';
GO
Se a instância do 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.
Efetue manualmente o failover no parceiro de espelhamento de banco de dados:
ALTER DATABASE AdventureWorks2022 SET PARTNER FAILOVER; GOPara 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'AdventureWorks2022'; GO
O valor atual de mirroring_role_desc agora é Mirror.