sys.dm_hadr_database_replica_states (Transact-SQL)

Si applica a: SQL Server Istanza gestita di SQL di Azure

Restituisce una riga per ogni database che partecipa a un gruppo di disponibilità Always On per il quale l'istanza locale di SQL Server ospita una replica di disponibilità. Questa DMV espone informazioni sullo stato sia sulle repliche primarie sia su quelle secondarie. Su una replica secondaria, questa vista restituisce una riga per ogni database secondario sull'istanza del server. Nella replica primaria questa vista restituisce una riga per ogni database primario e una riga aggiuntiva per il database secondario corrispondente.

Importante

A seconda dell'azione e degli stati di livello superiore, le informazioni sullo stato del database potrebbero non essere disponibili o non aggiornate. I valori hanno inoltre pertinenza esclusivamente locale. Ad esempio, nella replica primaria, il valore della last_hardened_lsn colonna riflette le informazioni su un database secondario specifico attualmente disponibile per la replica primaria, non il numero di sequenza di log con protezione avanzata effettiva (LSN) attualmente disponibile per la replica secondaria.

Nome colonna Tipo di dati Descrizione (sulla replica primaria)
database_id int Identificatore del database, univoco in un'istanza di SQL Server. Si tratta dello stesso valore visualizzato nella vista del catalogo sys.databases .
group_id uniqueidentifier Identificatore del gruppo di disponibilità a cui appartiene il database.
replica_id uniqueidentifier Identificatore della replica di disponibilità all'interno del gruppo di disponibilità.
group_database_id uniqueidentifier Identificatore del database nel gruppo di disponibilità. L'identificatore è identico su ogni replica a cui è stato aggiunto questo database.
is_local bit Se il database di disponibilità è locale, uno di:

0 = Il database non è locale per l'istanza di SQL Server.
1 = Il database è locale per l'istanza del server.
is_primary_replica bit Restituisce 1 se la replica è primaria o 0 se si tratta di una replica secondaria.

Si applica a: SQL Server 2014 (12.x) e versioni successive.
synchronization_state tinyint Stato di spostamento dei dati, uno dei valori seguenti.

0 = Non sincronizzata. Per un database primario, indica che il database non è pronto per sincronizzare il log delle transazioni con i database secondari corrispondenti. Per un database secondario, questo valore indica che il database non ha avviato la sincronizzazione dei log a causa di un problema di connessione, viene sospeso o passa attraverso stati di transizione durante l'avvio o un cambio di ruolo.

1 = Sincronizzazione. Per un database primario, indica che il database è pronto ad accettare una richiesta di analisi da un database secondario. Per un database secondario, indica che è in corso uno spostamento dati attivo per il database.

2 = Sincronizzato. Un database primario viene visualizzato SYNCHRONIZED al posto di SYNCHRONIZING. Un database secondario con commit sincrono risulta essere nello stato sincronizzato se nella cache locale il database è pronto per il failover ed è in corso la sincronizzazione.

3 = Ripristino. Indica la fase del processo di rollback in cui un database secondario ottiene attivamente le pagine dal database primario.

Attenzione: quando un database in una replica secondaria è nello REVERTING stato , forzare il failover nella replica secondaria lascia il database in uno stato in cui non può essere avviato come database primario. Il database deve riconnettersi come database secondario oppure è necessario applicare nuovi record di log da un backup del log.

4 = Inizializzazione. Indica la fase di rollback in cui il log delle transazioni necessario a un database secondario per l'intercettazione dell'LSN di rollback viene fornito e finalizzato su una replica secondaria.

Attenzione: quando un database in una replica secondaria è nello INITIALIZING stato , forzare il failover nella replica secondaria lascia il database in uno stato in cui non può essere avviato come database primario. Il database deve riconnettersi come database secondario oppure è necessario applicare nuovi record di log da un backup del log.
synchronization_state_desc nvarchar(60) Descrizione dello stato di spostamento dei dati, uno di:

NOT SYNCHRONIZING
SYNCHRONIZING
SYNCHRONIZED
REVERTING
INITIALIZING
is_commit_participant bit 0 = Il commit della transazione non è sincronizzato rispetto a questo database.

1 = Il commit della transazione viene sincronizzato rispetto a questo database.

Per un database in una replica di disponibilità con commit asincrono, questo valore è sempre 0.

Per un database in una replica di disponibilità con commit sincrono, questo valore è preciso solo nel database primario.
synchronization_health tinyint Riflette l'intersezione dello stato di sincronizzazione di un database aggiunto al gruppo di disponibilità nella replica di disponibilità e la modalità di disponibilità della replica di disponibilità (modalità con commit sincrono o commit asincrono). Può essere uno dei valori seguenti.

0 = Non integro. L'oggetto synchronization_state del database è 0 (NOT SYNCHRONIZING).

1 = Parzialmente integro. Un database in una replica di disponibilità con commit sincrono viene considerato parzialmente integro se synchronization_state è 1 (SYNCHRONIZING).

2 = Integro. Un database in una replica di disponibilità con commit sincrono viene considerato integro se è () e un database in una replica di disponibilità con commit asincrono viene considerato integro se synchronization_state synchronization_state è 1 (SYNCHRONIZING).SYNCHRONIZED2
synchronization_health_desc nvarchar(60) Descrizione dell'oggetto synchronization_health del database di disponibilità.

NOT_HEALTHY
PARTIALLY_HEALTHY
HEALTHY
database_state tinyint 0 = Online
1 = Ripristino
2 = Ripristino
3 = Recupero in sospeso
4 = Sospetto
5 = Emergenza
6 = Offline

Nota: uguale alla state colonna in sys.databases.
database_state_desc nvarchar(60) Descrizione dell'oggetto database_state della replica di disponibilità.

ONLINE
RESTORING
RECOVERING
RECOVERY_PENDING
SUSPECT
EMERGENCY
OFFLINE

Nota: uguale alla state_desc colonna in sys.databases.
is_suspended bit Stato del database, uno di:

0 = Ripresa
1 = Sospeso
suspend_reason tinyint Se il database è sospeso, il motivo dello stato sospeso, uno di:

0 = Azione utente
1 = Sospendi dal partner
2 = Rollforward
3 = Acquisizione
4 = Applica
5 = Riavvio
6 = Annulla
7 = Riconvalida
8 = Errore nel calcolo del punto di sincronizzazione della replica secondaria
suspend_reason_desc nvarchar(60) Descrizione del motivo dello stato sospeso del database, uno di:

SUSPEND_FROM_USER = Un utente ha sospeso manualmente lo spostamento dei dati

SUSPEND_FROM_PARTNER = La replica di database viene sospesa dopo un failover forzato

SUSPEND_FROM_REDO = Si è verificato un errore durante la fase di rollforward

SUSPEND_FROM_APPLY = Si è verificato un errore durante la scrittura del log nel file (vedere il log degli errori)

SUSPEND_FROM_CAPTURE = Si è verificato un errore durante l'acquisizione del log nella replica primaria

SUSPEND_FROM_RESTART = La replica di database è stata sospesa prima del riavvio del database (vedere il log degli errori)

SUSPEND_FROM_UNDO = Si è verificato un errore durante la fase di annullamento (vedere il log degli errori)

SUSPEND_FROM_REVALIDATION = La mancata corrispondenza delle modifiche del log viene rilevata alla riconnessione (vedere il log degli errori)

SUSPEND_FROM_XRF_UPDATE = Impossibile trovare il punto di log comune (vedere il log degli errori)
recovery_lsn numeric(25,0) Nella replica primaria, la fine del log delle transazioni prima della scrittura di qualsiasi nuovo record di log da parte del database primario dopo il failover o il recupero. Per un determinato database secondario, se questo valore è minore dell'LSN con protezione avanzata corrente (last_hardened_lsn), recovery_lsn è il valore a cui il database secondario dovrà risincronizzare (ovvero ripristinare e reinizializzare in). Se questo valore è maggiore o uguale all'LSN con protezione avanzata corrente, la risincronizzazione non sarà necessaria e non si verificherebbe.

Riflette recovery_lsn un ID del blocco di log riempito con zere. Non è un LSN effettivo. Per informazioni sulla derivazione di questo valore, vedere Informazioni sui valori delle colonne LSN più avanti in questo articolo.
truncation_lsn numeric(25,0) Nella replica primaria, per il database primario, riflette l'LSN di troncamento del log minimo in tutti i database secondari corrispondenti. Se il troncamento del log locale è bloccato, ad esempio da un'operazione di backup, questo LSN potrebbe essere maggiore di quello di troncamento locale.

Per un database secondario specificato, riflette il punto di troncamento del database in questione.
truncation_lsn riflette un ID di blocco di log riempito con zere. Non è un numero di sequenza di log effettivo.
last_sent_lsn numeric(25,0) Quando si esegue una query sulla replica primaria, last_sent_lsn viene segnalato per ogni riga del database di replica secondaria. Identificatore del blocco di log che indica il punto fino a cui tutti i blocchi di log sono stati inviati dal database primario. ID del blocco di log successivo inviato, anziché l'ID del blocco di log inviato più di recente.

last_sent_lsn riflette un ID di blocco di log riempito con zere. Non è un numero di sequenza di log effettivo.
last_sent_time datetime Quando si esegue una query sulla replica primaria, last_sent_time viene segnalato per ogni riga del database di replica secondaria. Ora di invio dell'ultimo blocco di log.
last_received_lsn numeric(25,0) Quando si esegue una query su una replica secondaria, last_received_lsn viene segnalato per la riga del database di replica secondaria locale. ID del blocco di log che identifica il punto fino a cui tutti i blocchi di log sono stati ricevuti dalla replica secondaria che ospita questo database secondario.

Riflette last_received_lsn un ID del blocco di log riempito con zere. Non è un numero di sequenza di log effettivo.
last_received_time datetime Quando si esegue una query su una replica secondaria, last_received_time viene segnalato per la riga del database di replica secondaria locale. Ora in cui è stato letto l'ID del blocco di log nell'ultimo messaggio ricevuto sulla replica secondaria.
last_hardened_lsn numeric(25,0) Inizio del blocco di log contenente i record di log dell'ultimo LSN con protezione avanzata in un database secondario.

In un database primario con commit asincrono o in un database con commit sincrono il cui criterio corrente è delay, il valore è NULL. Per altri database primari con commit sincrono, last_hardened_lsn indica il numero minimo di LSN con protezione avanzata in tutti i database secondari.

Nota: riflette last_hardened_lsn un ID blocco di log riempito con zere. Non è un numero di sequenza di log effettivo. Per altre informazioni, vedere Informazioni sui valori delle colonne LSN, più avanti in questo articolo.
last_hardened_time datetime In un database secondario, ora dell'identificatore del blocco di log per l'ultimo LSN con protezione avanzata (last_hardened_lsn). In un database primario, riflette l'ora corrispondente all'LSN minimo finalizzato.
last_redone_lsn numeric(25,0) Numero di sequenza del file di log (LSN) effettivo dell'ultimo record di log di cui è stato eseguito il rollforward nel database secondario. è last_redone_lsn sempre minore di last_hardened_lsn.
last_redone_time datetime Ora del rollforward dell'ultimo record di log sul database secondario.
log_send_queue_size bigint Numero di record di log del database primario che non sono stati inviati ai database secondari, in kilobyte (KB).
log_send_rate bigint Frequenza media con cui l'istanza di replica primaria ha inviato dati durante l'ultimo periodo attivo, in kilobyte (KB)/secondo.
redo_queue_size bigint Numero di record di log nei file di log della replica secondaria che non sono ancora stati ridisatti, in kilobyte (KB).
redo_rate bigint Velocità media di rollforward dei record di log in un determinato database secondario, in kilobyte (KB)/secondo.

redo_rate viene calcolato dividendo i byte di log totali dopo l'avvio del motore di database per l'intervallo di tempo in cui il rollforward è in esecuzione attivamente, anziché in base al tempo trascorso. Poiché il rollforward potrebbe non essere in esecuzione in modo continuo, il valore risultante potrebbe essere diverso (superiore) rispetto al valore del Database Replica:Redone Bytes/sec contatore delle prestazioni.
filestream_send_rate bigint Specifica la frequenza con cui i file FILESTREAM vengono spediti alla replica secondaria, in kilobyte (KB)/secondo.
end_of_log_lsn numeric(25,0) Fine locale dell'LSN del log. LSN effettivo che corrisponde all'ultimo record di log nella cache di log sui database primario e secondari. Nella replica primaria le righe secondarie riflettono la fine del LSN del log dai messaggi di stato più recenti inviati dalle repliche secondarie alla replica primaria.

end_of_log_lsn riflette un ID di blocco di log riempito con zere. Non è un numero di sequenza di log effettivo. Per altre informazioni, vedere Informazioni sui valori delle colonne LSN, più avanti in questo articolo.
last_commit_lsn numeric(25,0) Numero di sequenza del file di log effettivo che corrisponde all'ultimo record di commit nel log delle transazioni.

Sul database primario corrisponde all'ultimo record di commit elaborato. Le righe per i database secondari mostrano il numero di sequenza del log inviato dalla replica secondaria alla replica primaria.
Sulla replica secondaria si tratta dell'ultimo record di commit di cui è stato eseguito il rollforward.
last_commit_time datetime Ora che corrisponde all'ultimo record di commit.

Sul database secondario, l'ora equivale a quella sul database primario.

Nella replica primaria ogni riga del database secondario visualizza l'ora in cui la replica secondaria che ospita il database secondario restituito alla replica primaria. La differenza di tempo tra la riga del database primario e una determinata riga del database secondario rappresenta approssimativamente l'obiettivo del punto di ripristino (RPO), presupponendo che il processo di rollforward venga intercettato e che lo stato di avanzamento sia stato riportato alla replica primaria dalla replica secondaria.
low_water_mark_for_ghosts bigint Numero a incremento progressivo costante per il database che indica un limite minimo usato dall'attività di pulizia dei record fantasma sul database primario. Se questo numero non aumenta nel tempo, implica che la pulizia fantasma potrebbe non verificarsi. Per decidere quali righe fantasma pulire, la replica primaria utilizza il valore minimo di questa colonna per questo database in tutte le repliche di disponibilità, inclusa quella primaria.
secondary_lag_seconds bigint Numero di secondi in cui la replica secondaria si trova dietro la replica primaria durante la sincronizzazione.

Nella replica primaria, il ritardo di sincronizzazione (ritardo) per ogni database secondario viene calcolato come numero di secondi dopo la protezione avanzata del LSN con protezione avanzata meno recente nella replica primaria che deve ancora essere avanzata nella replica secondaria. Questo valore viene visualizzato come 0 se lo spostamento dei dati sia sospeso. Lo spostamento dei dati deve trovarsi in uno stato non sospeso affinché questo valore mostri un ritardo attivo.

Si applica a: SQL Server 2016 (13.x) e versioni successive.

Informazioni sui valori delle colonne LSN

I valori delle end_of_log_lsncolonne , last_hardened_lsnlast_received_lsn, last_sent_lsn, recovery_lsn, e truncation_lsn non sono numeri di sequenza di log effettivi (LSN). Ognuno di questi valori riflette invece un ID del blocco di log riempito con zeri.

end_of_log_lsn, last_hardened_lsne recovery_lsn sono LSN scaricabili. Ad esempio, last_hardened_lsn indica l'inizio del blocco successivo oltre i blocchi già presenti su disco. Quindi, qualsiasi LSN minore è il valore di last_hardened_lsn è su disco. Gli LSN maggiori o uguali a questo valore non vengono scaricati.

Dei valori LSN restituiti da sys.dm_hadr_database_replica_states, solo last_redone_lsn è un LSN reale.

Autorizzazioni

SQL Server 2019 (15.x) e versioni precedenti richiedono VIEW SERVER STATE l'autorizzazione per il server.

SQL Server 2022 (16.x) e versioni successive richiedono VIEW SERVER PERFORMANCE STATE l'autorizzazione per il server.