Espelhamento de banco de dados de ALTER DATABASE (Transact-SQL)ALTER DATABASE (Transact-SQL) Database Mirroring

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Observação

Este recurso está em modo de manutenção e talvez seja removido em uma versão futura do Microsoft SQL Server.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Em vez disso, use Grupos de disponibilidade AlwaysOnAlways On availability groups.Use Grupos de disponibilidade AlwaysOnAlways On availability groups instead.

Controla o espelhamento de um banco de dados.Controls database mirroring for a database. 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.Values specified with the database mirroring options apply to both copies of the database and to the database mirroring session as a whole. Apenas um <database_mirroring_option> é permitido por instrução ALTER DATABASE.Only one <database_mirroring_option> is permitted per ALTER DATABASE statement.

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.We recommend that you configure database mirroring during off-peak hours because configuration can affect performance.

Para conhecer as opções de ALTER DATABASE, consulte ALTER DATABASE.For ALTER DATABASE options, see ALTER DATABASE. Para conhecer as opções de ALTER DATABASE SET, consulte Opções de ALTER DATABASE SET.For ALTER DATABASE SET options, see ALTER DATABASE SET Options.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax


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
            }
  

ArgumentosArguments

Importante

Um comando SET PARTNER ou SET WITNESS pode ser concluído com êxito quando digitado, mas falhar posteriormente.A SET PARTNER or SET WITNESS command can complete successfully when entered, but fail later.

Observação

As opções de espelhamento de banco de dados ALTER DATABASE não estão disponíveis para um banco de dados independente.ALTER DATABASE database mirroring options are not available for a contained database.

database_name É o nome do banco de dados a ser modificado.database_name Is the name of the database to be modified.

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.PARTNER <partner_option> Controls the database properties that define the failover partners of a database mirroring session and their behavior. Algumas opções de SET PARTNER podem ser definidas em qualquer parceiro; outros se restringem ao servidor principal ou ao servidor espelho.Some SET PARTNER options can be set on either partner; others are restricted to the principal server or to the mirror server. Para obter mais informações, consulte as opções individuais de PARTNER a seguir.For more information, see the individual PARTNER options that follow. Uma cláusula SET PARTNER afeta ambas as cópias do banco de dados, independentemente do parceiro no qual é especificada.A SET PARTNER clause affects both copies of the database, regardless of the partner on which it is specified.

Para executar uma instrução SET PARTNER, o STATE dos pontos de extremidade de ambos os parceiros deve ser definido como STARTED.To execute a SET PARTNER statement, the STATE of the endpoints of both partners must be set to 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.Note, also, that the ROLE of the database mirroring endpoint of each partner server instance must be set to either PARTNER or ALL. 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.For information about how to specify an endpoint, see Create a Database Mirroring Endpoint for Windows Authentication. 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-SQLTransact-SQL:To learn the role and state of the database mirroring endpoint of a server instance, on that instance, use the following Transact-SQLTransact-SQL statement:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

<partner_option> ::=<partner_option> ::=

Observação

Apenas uma <partner_option> é permitida por cláusula SET PARTNER.Only one <partner_option> is permitted per SET PARTNER clause.

' partner_server ' Especifica o endereço de rede do servidor para uma instância de SQL ServerSQL Server para atuar como um parceiro de failover em uma nova sessão de espelhamento de banco de dados.' partner_server ' Specifies the server network address of an instance of SQL ServerSQL Server to act as a failover partner in a new database mirroring session. Cada sessão requer dois parceiros: um começa como servidor principal e o outro, como servidor espelho.Each session requires two partners: one starts as the principal server, and the other starts as the mirror server. Recomendamos que estes parceiros residam em computadores diferentes.We recommend that these partners reside on different computers.

Esta opção é especificada uma vez por sessão em cada parceiro.This option is specified one time per session on each partner. A inicialização de uma sessão de espelhamento de banco de dados exige duas instruções ALTER DATABASE database SET PARTNER =' partner_server ' .Initiating a database mirroring session requires two ALTER DATABASE database SET PARTNER ='partner_server' statements. A ordem delas é significativa.Their order is significant. Primeiro, conecte ao servidor espelho e especifique a instância de servidor principal como partner_server (SET PARTNER =' principal_server ' ).First, connect to the mirror server, and specify the principal server instance as partner_server (SET PARTNER ='principal_server'). Em segundo lugar, conecte-se 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.Second, connect to the principal server, and specify the mirror server instance as partner_server (SET PARTNER ='mirror_server'); this starts a database mirroring session between these two partners. Para obter mais informações, consulte Configurando o espelhamento de banco de dados.For more information, see Setting Up Database Mirroring.

O valor de partner_server é um endereço de rede do servidor.The value of partner_server is a server network address. Tem a seguinte sintaxe:This has the following syntax:

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

ondewhere

  • <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.<system-address> is a string, such as a system name, a fully qualified domain name, or an IP address, that unambiguously identifies the destination computer system.
  • <port> é um número de porta associado ao ponto de extremidade de espelhamento da instância de servidor parceiro.<port> is a port number that is associated with the mirroring endpoint of the partner server instance.

Para obter mais informações, consulte Especificar um endereço de rede do servidor – espelhamento de banco de dados.For more information, see Specify a Server Network Address - Database Mirroring.

O seguinte exemplo ilustra a cláusulaSET PARTNER =' partner_server ' :The following example illustrates the SET PARTNER ='partner_server' clause:

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

Importante

Se uma sessão for configurada utilizando-se a instrução ALTER DATABASE, em vez de SQL Server Management StudioSQL 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.If a session is set up by using the ALTER DATABASE statement instead of SQL Server Management StudioSQL Server Management Studio, the session is set to full transaction safety by default (SAFETY is set to FULL) and runs in high-safety mode without automatic failover. Para permitir failover automático, configure uma testemunha; para executar em modo de alto desempenho, desative a segurança de transação (SAFETY OFF).To allow automatic failover, configure a witness; to run in high-performance mode, turn off transaction safety (SAFETY OFF).

FAILOVER Efetua failover do servidor principal manualmente para o servidor espelho.FAILOVER Manually fails over the principal server to the mirror server. É possível especificar FAILOVER apenas no servidor principal.You can specify FAILOVER only on the principal server. Esta opção só será válida quando a configuração SAFETY for FULL (o padrão).This option is valid only when the SAFETY setting is FULL (the default).

A opção FAILOVER exige master como o contexto de banco de dados.The FAILOVER option requires master as the database context.

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.FORCE_SERVICE_ALLOW_DATA_LOSS Forces database service to the mirror database after the principal server fails with the database in an unsynchronized state or in a synchronized state when automatic failover does not occur.

É extremamente recomendável que você só force o serviço se o servidor principal não estiver mais em execução.We strongly recommend that you force service only if the principal server is no longer running. Caso contrário, alguns clientes poderão continuar acessando o banco de dados principal original, em vez do novo banco de dados principal.Otherwise, some clients might continue to access the original principal database instead of the new principal database. FORCE_SERVICE_ALLOW_DATA_LOSS só está disponível no servidor espelho e apenas sob as seguintes condições:FORCE_SERVICE_ALLOW_DATA_LOSS is available only on the mirror server and only under all the following conditions:

  • O servidor principal está fora de operação.The principal server is down.
  • WITNESS está definido como OFF ou a testemunha está conectada ao servidor espelho.WITNESS is set to OFF or the witness is connected to the mirror server.

Force o serviço apenas se você estiver disposto a arriscar perder alguns dados para restaurar imediatamente o serviço no banco de dados.Force service only if you are willing to risk losing some data in order to restore service to the database immediately.

Forçar serviço suspende a sessão, preservando todos os dados temporariamente no banco de dados principal original.Forcing service suspends the session, temporarily preserving all the data in the original principal database. 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.Once the original principal is in service and able to communicate with the new principal server, the database administrator can resume service. Quando a sessão retomar, todos os registros de log não enviado e suas atualizações correspondentes serão perdidos.When the session resumes, any unsent log records and the corresponding updates are lost.

OFF Remove uma sessão de espelhamento de banco de dados e o espelhamento de banco de dados.OFF Removes a database mirroring session and removes mirroring from the database. Você pode especificar OFF em qualquer parceiro.You can specify OFF on either partner. Para obter informações sobre o impacto da remoção do espelhamento, consulte Removendo o espelhamento de banco de dados.For information, see about the impact of removing mirroring, see Removing Database Mirroring.

RESUME Retoma uma sessão de espelhamento de banco de dados suspensa.RESUME Resumes a suspended database mirroring session. É possível especificar RESUME apenas no servidor principal.You can specify RESUME only on the principal server.

SAFETY { FULL | OFF } Define o nível de segurança da transação.SAFETY { FULL | OFF } Sets the level of transaction safety. É possível especificar SAFETY apenas no servidor principal.You can specify SAFETY only on the principal server.

O padrão é FULL.The default is 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).With full safety, the database mirroring session runs synchronously (in high-safety mode). 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).If SAFETY is set to OFF, the database mirroring session runs asynchronously (in high-performance mode).

O comportamento do modo de alta segurança depende, em parte, da testemunha, como segue:The behavior of high-safety mode depends partly on the witness, as follows:

  • 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.When safety is set to FULL and a witness is set for the session, the session runs in high-safety mode with automatic failover. 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).When the principal server is lost, the session automatically fails over if the database is synchronized and the mirror server instance and witness are still connected to each other (that is, they have quorum). Para obter mais informações, confira Quorum: como uma testemunha afeta a disponibilidade do banco de dados – Espelhamento de banco de dados.For more information, see Quorum: How a Witness Affects Database Availability - Database Mirroring.

    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.If a witness is set for the session but is currently disconnected, the loss of the mirror server causes the principal server to go down.

  • 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.When safety is set to FULL and the witness is set to OFF, the session runs in high-safety mode without automatic failover. Se a instância de servidor espelho cair, a instância de servidor principal não será afetada.If the mirror server instance goes down, the principal server instance is unaffected. 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.If the principal server instance goes down, you can force service (with possible data loss) to the mirror server instance.

  • 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.If SAFETY is set to OFF, the session runs in high-performance mode, and automatic failover and manual failover are not supported. 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.However, problems on the mirror do not affect the principal, and if the principal server instance goes down, you can, if necessary, force service (with possible data loss) to the mirror server instance-if WITNESS is set to OFF or the witness is currently connected to the mirror. Para obter mais informações sobre como forçar o serviço, consulte "FORCE_SERVICE_ALLOW_DATA_LOSS" anteriormente, nesta seção.For more information on forcing service, see "FORCE_SERVICE_ALLOW_DATA_LOSS" earlier in this section.

Importante

Não se pretende que o modo de alto desempenho use uma testemunha.High-performance mode is not intended to use a witness. Porém, sempre que definir SAFETY como OFF, é altamente recomendável que você verifique se WITNESS está definido como OFF.However, whenever you set SAFETY to OFF, we strongly recommend that you ensure that WITNESS is set to OFF.

SUSPEND Pausa uma sessão de espelhamento de banco de dados.SUSPEND Pauses a database mirroring session.

Você pode especificar SUSPEND em qualquer parceiro.You can specify SUSPEND on either partner.

TIMEOUT integer Especifica o tempo limite, em segundos.TIMEOUT integer Specifies the time-out period in seconds. 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.The time-out period is the maximum time that a server instance waits to receive a PING message from another instance in the mirroring session before considering that other instance to be disconnected.

Você só pode especificar a opção TIMEOUT no servidor principal.You can specify the TIMEOUT option only on the principal server. Se você não especificar essa opção, por padrão, o período de tempo será de 10 segundos.If you do not specify this option, by default, the time period is 10 seconds. Se você especificar 5 ou mais, o tempo limite será definido como o número de segundos especificado.If you specify 5 or greater, the time-out period is set to the specified number of seconds. Se você especificar um valor de tempo limite de 0 a 4 segundos, o período será definido automaticamente como 5 segundos.If you specify a time-out value of 0 to 4 seconds, the time-out period is automatically set to 5 seconds.

Importante

Recomendamos que você mantenha o tempo limite em 10 segundos ou mais.We recommend that you keep the time-out period at 10 seconds or greater. Definir o valor como menos de 10 segundos cria a possibilidade de um sistema extremamente carregado perdendo PINGs e declarando uma falsa falha.Setting the value to less than 10 seconds creates the possibility of a heavily loaded system missing PINGs and declaring a false failure.

Para obter mais informações, veja Possíveis falhas durante o espelhamento de banco de dados.For more information, see Possible Failures During Database Mirroring.

WITNESS <witness_option> Controla as propriedades de banco de dados que definem uma testemunha de espelhamento de banco de dados.WITNESS <witness_option> Controls the database properties that define a database mirroring witness. Uma cláusula SET WITNESS afeta ambas as cópias do banco de dados, mas você só pode especificar SET WITNESS no servidor principal.A SET WITNESS clause affects both copies of the database, but you can specify SET WITNESS only on the principal server. 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.If a witness is set for a session, quorum is required to serve the database, regardless of the SAFETY setting; for more information, see Quorum: How a Witness Affects Database Availability - Database Mirroring.

Recomendamos que a testemunha e os parceiros de failover residam em computadores separados.We recommend that the witness and failover partners reside on separate computers. Para obter informações sobre a testemunha, consulte Testemunha de espelhamento de banco de dados.For information about the witness, see Database Mirroring Witness.

Para executar uma instrução SET WITNESS, o STATE dos pontos de extremidade das instâncias do servidor testemunha e principal deve ser definido como STARTED.To execute a SET WITNESS statement, the STATE of the endpoints of both the principal and witness server instances must be set to STARTED. Observe, 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.Note, also, that the ROLE of the database mirroring endpoint of a witness server instance must be set to either WITNESS or ALL. Para obter informações sobre como especificar um ponto de extremidade, consulte O ponto de extremidade de espelhamento de banco de dados.For information about specifying an endpoint, see The Database Mirroring Endpoint.

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-SQLTransact-SQL:To learn the role and state of the database mirroring endpoint of a server instance, on that instance, use the following Transact-SQLTransact-SQL statement:

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.Database properties cannot be set on the witness.

<witness_option> ::=<witness_option> ::=

Observação

Apenas uma <witness_option> é permitida por cláusula SET WITNESS.Only one <witness_option> is permitted per SET WITNESS clause.

' witness_server ' Especifica uma instância do Mecanismo de Banco de DadosDatabase Engine para atuar como servidor testemunha de uma sessão de espelhamento de banco de dados.' witness_server ' Specifies an instance of the Mecanismo de Banco de DadosDatabase Engine to act as the witness server for a database mirroring session. Você só pode especificar instruções SET WITNESS no servidor principal.You can specify SET WITNESS statements only on the principal server.

Em uma instrução SET WITNESS =' witness_server ' , a sintaxe de witness_server é igual à sintaxe de partner_server.In a SET WITNESS ='witness_server' statement, the syntax of witness_server is the same as the syntax of partner_server.

OFF Remove a testemunha de uma sessão de espelhamento de banco de dados.OFF Removes the witness from a database mirroring session. Definir a testemunha como OFF desabilita o failover automático.Setting the witness to OFF disables automatic failover. 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.If the database is set to FULL SAFETY and the witness is set to OFF, a failure on the mirror server causes the principal server to make the database unavailable.

RemarksRemarks

ExemplosExamples

A.A. Criando uma sessão de espelhamento de banco de dados com uma testemunhaCreating a database mirroring session with a witness

A definição do espelhamento de banco de dados com testemunha requer a configuração da segurança e a preparação do banco de dados espelho, além do uso de ALTER DATABASE para definir os parceiros.Setting up database mirroring with a witness requires configuring security and preparing the mirror database, and also using ALTER DATABASE to set the partners. Para obter um exemplo do processo completo de instalação, consulte Configurando o espelhamento de banco de dados.For an example of the complete setup process, see Setting Up Database Mirroring.

B.B. Efetuando manualmente o failover de uma sessão de espelhamento de banco de dadosManually failing over a database mirroring session

O failover manual pode ser iniciado a partir de qualquer parceiro de espelhamento de banco de dados.Manual failover can be initiated from either database mirroring partner. Antes de efetuar o failover, você deve verificar se o servidor que se acredita ser o servidor principal atual o é de fato.Before failing over, you should verify that the server you believe to be the current principal server actually is the principal server. Por exemplo, para o banco de dados AdventureWorks2012AdventureWorks2012, na instância de servidor que se acredita ser o servidor principal atual, execute a seguinte consulta:For example, for the AdventureWorks2012AdventureWorks2012 database, on that server instance that you think is the current principal server, execute the following query:

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'AdventureWorks2012';
GO

Se a instância do servidor for realmente a principal, o valor de mirroring_role_desc será Principal.If the server instance is in fact the principal, the value of mirroring_role_desc is Principal. Se essa instância de servidor fosse o servidor espelho, a instrução SELECT retornaria Mirror.If this server instance were the mirror server, the SELECT statement would return Mirror.

O exemplo a seguir presume que o servidor seja o principal atual.The following example assumes that the server is the current principal.

  1. Efetue manualmente o failover no parceiro de espelhamento de banco de dados:Manually fail over to the database mirroring partner:

    ALTER DATABASE AdventureWorks2012 SET PARTNER FAILOVER;
    GO
    
  2. Para verificar os resultados do failover no espelho novo, execute a seguinte consulta:To verify the results of the failover on the new mirror, execute the following query:

    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'AdventureWorks2012';
    GO
    

O valor atual de mirroring_role_desc agora é Mirror.The current value of mirroring_role_desc is now Mirror.

Consulte TambémSee Also