sys.dm_hadr_database_replica_states (Transact-SQL)
Gilt für: SQL Server Azure SQL Managed Instance
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. Im primären Replikat gibt diese Ansicht eine Zeile für jede primäre Datenbank und eine zusätzliche Zeile für die entsprechende sekundäre Datenbank zurück.
Wichtig
Je nach Aktion und Status höherer Ebene sind Datenbankstatusinformationen möglicherweise nicht verfügbar oder veraltet. Zudem sind die Werte nur lokal relevant. Beispielsweise gibt der Wert der last_hardened_lsn
Spalte im primären Replikat die Informationen zu einer bestimmten sekundären Datenbank wieder, die derzeit für das primäre Replikat verfügbar ist, nicht die tatsächliche gehärtete Protokollsequenznummer (LSN), die das sekundäre Replikat aktuell 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 Sys.databases-Katalogansicht angezeigt. |
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 lokal auf der Serverinstanz. |
is_primary_replica |
bit | Gibt zurück 1 , ob das Replikat primär ist oder 0 wenn es sich um ein sekundäres Replikat handelt.Gilt für: SQL Server 2014 (12.x) und höhere Versionen. |
synchronization_state |
tinyint | Datenbewegungszustand, einer der folgenden Werte.0 = Nicht synchronisiert. Gibt für eine primäre Datenbank an, dass die Datenbank nicht bereit ist, das Transaktionsprotokoll mit den entsprechenden sekundären Datenbanken zu synchronisieren. Bei einer sekundären Datenbank weist dieser Wert darauf hin, dass die Protokollsynchronisierung aufgrund eines Verbindungsproblems nicht gestartet wurde, angehalten wird oder während des Starts oder eines Rollenwechsels Übergangszustände 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. Eine primäre Datenbank wird SYNCHRONIZED anstelle von SYNCHRONIZING . 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 = Wiederherstellen. Gibt die Rollbackphase an, wenn eine sekundäre Datenbank aktiv Seiten von der primären Datenbank abruft.Achtung: Wenn sich eine Datenbank in einem sekundären Replikat im REVERTING Zustand befindet, lässt das Erzwingen eines Failovers auf das sekundäre Replikat die Datenbank in einem Zustand zurück, in dem sie nicht als primäre Datenbank gestartet werden kann. Entweder muss die Datenbank erneut als sekundäre Datenbank verbunden werden, oder Sie müssen neue Protokolldatensätze aus einer Protokollsicherung anwenden.4 = Initialisieren. 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.Achtung: Wenn sich eine Datenbank in einem sekundären Replikat im INITIALIZING Zustand befindet, lässt das Erzwingen eines Failovers auf das sekundäre Replikat die Datenbank in einem Zustand zurück, in dem sie nicht als primäre Datenbank gestartet werden kann. Entweder muss die Datenbank erneut als sekundäre Datenbank verbunden werden, oder Sie müssen neue Protokolldatensätze aus einer Protokollsicherung anwenden. |
synchronization_state_desc |
nvarchar(60) | Beschreibung des Datenverschiebungsstatus. Folgende Werte sind möglich:NOT SYNCHRONIZING SYNCHRONIZING SYNCHRONIZED REVERTING INITIALIZING |
is_commit_participant |
bit | 0 = Transaktions-Commit wird in Bezug auf diese Datenbank nicht synchronisiert.1 = Transaktions-Commit wird in Bezug auf diese Datenbank synchronisiert.Bei einer Datenbank für ein asynchrones Commit-Verfügbarkeitsreplikat ist dieser Wert immer 0 .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 | Gibt die Schnittmenge des Synchronisierungsstatus einer Datenbank an, die der Verfügbarkeitsgruppe des Verfügbarkeitsreplikats zugeordnet ist, und den Verfügbarkeitsmodus des Verfügbarkeitsreplikats (synchroner Commit- oder asynchroner Commit-Modus). Dies kann einer der folgenden Werte sein:0 = Nicht fehlerfrei. Die synchronization_state Datenbank ist 0 (NOT SYNCHRONIZING ).1 = Teilweise gesund. Eine Datenbank für ein Synchron-Commit-Verfügbarkeitsreplikat gilt als teilweise fehlerfrei, wenn synchronization_state (1 SYNCHRONIZING ).2 = Gesund. Eine Datenbank für ein Synchron-Commit-Verfügbarkeitsreplikat gilt als fehlerfrei, wenn synchronization_state (2 SYNCHRONIZED ), und eine Datenbank für ein asynchrones Commit-Verfügbarkeitsreplikat wird als fehlerfrei betrachtet, wenn synchronization_state (1 SYNCHRONIZING ). |
synchronization_health_desc |
nvarchar(60) | Beschreibung der synchronization_health Verfügbarkeitsdatenbank.NOT_HEALTHY PARTIALLY_HEALTHY HEALTHY |
database_state |
tinyint | 0 = Online1 = Wiederherstellen2 = Wiederherstellung3 = Wiederherstellung steht aus4 = Verdächtiger5 = Notfall6 = OfflineHinweis: Identisch mit state Spalte in sys.databases. |
database_state_desc |
nvarchar(60) | Beschreibung des database_state 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 = Fortgesetzt1 = Angehalten |
suspend_reason |
tinyint | Gibt den Grund für das Anhalten an, wenn die Datenbank angehalten wurde. Folgende Werte sind möglich:0 = Benutzeraktion1 = Partner aussetzen2 = Wiederholen3 = Erfassung4 = Übernehmen5 = Neustart6 = Rückgängig7 = Erneute Überprüfung8 = Fehler bei der Berechnung des sekundären Replikatsynchronisierungspunkts |
suspend_reason_desc |
nvarchar(60) | Beschreibung des Grunds für das Anhalten der Datenbank. Folgende Werte sind möglich:SUSPEND_FROM_USER = Ein Benutzer manuell angehaltene DatenbewegungenSUSPEND_FROM_PARTNER = Das Datenbankreplikat wird nach einem erzwungenen Failover angehalten.SUSPEND_FROM_REDO = Fehler während der WiederholungsphaseSUSPEND_FROM_APPLY = Fehler beim Schreiben des Protokolls in die Datei (siehe Fehlerprotokoll)SUSPEND_FROM_CAPTURE = Fehler beim Erfassen des Protokolls im primären ReplikatSUSPEND_FROM_RESTART = Das Datenbankreplikat wurde angehalten, bevor die Datenbank neu gestartet wurde (siehe Fehlerprotokoll)SUSPEND_FROM_UNDO = Fehler während der Rückgängig-Phase (siehe Fehlerprotokoll)SUSPEND_FROM_REVALIDATION = Bei erneuter Verbindung wird ein Konflikt zwischen Protokolländerungen erkannt (siehe Fehlerprotokoll)SUSPEND_FROM_XRF_UPDATE = Der allgemeine Protokollpunkt kann nicht gefunden werden (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, mit dem diese sekundäre Datenbank neu synchronisiert werden muss (d. h. zum Zurücksetzen und Erneutitialisieren auf). Wenn dieser Wert größer oder gleich dem aktuellen gehärteten LSN ist, wäre eine erneute Synchronisierung unnötig und würde nicht auftreten.Dies recovery_lsn spiegelt eine Protokollblock-ID wider, die mit Nullen aufgefüllt ist. Es ist kein tatsächlicher LSN. Informationen dazu, wie dieser Wert abgeleitet wird, finden Sie unter "Grundlegendes zu den LSN-Spaltenwerten" weiter unten in diesem Artikel. |
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 gibt eine Protokollblock-ID an, die mit Nullen aufgefüllt ist. Es handelt sich nicht um eine tatsächliche Protokollsequenznummer. |
last_sent_lsn |
numeric(25,0) | Wenn Sie das primäre Replikat abfragen, last_sent_lsn wird für jede sekundäre Replikatdatenbankzeile 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 gesendeten Protokollblocks und nicht die ID des zuletzt gesendeten Protokollblocks.last_sent_lsn gibt eine Protokollblock-ID an, die mit Nullen aufgefüllt ist. Es handelt sich nicht um eine tatsächliche Protokollsequenznummer. |
last_sent_time |
datetime | Wenn Sie das primäre Replikat abfragen, last_sent_time wird für jede sekundäre Replikatdatenbankzeile gemeldet. Die Zeit, zu der der letzte Protokollblock gesendet wurde. |
last_received_lsn |
numeric(25,0) | Wenn Sie ein sekundäres Replikat abfragen, last_received_lsn wird für die lokale sekundäre Replikatdatenbankzeile 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 aufgefüllt ist. Es handelt sich nicht um eine tatsächliche Protokollsequenznummer. |
last_received_time |
datetime | Wenn Sie ein sekundäres Replikat abfragen, last_received_time wird für die lokale sekundäre Replikatdatenbankzeile 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) | Beginn des Protokollblocks, der die Protokolldatensätze der letzten gehärteten LSN in einer sekundären Datenbank enthält. Bei einer asynchronen Commit-Primärdatenbank oder in einer synchronen Commit-Datenbank, deren aktuelle Richtlinie lautet delay , lautet NULL der Wert . Gibt bei anderen synchronen Commit-Primärdatenbanken last_hardened_lsn das Minimum des gehärteten LSN für alle sekundären Datenbanken an.Hinweis: Dies last_hardened_lsn spiegelt eine Protokollblock-ID wider, die mit Nullen aufgefüllt ist. Es handelt sich nicht um eine tatsächliche Protokollsequenznummer. Weitere Informationen finden Sie unter "Grundlegendes zu den LSN-Spaltenwerten" weiter unten in diesem Artikel. |
last_hardened_time |
datetime | In einer sekundären Datenbank, Zeit des Protokollblockbezeichners für den letzten gehärteten LSN (last_hardened_lsn ). 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 | Anzahl der Protokolldatensätze der primären Datenbank, die nicht an die sekundären Datenbanken gesendet wurden, in Kb (KB). |
log_send_rate |
bigint | Durchschnittliche Rate, mit der primäre Replikatinstanz Daten während des letzten aktiven Zeitraums in Kilobyte (KB)/Sekunde gesendet hat. |
redo_queue_size |
bigint | Die Anzahl der Protokolldatensätze in den Protokolldateien des sekundären Replikats, die noch nicht in Kilobyte (KB) neu erstellt wurden. |
redo_rate |
bigint | Durchschnittliche Rate, mit der die Protokolldatensätze in einer bestimmten sekundären Datenbank in Kilobyte (KB)/Sekunde neu berechnet werden.redo_rate wird berechnet, indem die Gesamtzahl der Protokollbytes geteilt wird, seit der Start des Datenbankmoduls durch den Zeitraum, in dem die Wiederholung aktiv ausgeführt wurde, statt durch die verstrichene Zeit. Da "Wiederholen" möglicherweise nicht kontinuierlich ausgeführt wird, kann der resultierende Wert (höher) als der Wert des Database Replica:Redone Bytes/sec Leistungsindikators sein. |
filestream_send_rate |
bigint | Gibt die Rate an, mit der die FILESTREAM-Dateien an das sekundäre Replikat in Kilobyte (KB)/Sekunde geliefert 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. Im primären Replikat spiegeln die sekundären Zeilen das Ende des Protokoll-LSN aus den neuesten Statusmeldungen wider, die die sekundären Replikate an das primäre Replikat gesendet haben.end_of_log_lsn gibt eine Protokollblock-ID an, die mit Nullen aufgefüllt ist. Es handelt sich nicht um eine tatsächliche Protokollsequenznummer. Weitere Informationen finden Sie unter "Grundlegendes zu den LSN-Spaltenwerten" weiter unten in diesem Artikel. |
last_commit_lsn |
numeric(25,0) | Tatsächliche Protokollfolgenummer, die dem letzten Commitdatensatz im Transaktionsprotokoll entspricht. Entspricht bei der primären Datenbank dem zuletzt verarbeiteten Commitdatensatz. Zeilen für sekundäre Datenbanken zeigen die Protokollsequenznummer an, die das sekundäre Replikat an das primäre 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. Im primären Replikat zeigt jede sekundäre Datenbankzeile die Uhrzeit an, zu der das sekundäre Replikat, das die sekundäre Datenbank hostt, die an das primäre Replikat zurück gemeldet wurde. Der Zeitunterschied zwischen der Primären Datenbankzeile und einer bestimmten sekundären Datenbankzeile stellt ungefähr das Wiederherstellungspunktziel (RPO) dar, wobei davon ausgegangen wird, dass der Redo-Prozess abgefangen wird und dass der Fortschritt vom sekundären Replikat an das primäre Replikat zurückgemeldet 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 Laufe der Zeit nicht steigt, bedeutet dies, dass die Gespenstbereinigung möglicherweise nicht passiert. 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. Im primären Replikat wird die Synchronisierungsverzögerung (Verzögerung) für jede sekundäre Datenbank als Die Anzahl der Sekunden berechnet, seit die Härtung des frühesten gehärteten LSN für das primäre Replikat, das noch nicht auf dem sekundären Replikat gehärtet werden muss. Dieser Wert zeigt an, als 0 ob die Datenverschiebung angehalten wird. Die Datenverschiebung muss sich in einem nicht angehaltenen Zustand befinden, damit dieser Wert eine aktive Verzögerung anzeigen kann.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
Grundlegendes zu den LSN-Spaltenwerten
Die Werte der end_of_log_lsn
Zahlen , last_hardened_lsn
, last_received_lsn
, , last_sent_lsn
und recovery_lsn
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
sind geleerte LSNs. Gibt beispielsweise last_hardened_lsn
den Anfang des nächsten Blocks über die Bereits auf dem Datenträger gespeicherten Blöcke an. Daher ist jeder LSN kleiner als der Wert auf last_hardened_lsn
dem Datenträger. LSNs, die größer oder gleich diesem Wert sind, werden nicht geleert.
Der von LSN zurückgegebenen sys.dm_hadr_database_replica_states
LSN-Werte ist nur last_redone_lsn
ein realer LSN.
Berechtigungen
SQL Server 2019 (15.x) und frühere Versionen erfordern VIEW SERVER STATE
berechtigungen auf dem Server.
SQL Server 2022 (16.x) und höhere Versionen erfordern VIEW SERVER PERFORMANCE STATE
berechtigungen auf dem Server.