sys.dm_hadr_database_replica_states (Transact-SQL)

Gilt für:yesSQL Server (alle unterstützten Versionen)

Gibt eine Zeile für jede Datenbank zurück, die an einer Always On-Verfügbarkeitsgruppe teilnimmt, für die die lokale SQL Server-Instanz ein Verfügbarkeitsreplikat hostet. Diese dynamische Verwaltungssicht macht Statusinformationen für sowohl primäre als auch sekundäre Replikate verfügbar. Auf einem sekundären Replikat gibt diese Sicht eine Zeile für jede sekundäre Datenbank der Serverinstanz zurück. Auf dem primären Replikat gibt diese Sicht eine Zeile für jede primäre Datenbank und eine zusätzliche Zeile für die entsprechende sekundäre Datenbank zurück.

Wichtig

Abhängig von der Aktion und den Statuswerten auf höherer Ebene sind Datenbankstatusinformationen möglicherweise nicht verfügbar oder veraltet. Zudem sind die Werte nur lokal relevant. Beispielsweise spiegelt der Wert der last_hardened_lsn Spalte die Informationen zu einer bestimmten sekundären Datenbank wider, die derzeit für das primäre Replikat verfügbar ist, nicht den tatsächlich gehärteten LSN-Wert, den das sekundäre Replikat derzeit haben könnte.

Spaltenname Datentyp Beschreibung (auf primärem Replikat)
database_id int Der Bezeichner der Datenbank, der innerhalb einer Instanz von SQL Server eindeutig ist. Dies ist derselbe Wert wie in der Katalogansicht "sys.databases ".
group_id uniqueidentifier Der Bezeichner der Verfügbarkeitsgruppe, zu der die Datenbank gehört.
replica_id uniqueidentifier Der Bezeichner des Verfügbarkeitsreplikats in der Verfügbarkeitsgruppe.
group_database_id uniqueidentifier Der Bezeichner der Datenbank in der Verfügbarkeitsgruppe. Dieser Bezeichner ist auf jedem Replikat, mit dem diese Datenbank verknüpft ist, identisch.
is_local bit Gibt an, ob die Verfügbarkeitsdatenbank lokal ist. Folgende Werte sind möglich:

0 = Die Datenbank ist nicht lokal für die SQL Server Instanz.

1 = Die Datenbank ist für die Serverinstanz lokal.
is_primary_replica bit Gibt 1 zurück, wenn das Replikat primär ist, oder 0 bei einem sekundären Replikat.

Gilt für: SQL Server 2014 (12.x) und höher.
synchronization_state tinyint Datenbewegungsstatus, einer der folgenden Werte.

0 = Nicht synchronisiert. Gibt bei einer primären Datenbank an, dass die Datenbank nicht bereit ist, das Transaktionsprotokoll mit den entsprechenden sekundären Datenbanken zu synchronisieren. Gibt bei einer sekundären Datenbank an, dass die Protokollsynchronisierung für die Datenbank aufgrund eines Verbindungsproblems nicht gestartet wurde oder beim Start oder einem Rollenwechsel verschiedene Übergangsstatuswerte durchläuft.

1 = Synchronisieren. Gibt bei einer primären Datenbank an, dass diese Datenbank bereit ist, eine Scananforderung von einer sekundären Datenbank zu akzeptieren. Gibt bei einer sekundären Datenbank an, dass eine aktive Datenverschiebung für die Datenbank erfolgt.

2 = Synchronisiert. Primäre Datenbanken werden mit dem Status SYNCHRONISIERT und nicht mit dem Status WIRD SYNCHRONISIERT angezeigt. Eine sekundäre Datenbank mit synchronem Commit wird als SYNCHRONISIERT angezeigt, wenn gemäß dem lokalen Cache die Datenbank für das Failover bereit ist und eine Synchronisierung erfolgt.

3 = Zurücksetzen. Gibt die Rollbackphase an, wenn eine sekundäre Datenbank aktiv Seiten von der primären Datenbank abruft.
Vorsicht: Wenn sich eine Datenbank auf einem sekundären Replikat im REVERTING-Zustand befindet, verlässt das Failover auf das sekundäre Replikat die Datenbank in einem Zustand, in dem sie nicht als primäre Datenbank gestartet werden kann. Entweder muss erneut eine Verbindung mit der Datenbank als sekundäre Datenbank hergestellt werden, oder Sie müssen neue Protokolldatensätze aus einer Protokollsicherung übernehmen.

4 = Initialisierung. Gibt die Rollbackphase an, wenn das Transaktionsprotokoll (erforderlich, um eine sekundäre Datenbank auf den gleichen Stand wie die Rückgängig-LSN zu bringen) übermittelt und auf einem sekundären Replikat festgeschrieben wird.
Vorsicht: Wenn sich eine Datenbank auf einem sekundären Replikat im INITIALISIERUNGszustand befindet, wird das Failover auf das sekundäre Replikat in einem Zustand verlassen, in dem sie nicht als primäre Datenbank gestartet werden kann. Entweder muss erneut eine Verbindung mit der Datenbank als sekundäre Datenbank hergestellt werden, oder Sie müssen neue Protokolldatensätze aus einer Protokollsicherung übernehmen.
synchronization_state_desc nvarchar(60) Beschreibung des Datenverschiebungsstatus. Folgende Werte sind möglich:

NOT SYNCHRONIZING

SYNCHRONIZING

SYNCHRONIZED

REVERTING

INITIALIZING
is_commit_participant bit 0 = Ein Transaktionscommit wird nicht in Bezug auf diese Datenbank synchronisiert.

1 = Ein Transaktionscommit wird in Bezug auf diese Datenbank synchronisiert.

Für eine Datenbank mit einem Verfügbarkeitsreplikat für asynchrone Commits muss dieser Wert immer 0 sein.

Bei einer Datenbank mit einem Verfügbarkeitsreplikat für synchrone Commits ist dieser Wert nur für die primäre Datenbank genau.
synchronization_health tinyint Spiegelt die Schnittmenge des Synchronisierungszustands einer Datenbank wider, die der Verfügbarkeitsgruppe im Verfügbarkeitsreplikat und dem Verfügbarkeitsmodus des Verfügbarkeitsreplikats (synchroner Commit- oder asynchroner Commitmodus) zugeordnet ist, eines der folgenden Werte.

0 = Nicht gesund. Die synchronization_state der Datenbank ist 0 (NICHT SYNCHRONISIEREN).

1 = Teilweise gesund. Eine Datenbank für ein synchrones Commit-Verfügbarkeitsreplikat gilt als teilweise fehlerfrei, wenn synchronization_state 1 (SYNCHRONIZING) ist.

2 = Gesund. Eine Datenbank für ein Synchron-Commit-Verfügbarkeitsreplikat gilt als fehlerfrei, wenn synchronization_state 2 (SYNCHRONIZED) ist, und eine Datenbank für ein asynchrones Commit-Verfügbarkeitsreplikat wird als fehlerfrei betrachtet, wenn synchronization_state 1 (SYNCHRONIZING) ist.
synchronization_health_desc nvarchar(60) Beschreibung der synchronization_health der Verfügbarkeitsdatenbank.

NOT_HEALTHY

PARTIALLY_HEALTHY

HEALTHY
database_state tinyint 0 = Online

1 = Wird wiederhergestellt

2 = Wird wiederhergestellt

3 = Wiederherstellung steht aus

4 = Fehlerverdächtig

5 = Notfall

6 = Offline

Hinweis: Identisch mit der Statusspalte in sys.databases.
database_state_desc nvarchar(60) Beschreibung des database_state des Verfügbarkeitsreplikats.

ONLINE

RESTORING

RECOVERING

RECOVERY_PENDING

SUSPECT

EMERGENCY

OFFLINE

Hinweis: Identisch mit state_desc spalte in sys.databases.
is_suspended bit Der Status der Datenbank. Folgende Werte sind möglich:

0 = Fortgesetzt

1 = Angehalten
suspend_reason tinyint Gibt den Grund für das Anhalten an, wenn die Datenbank angehalten wurde. Folgende Werte sind möglich:

0 = Benutzeraktion

1 = Aussetzen für: Partner

2 = Wiederholen

3 = Erfassen

4 = Übernehmen

5 = Neu starten

6 = Rückgängig

7 = Erneute Überprüfung

8 = Fehler bei der Berechnung des Synchronisierungspunkts des sekundären Replikats
suspend_reason_desc nvarchar(60) Beschreibung des Grunds für das Anhalten der Datenbank. Folgende Werte sind möglich:

SUSPEND_FROM_USER = Die Datenverschiebung wurde von einem Benutzer manuell angehalten.

SUSPEND_FROM_PARTNER = Das Datenbankreplikat wurde nach einem erzwungenen Failover angehalten.

SUSPEND_FROM_REDO = Während der Rollforwardphase ist ein Fehler aufgetreten.

SUSPEND_FROM_APPLY = Beim Schreiben des Protokolls in die Datei ist ein Fehler aufgetreten (siehe Fehlerprotokoll).

SUSPEND_FROM_CAPTURE = Beim Aufzeichnen des Protokolls auf dem primären Replikat ist ein Fehler aufgetreten.

SUSPEND_FROM_RESTART = Das Datenbankreplikat wurde vor dem Neustart der Datenbank angehalten (siehe Fehlerprotokoll).

SUSPEND_FROM_UNDO = Während der Rollbackphase ist ein Fehler aufgetreten (siehe Fehlerprotokoll).

SUSPEND_FROM_REVALIDATION = Beim Wiederherstellen der Verbindung wurde ein Konflikt zwischen Protokolländerungen erkannt (siehe Fehlerprotokoll).

SUSPEND_FROM_XRF_UPDATE = Der allgemeine Protokollpunkt wurde nicht gefunden (siehe Fehlerprotokoll).
recovery_lsn numeric(25,0) Beim primären Replikat das Ende des Transaktionsprotokolls, bevor die primäre Datenbank nach einer Wiederherstellung oder einem Failover neue Protokolldatensätze schreibt. Wenn dieser Wert für eine bestimmte sekundäre Datenbank kleiner als der aktuelle gehärtete LSN (last_hardened_lsn) ist, recovery_lsn ist der Wert, zu dem diese sekundäre Datenbank erneut synchronisiert werden muss (d. h. zum Zurücksetzen und Erneutitialisieren auf). Wenn dieser Wert größer oder gleich der aktuellen festgeschriebenen LSN ist, wäre eine erneute Synchronisierung unnötig und würde nicht ausgeführt.

Dies recovery_lsn spiegelt eine Protokollblock-ID wider, die mit Nullen gepolstert ist. Es ist keine tatsächliche Protokollfolgenummer (LSN). Informationen dazu, wie dieser Wert abgeleitet wird, finden Sie weiter unten in diesem Thema unter Grundlegendes zu den LSN-Spaltenwerten.
truncation_lsn numeric(25,0) Gibt für das primäre Replikat der primären Datenbank den Mindestwert für die Protokollkürzungs-LSN aller entsprechenden sekundären Datenbanken an. Wenn die lokale Protokollkürzung blockiert wird (z. B. durch einen Sicherungsvorgang), kann diese LSN größer als die lokale Kürzungs-LSN sein.

Stellt bei einer bestimmten sekundären Datenbank den Protokollkürzungspunkt dieser Datenbank dar.

truncation_lsn spiegelt eine Protokollblock-ID mit Nullen wider. Es ist keine tatsächliche Protokollfolgenummer.
last_sent_lsn numeric(25,0) Beim Abfragen des primären Replikats wird für jede sekundäre Replikatdatenbankzeile last_sent_lsn gemeldet. Der Protokollblockbezeichner, der den Punkt angibt, bis zu den alle Protokollblöcke von der primären Datenbank gesendet wurden. Dies ist die ID des nächsten Protokollblocks, der gesendet wird, und nicht die ID des zuletzt gesendeten Protokollblocks.

last_sent_lsn spiegelt eine Protokollblock-ID mit Nullen wider, es handelt sich nicht um eine tatsächliche Protokollsequenznummer.
last_sent_time datetime Beim Abfragen des primären Replikats wird für jede sekundäre Replikatdatenbankzeile last_sent_time gemeldet. Die Zeit, zu der der letzte Protokollblock gesendet wurde.
last_received_lsn numeric(25,0) Beim Abfragen eines sekundären Replikats wird für die zeile der lokalen sekundären Replikatdatenbank last_received_lsn gemeldet. Die Protokollblock-ID, die den Punkt angibt, bis zu dem alle Protokollblöcke vom sekundären Replikat empfangen wurden, das diese sekundäre Datenbank hostet.

Dies last_received_lsn spiegelt eine Protokollblock-ID wider, die mit Nullen gepolstert ist. Es ist keine tatsächliche Protokollfolgenummer.
last_received_time datetime Beim Abfragen eines sekundären Replikats wird für die zeile der lokalen sekundären Replikatdatenbank last_received_time gemeldet. Die Zeit, zu der die in der letzten Meldung empfangene Protokollblock-ID auf dem sekundären Replikat gelesen wurde.
last_hardened_lsn numeric(25,0) Start des Protokollblocks, der die Protokolldatensätze der letzten festgeschriebenen LSN für eine sekundären Datenbank enthält.

Für eine primäre Datenbank mit asynchronem Commit oder synchronem Commit, deren aktuelle Richtlinie "Verzögerung" ist, lautet der Wert NULL. Bei anderen synchronen Commit-Primärdatenbanken last_hardened_lsn gibt das Minimum der gehärteten LSN für alle sekundären Datenbanken an.

Hinweis: Dies last_hardened_lsn spiegelt eine Protokollblock-ID wider, die mit Nullen gepolstert ist. Es ist keine tatsächliche Protokollfolgenummer. Weitere Informationen finden Sie unter Grundlegendes zu den LSN-Spaltenwerten weiter unten in diesem Thema.
last_hardened_time datetime Bei einer sekundären Datenbank wird die Uhrzeit des Protokollblockbezeichners für den letzten härteten LSN (last_hardened_lsn) verwendet. Gibt für eine primäre Datenbank die Zeit an, die der festgeschriebenen LSN mit dem Mindestwert entspricht.
last_redone_lsn numeric(25,0) Tatsächliche Protokollfolgenummer des letzten Protokolldatensatzes, der zuletzt für die sekundäre Datenbank wiederholt wurde. Dies last_redone_lsn ist immer kleiner als last_hardened_lsn.
last_redone_time datetime Die Zeit, zu der der letzte Protokolldatensatz in der sekundären Datenbank wiederholt wurde.
log_send_queue_size bigint Die Menge der Protokolldatensätze der primären Datenbank, die noch nicht an die sekundären Datenbanken gesendet wurden (in KB).
log_send_rate bigint Durchschnittliche Rate, bei der primäre Replikatinstanz Daten während des letzten aktiven Zeitraums in Kilobyte (KB)/Sekunde gesendet hat.
redo_queue_size bigint Die Größe der Protokolldatensätze in den Protokolldateien des sekundären Replikats, das noch nicht wiederholt wurde (in KB).
redo_rate bigint Durchschnittliche Rate, bei der die Protokolldatensätze in einer bestimmten sekundären Datenbank in Kilobyte (KB)/Sekunde neu angezeigt werden.
filestream_send_rate bigint Die Rate in KB/Sekunde, mit der die FILESTREAM-Dateien an das sekundäre Replikat übertragen werden.
end_of_log_lsn numeric(25,0) Lokale Protokollende-LSN. Die tatsächliche LSN, die dem letzten Protokolldatensatz im Protokollcache der primären und sekundären Datenbanken entspricht. Für das primäre Replikat geben die sekundären Zeilen die Protokollende-LSN der letzten Statusmeldungen an, die die sekundären Replikate an das primäre Replikat gesendet haben.

end_of_log_lsn spiegelt eine Protokollblock-ID wider, die mit Nullen gepolstert ist. Es ist keine tatsächliche Protokollfolgenummer. Weitere Informationen finden Sie unter Grundlegendes zu den LSN-Spaltenwerten weiter unten in diesem Thema.
last_commit_lsn Numerische(25,0) Tatsächliche Protokollfolgenummer, die dem letzten Commitdatensatz im Transaktionsprotokoll entspricht.

Entspricht bei der primären Datenbank dem zuletzt verarbeiteten Commitdatensatz. In den Zeilen für sekundäre Datenbanken wird die Protokollfolgenummer angezeigt, die das sekundäre Replikat dem primären Replikat gesendet hat.

Beim sekundären Replikat ist dies der letzte Commitdatensatz, der wiederholt wurde.
last_commit_time datetime Die Zeit, die dem letzten Commitdatensatz entspricht.

Bei der sekundären Datenbank ist diese Zeit mit der für die primäre Datenbank identisch.

Auf dem primären Replikat zeigt jede Zeile für die sekundäre Datenbank die Zeit an, die das sekundäre Replikat, das die sekundäre Datenbank hostet, dem primären Replikat zurückgemeldet hat. Der Unterschied zwischen der Primären Datenbankzeile und einer bestimmten sekundären Datenbankzeile stellt ungefähr das Wiederherstellungspunktziel (RPO) dar, vorausgesetzt, dass der Wiederholungsprozess erfasst wird und dass der Fortschritt vom sekundären Replikat wieder an das primäre Replikat gemeldet wurde.
low_water_mark_for_ghosts bigint Eine monoton steigende Zahl für die Datenbank, die eine Untergrenze angibt, die für das Cleanup inaktiver Datensätze verwendet wurde. Wenn diese Zahl im Zeitverlauf nicht zunimmt, weist dies darauf hin, dass das Cleanup für inaktive Datensätze möglicherweise nicht erfolgt ist. Um zu entscheiden, welche Zeilen mit inaktiven Datensätzen bereinigt werden sollen, verwendet das primäre Replikat den Mindestwert dieser Spalte für alle Verfügbarkeitsreplikate (einschließlich des primären Replikats) für diese Datenbank.
secondary_lag_seconds bigint Die Anzahl der Sekunden, die das sekundäre Replikat während der Synchronisierung hinter dem primären Replikat liegt.

Gilt für: SQL Server 2016 (13.x) und höher.

Grundlegendes zu LSN-Spaltenwerten

Die Werte der end_of_log_lsn, last_hardened_lsn, last_received_lsn, last_sent_lsn, recovery_lsn und truncation_lsn Spalten sind keine tatsächlichen Protokollsequenznummern (LSNs). Diese Werte stellen eine mit Nullen aufgefüllte Protokollblock-ID dar.

end_of_log_lsn, last_hardened_lsn und recovery_lsn werden LSNs geleert. Beispielsweise gibt last_hardened_lsn den Anfang des nächsten Blocks über die Bereits auf dem Datenträger gespeicherten Blöcke an. Daher befindet sich jeder LSN-Wert < von last_hardened_lsn auf dem Datenträger. LSN, die >= für diesen Wert sind, werden nicht geleert.

Von den von sys.dm_hadr_database_replica_states zurückgegebenen LSN-Werten ist nur last_redone_lsn ein realer LSN.

Sicherheit

Berechtigungen

Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.

Weitere Informationen

Always On-Verfügbarkeitsgruppen (SQL Server)
Überwachen von Verfügbarkeitsgruppen (Transact-SQL)