Compartilhar via


sys.dm_hadr_database_replica_states (Transact-SQL)

Aplica-se a: Instância Gerenciada de SQL do Azure do SQL Server

Retorna uma linha para cada banco de dados que está participando de um grupo de disponibilidade Always On para o qual a instância local do SQL Server hospeda uma réplica de disponibilidade. Essa exibição de gerenciamento dinâmico expõe informações de estado nas réplicas primárias e secundárias. Em uma réplica secundária, essa exibição retorna uma linha para cada banco de dados secundário na instância do servidor. Na réplica primária, essa exibição retorna uma linha para cada banco de dados primário e uma linha adicional para o banco de dados secundário correspondente.

Importante

Dependendo da ação dos estados de nível mais alto, as informações de estado do banco de dados podem estar indisponíveis ou desatualizadas. Além disso, os valores têm relevância local apenas. Por exemplo, na réplica primária, o valor da coluna last_hardened_lsn reflete as informações sobre um determinado banco de dados secundário que está disponível no momento para a réplica primária, não o valor LSN protegido real que a réplica secundária pode ter atualmente.

Nome da coluna Tipo de dados Descrição (sobre a réplica primária)
database_id int O identificador do banco de dados, exclusivo em uma instância do SQL Server. Esse é o mesmo valor exibido na exibição do catálogo sys.databases .
group_id uniqueidentifier O identificador do grupo de disponibilidade ao qual o banco de dados pertence.
replica_id uniqueidentifier O identificador da réplica de disponibilidade dentro do grupo de disponibilidade.
group_database_id uniqueidentifier O identificador do banco de dados dentro do grupo de disponibilidade. Esse identificador é idêntico em cada réplica à qual este banco de dados é unido.
is_local bit Se o banco de dados de disponibilidade é local, um dos seguintes:

0 = O banco de dados não é local para a instância do SQL Server.

1 = O banco de dados é local para a instância do servidor.
is_primary_replica bit Retorna 1 se a réplica for primária, ou 0 se for uma réplica secundária.

Aplica-se a: SQL Server 2014 (12.x) e posterior.
synchronization_state tinyint Data-movement state, um dos valores a seguir.

0 = Não sincronizando. Para um banco de dados primário, indica que o banco de dados não está pronto para sincronizar seu log de transações com os bancos de dados secundários correspondentes. Para um banco de dados secundário, indica que o banco de dados não iniciou a sincronização de log devido a um problema de conexão, está sendo suspenso ou está passando por estados de transição durante a inicialização ou uma troca de função.

1 = Sincronização. Para um banco de dados primário, indica que o banco de dados está pronto para aceitar uma solicitação de exame de um banco de dados secundário. Para um banco de dados secundário, indica que o movimento de dados ativo está ocorrendo para o banco de dados.

2 = Sincronizado. Um banco de dados primário mostra SYNCHRONIZED em vez de SYNCHRONIZING. Um banco de dados secundário de confirmação síncrona mostrará sincronizado quando o cache local informar que o banco de dados está pronto para failover e quando está sincronizando.

3 = Revertendo. Indica a fase do processo de desfazer em que um banco de dados secundário está obtendo páginas ativamente do banco de dados primário.
Cuidado: quando um banco de dados em uma réplica secundária está no estado REVERTING, forçar o failover para a réplica secundária deixa o banco de dados em um estado no qual ele não pode ser iniciado como um banco de dados primário. O banco de dados precisará ser reconectado como um banco de dados secundário ou você precisará aplicar novos registros de log de um backup de log.

4 = Inicializando. Indica a fase de desfazer em que o log de transações que exigiu que um banco de dados secundário ficasse em dia com o LSN de desfazer está sendo enviado e protegido em uma réplica secundária.
Cuidado: quando um banco de dados em uma réplica secundária está no estado INITIALIZING, forçar o failover para a réplica secundária deixa o banco de dados em um estado no qual ele não pode ser iniciado como um banco de dados primário. O banco de dados precisará ser reconectado como um banco de dados secundário ou você precisará aplicar novos registros de log de um backup de log.
synchronization_state_desc nvarchar(60) Descrição do estado da movimentação de dados, um dos seguintes:

NOT SYNCHRONIZING

SYNCHRONIZING

SYNCHRONIZED

REVERTING

INITIALIZING
is_commit_participant bit 0 = A confirmação da transação não está sincronizada em relação a este banco de dados.

1 = A confirmação da transação está sincronizada em relação a este banco de dados.

Para um banco de dados em uma réplica de disponibilidade de confirmação assíncrona, este valor é sempre 0.

Para um banco de dados em uma réplica de disponibilidade de confirmação síncrona, este valor é preciso somente no banco de dados primário.
synchronization_health tinyint Reflete a interseção do estado de sincronização de um banco de dados ingressado no grupo de disponibilidade na réplica de disponibilidade e o modo de disponibilidade da réplica de disponibilidade (modo de confirmação síncrona ou confirmação assíncrona), um dos valores a seguir.

0 = Não íntegro. A synchronization_state do banco de dados é 0 (NÃO SINCRONIZANDO).

1 = Parcialmente saudável. Um banco de dados em uma réplica de disponibilidade de confirmação síncrona será considerado parcialmente íntegro se synchronization_state for 1 (SYNCHRONIZING).

2 = Saudável. Um banco de dados em uma réplica de disponibilidade de confirmação síncrona será considerado íntegro se synchronization_state for 2 (SYNCHRONIZED) e um banco de dados em uma réplica de disponibilidade de confirmação assíncrona será considerado íntegro se synchronization_state for 1 (SYNCHRONIZING).
synchronization_health_desc nvarchar(60) Descrição do synchronization_health do banco de dados de disponibilidade.

NOT_HEALTHY

PARTIALLY_HEALTHY

HEALTHY
database_state tinyint 0 = Online

1 = Restaurando

2 = Recuperando

3 = Recuperação pendente

4 = Suspeito

5 = Emergência

6 = Offline

Observação: o mesmo que a coluna de estado em sys.databases.
database_state_desc nvarchar(60) Descrição do database_state da réplica de disponibilidade.

ONLINE

RESTORING

RECOVERING

RECOVERY_PENDING

SUSPECT

EMERGENCY

OFFLINE

Observação: o mesmo que state_desc a coluna em sys.databases.
is_suspended bit Estado do banco de dados, um dos seguintes:

0 - Retomado

1 = Suspenso
suspend_reason tinyint Se o banco de dados estiver suspenso, o motivo do estado de suspensão, um dos seguintes:

0 = Ação do usuário

1 = Suspensão do parceiro

2 = Refazer

3 = Capturar

4 = Aplicar

5 = Reiniciar

6 = Desfazer

7 = Revalidação

8 = Erro no cálculo do ponto de sincronização da réplica secundária
suspend_reason_desc nvarchar(60) Descrição do motivo do estado da suspensão do banco de dados, um dos seguintes:

SUSPEND_FROM_USER = Uma movimentação de dados suspensa manualmente pelo usuário

SUSPEND_FROM_PARTNER = A réplica do banco de dados é suspensa após um failover forçado

SUSPEND_FROM_REDO = Ocorreu um erro durante a fase refazer

SUSPEND_FROM_APPLY = Ocorreu um erro durante a gravação do log no arquivo (consulte o log de erros)

SUSPEND_FROM_CAPTURE = Ocorreu um erro durante a captura do log na réplica primária

SUSPEND_FROM_RESTART = A réplica do banco de dados foi suspensa antes da reinicialização do banco de dados (consulte o log de erros)

SUSPEND_FROM_UNDO = Ocorreu um erro durante a fase desfazer (consulte o log de erros)

SUSPEND_FROM_REVALIDATION = Incompatibilidade de alteração de log detectada na reconexão (consulte o log de erros)

SUSPEND_FROM_XRF_UPDATE = Não é possível localizar o ponto de log comum (consulte o log de erros)
recovery_lsn numeric(25,0) Na réplica primária, o final do log de transações antes de o banco de dados primário gravar outro novo registro de log depois da recuperação ou do failover. Para um determinado banco de dados secundário, se esse valor for menor que o LSN protegido atual (last_hardened_lsn), recovery_lsn será o valor para o qual esse banco de dados secundário precisaria ser ressincronizado (ou seja, reverter e reinicializar). Se este valor for maior que ou igual ao LSN protegido atual, a ressincronização será desnecessária e não ocorrerá.

O recovery_lsn reflete uma ID de bloco de log preenchida com zeros. Não é um LSN (número de sequência de log) real. Para obter informações sobre como esse valor é derivado, consulte Noções básicas sobre os valores da coluna LSN, mais adiante neste tópico.
truncation_lsn numeric(25,0) Na réplica primária, para o banco de dados primário, reflete o LSN de truncamento de log mínimo em todos os bancos de dados secundários correspondentes. Se o truncamento de log local estiver bloqueado (como por uma operação de backup), esse LSN poderá ser mais alto que o LSN de truncamento local.

Para um determinado banco de dados secundário, reflete o ponto de truncamento desse banco de dados.

truncation_lsn reflete uma ID de bloco de log preenchida com zeros. Não é um número de sequência de log real.
last_sent_lsn numeric(25,0) Ao consultar a réplica primária, last_sent_lsn é relatado para cada linha do banco de dados de réplica secundária. O identificador do bloco de log que indica o ponto até o qual todos os blocos de log foram enviados pela primária. Esta é a ID do próximo bloco de log que será enviado, em vez da ID do bloco de log enviado mais recentemente.

last_sent_lsn reflete um ID de bloco de log preenchido com zeros, não é um número de sequência de log real.
last_sent_time datetime Ao consultar a réplica primária, last_sent_time é relatado para cada linha do banco de dados de réplica secundária. A hora em que o último bloco de log foi enviado.
last_received_lsn numeric(25,0) Ao consultar uma réplica secundária, last_received_lsn é relatado para a linha do banco de dados de réplica secundária local. Id de bloco de log que identifica o ponto até o qual todos os blocos de log foram recebidos pela réplica secundária que hospeda este banco de dados secundário.

O last_received_lsn reflete uma ID de bloco de log preenchida com zeros. Não é um número de sequência de log real.
last_received_time datetime Ao consultar uma réplica secundária, last_received_time é relatado para a linha do banco de dados de réplica secundária local. A hora em que a ID do bloco de log na última mensagem recebida foi lido na réplica secundária.
last_hardened_lsn numeric(25,0) Início do Bloco de Log que contém os registros de log do último LSN de proteção em um banco de dados secundário.

Em um banco de dados primário de confirmação assíncrona ou em um banco de dados de confirmação síncrona cuja política atual é "atraso", o valor é o NULL. Para outros bancos de dados primários de confirmação síncrona, last_hardened_lsn indica o mínimo do LSN protegido em todos os bancos de dados secundários.

Nota: reflete last_hardened_lsn um ID de bloco de log preenchido com zeros. Não é um número de sequência de log real. Para obter mais informações, consulte Noções básicas sobre os valores da coluna LSN, mais adiante neste tópico.
last_hardened_time datetime Em um banco de dados secundário, a hora do identificador de bloco de log para o último LSN protegido (last_hardened_lsn). Em um banco de dados primário, reflete a hora que corresponde ao LSN de proteção mínimo.
last_redone_lsn numeric(25,0) O número de sequência de log real do último registro de log que foi desfeito no banco de dados secundário. O last_redone_lsn é sempre menor que last_hardened_lsn.
last_redone_time datetime A hora em que o último registro de log foi refeito no banco de dados secundário.
log_send_queue_size bigint Quantidade de registros de log do banco de dados primário que não foram enviados aos bancos de dados secundários, em KB (kilobytes).
log_send_rate bigint Taxa média na qual a instância de réplica primária enviou dados durante o último período ativo, em quilobytes (KB)/segundo.
redo_queue_size bigint A quantidade de registros de log nos arquivos de log da réplica secundária que ainda não foram refeitos, em KB.
redo_rate bigint Taxa média na qual os registros de log estão sendo refeitos em um determinado banco de dados secundário, em quilobytes (KB)/segundo.

redo_rate é calculado dividindo o total de bytes de log refeitos desde a inicialização do mecanismo de banco de dados pelo intervalo de tempo em que o redo estava em execução ativamente, em vez de pelo tempo decorrido. Como refazer pode não estar sendo executado continuamente, o valor resultante pode ser diferente (maior) do que o valor do contador de Database Replica:Redone Bytes/sec desempenho.
filestream_send_rate bigint A taxa na qual os arquivos FILESTREAM são enviados à réplica secundária, em KB/segundo.
end_of_log_lsn numeric(25,0) O fim do log do LSN local. O LSN real que corresponde ao último registro de log no cache de log nos bancos de dados primário e secundário. Na réplica primária, as linhas secundárias refletem o fim do log do LSN das mensagens de progresso mais recentes que as réplicas secundárias enviaram à réplica primária.

end_of_log_lsn reflete uma ID de bloco de log preenchida com zeros. Não é um número de sequência de log real. Para obter mais informações, consulte Noções básicas sobre os valores da coluna LSN, mais adiante neste tópico.
last_commit_lsn Numérico(25,0) O número de sequência de log real que corresponde ao último registro de confirmação no log de transações.

No banco de dados primário, corresponde ao último registro de confirmação processado. As linhas para bancos de dados secundários mostram o número de sequência de log que a réplica secundária enviou para a primária.

Na réplica secundária, é o último registro de confirmação refeito.
last_commit_time datetime A hora correspondente ao último registro de confirmação.

No banco de dados secundário, essa hora é a mesma do banco de dados primário.

Na réplica primária, cada linha de banco de dados secundário exibe a hora em que a réplica secundária que hospeda aquele banco de dados secundário relatou de volta para a réplica primária. A diferença de tempo entre a linha do banco de dados primário e uma determinada linha do banco de dados secundário representa aproximadamente o RPO (objetivo de ponto de recuperação), supondo que o processo de restauração seja atualizado e que o progresso tenha sido relatado de volta à réplica primária pela réplica secundária.
low_water_mark_for_ghosts bigint Um número aumentado de maneira constante para o banco de dados, que indica uma marca d'água inferior usada pela limpeza de fantasma no banco de dados primário. Se esse número não estiver aumentando ao longo do tempo, isso indicará que a limpeza fantasma talvez não esteja ocorrendo. Para decidir quais linhas fantasmas devem ser limpas, a réplica primária usa o valor mínimo dessa coluna para este banco de dados em todas as réplicas de disponibilidade (inclusive a réplica primária).
secondary_lag_seconds bigint O número de segundos que a réplica secundária está atrás da réplica primária durante a sincronização.

Na réplica primária, o atraso de sincronização (lag) de cada banco de dados secundário é calculado como o número de segundos desde o fortalecimento do LSN protegido mais antigo na réplica primária que ainda não foi protegido na réplica secundária.

Aplica-se a: SQL Server 2016 (13.x) e posterior.

Entender os valores da coluna LSN

Os valores das colunas end_of_log_lsn, last_hardened_lsn, last_received_lsn, last_sent_lsn, recovery_lsn e truncation_lsn não são LSNs (números de sequência de log) reais. Em vez disso, cada um desses valores reflete uma ID de bloco de log preenchida com zeros.

end_of_log_lsn, last_hardened_lsn e recovery_lsn são LSNs nivelados. Por exemplo, last_hardened_lsn indica o início do próximo bloco após os blocos que já estão no disco. Portanto, qualquer LSN < com o valor de last_hardened_lsn está no disco. LSN que são >= para esse valor não são liberados.

Dos valores de LSN retornados pelo sys.dm_hadr_database_replica_states, apenas last_redone_lsn é um LSN real.

Permissões

, é necessário ter permissão VIEW SERVER STATE no servidor.

Permissões do SQL Server 2022 e posteriores

É necessária a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Confira também

Grupos de Disponibilidade AlwaysOn (SQL Server)
Monitorar grupos de disponibilidade (Transact-SQL)