sp_lock (Transact-SQL)

Gilt für:SQL Server

Stellt Informationen zu Sperren bereit.

Wichtig

Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Um Informationen zu Sperren in der SQL Server-Datenbank-Engine zu erhalten, verwenden Sie die sys.dm_tran_locks dynamische Verwaltungsansicht.

Transact-SQL-Syntaxkonventionen

Syntax

sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]  
[ ; ]  

Argumente

[ @spid1 = ] 'session ID1'Ist eine Datenbank-Engine Sitzungs-ID-Nummer aus sys.dm_exec_sessions, für die der Benutzer Informationen sperren möchte. Sitzungs-ID1 ist int mit einem Standardwert von NULL. Führen Sie sp_who aus, um Prozessinformationen zur Sitzung abzurufen. Wenn sitzungs-ID1 nicht angegeben ist, werden Informationen zu allen Sperren angezeigt.

[ @spid2 = ] 'session ID2'Ist eine weitere Datenbank-Engine Sitzungs-ID-Nummer aus sys.dm_exec_sessions, die möglicherweise gleichzeitig eine Sperre wie Sitzungs-ID1 hat und über die der Benutzer auch Informationen möchte. Sitzungs-ID2 ist int mit einem Standardwert von NULL.

Rückgabecodewerte

0 (Erfolg)

Resultsets

Das sp_lock Resultset enthält eine Zeile für jede Sperre, die von den in den parametern @spid1 und @spid2 angegebenen Sitzungen gehalten wird. Wenn weder @spid1 noch @spid2 angegeben werden, meldet das Resultset die Sperren für alle Sitzungen, die derzeit in der Instanz des Datenbank-Engine aktiv sind.

Spaltenname Datentyp Beschreibung
spid smallint Die Datenbank-Engine Sitzungs-ID für den Prozess, der die Sperre anfordert.
dbid smallint Die ID der Datenbank, in der die Sperre aufrechterhalten wird. Sie können die DB_NAME()-Funktion zum Identifizieren der Datenbank verwenden.
ObjId int Die ID des Objekts, auf dem die Sperre aufrechterhalten wird. Sie können die OBJECT_NAME()-Funktion in der verbundenen Datenbank zum Identifizieren des Objekts verwenden. Der Wert 99 ist ein Sonderfall, der auf eine Sperre auf einer der Systemseiten, die zum Aufzeichnen der Seitenzuordnungen in einer Datenbank verwendet wird, hinweist.
Indid smallint Die ID des Indexes, auf dem die Sperre aufrechterhalten wird.
Typ nchar(4) Der Sperrentyp:

RID = Eine Sperre einer einzelnen Zeile in einer Tabelle, die durch eine Zeilen-ID (Row Identifier, RID) gekennzeichnet ist.

KEY = Eine Sperre in einem Index, die einen Bereich von Schlüsselwerten in serialisierbaren Transaktionen schützt.

PAG = Sperre auf einer Daten- oder Indexseite.

EXT = Sperre auf einem Block.

TAB = Sperre für eine gesamte Tabelle, einschließlich aller Daten und Indizes.

DB = Sperre für eine Datenbank.

FIL = Sperre für eine Datenbankdatei.

APP = Sperre für eine anwendungsspezifische Ressource.

MD = Sperre für Metadaten oder Kataloginformationen.

HBT = Sperren auf einem Heap oder B-Tree (HoBT). Diese Informationen sind in SQL Server unvollständig.

AU = Sperre für eine Zuordnungseinheit. Diese Informationen sind in SQL Server unvollständig.
Ressource nchar(32) Der Wert, der die gesperrte Ressource identifiziert. Das Format des Werts hängt vom Typ der in der Spalte "Typ " identifizierten Ressource ab:

Typwert: Ressourcenwert

RID: Ein Bezeichner im Format fileid:pagenumber:rid, wobei fileid die Datei bezeichnet, in der sich die Seite befindet, pagenumber die Seite bezeichnet, in der sich die Zeile befindet, und rid die Zeile auf der Seite bezeichnet. fileid entspricht der file_id Spalte in der sys.database_files Katalogansicht.

SCHLÜSSEL: Eine hexadezimale Zahl, die intern vom Datenbank-Engine verwendet wird.

PAG: Eine Zahl, die das Format fileid:pagenumber aufweist, wobei fileid die Datei, die die Seite enthält, und pagenumber die Seite identifiziert.

EXT: Eine Zahl, die die erste Seite im Block identifiziert. Die Zahl weist das Format fileid:pagenumber auf.

TAB: Keine Informationen bereitgestellt, da die Tabelle bereits in der Spalte "ObjId " identifiziert ist.

DB: Keine Informationen bereitgestellt, da die Datenbank bereits in der Spalte "dbid " angegeben ist.

FIL: Der Bezeichner der Datei, die der file_id Spalte in der sys.database_files Katalogansicht entspricht.

APP: Ein Bezeichner, der für die gesperrte Anwendungsressource eindeutig ist. Im Format DbPrincipalId:<first two to 16 characters of the resource string><hashed value>.

MD: Variiert je nach Ressourcentyp. Weitere Informationen finden Sie in der Beschreibung der Spalte resource_description in sys.dm_tran_locks (Transact-SQL).For more information, see the description of the resource_description column in sys.dm_tran_locks (Transact-SQL).

HBT: Keine Informationen verfügbar. Verwenden Sie stattdessen die sys.dm_tran_locks dynamische Verwaltungsansicht.

AU: Keine Informationen verfügbar. Verwenden Sie stattdessen die sys.dm_tran_locks dynamische Verwaltungsansicht.
Mode nvarchar(8) Der angeforderte Sperrmodus. Mögliche Werte sind:

NULL = Auf die Ressource wird kein Zugriff erteilt. Dient als Platzhalter.

Sch-S = Schemastabilität. Stellt sicher, dass ein Schemaelement, wie z. B. eine Tabelle oder ein Index, nicht gelöscht wird, während eine Sitzung eine Schemastabilitätssperre für das Schemaelement aufrechterhält.

Sch-M = Schemaänderung. Muss von jeder Sitzung aufrechterhalten werden, die das Schema der angegebenen Ressource ändern möchte. Stellt sicher, dass keine anderen Sitzungen auf das angegebene Objekt verweisen.

S = Freigegebene Sperre. Der haltenden Sitzung wird der gemeinsame Zugriff auf die Ressource erteilt.

U = Updatesperre. Zeigt eine Updatesperre an, die für Ressourcen ausgegeben wurde, die möglicherweise aktualisiert werden. Es wird verwendet, um eine häufige Form des Deadlocks zu verhindern, die auftritt, wenn mehrere Sitzungen Ressourcen für potenzielle Updates zu einem späteren Zeitpunkt sperren.

X = Exklusive Sperre. Der haltenden Sitzung wird exklusiver Zugriff auf die Ressource erteilt.

IS = Beabsichtigte freigegebene Sperre. Gibt die Absicht an, S-Sperren für eine untergeordnete Ressource in der Sperrhierarchie zu platzieren.

IU = Beabsichtigte Updatesperre. Gibt die Absicht an, U-Sperren für eine untergeordnete Ressource in der Sperrhierarchie zu platzieren.

IX = Beabsichtigte exklusive Sperre. Gibt die Absicht an, X-Sperren für eine untergeordnete Ressource in der Sperrhierarchie zu platzieren.

SIU = Freigegebene Sperre mit beabsichtigter Updatesperre. Zeigt den gemeinsamen Zugriff auf eine Ressource mit der Absicht an, Updatesperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten.

SIX = Freigegebene Sperre mit beabsichtigter exklusiver Sperre. Zeigt den gemeinsamen Zugriff auf eine Ressource mit der Absicht an, exklusive Sperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten.

UIX = Updatesperre mit beabsichtigter exklusiver Sperre. Zeigt eine aufrechterhaltene Updatesperre für eine Ressource mit der Absicht an, exklusive Sperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten.

BU = Massenupdatesperre. Wird von Massenvorgängen verwendet.

RangeS_S = Freigegebene Sperren für Schlüsselbereich und Ressource. Zeigt serialisierbaren Bereichsscan an.

RangeS_U = Freigegebene Sperre für Schlüsselbereich und Updatesperre für Ressource. Zeigt serialisierbaren Updatescan an.

RangeI_N = Einfügungssperre für Schlüsselbereich und NULL-Sperre für Ressource. Wird zum Testen von Bereichen verwendet, bevor ein neuer Schlüssel in einen Index eingefügt wird.

RangeI_S = Konvertierungssperre für Schlüsselbereich (RangeI_S). Wird durch eine Überschneidung von RangeI_N und RangeS_S-Sperren erstellt.

RangeI_U = Konvertierungssperre für Schlüsselbereich, die durch eine Überschneidung von RangeI_N und U-Sperren erstellt wurde.

RangeI_X = Konvertierungssperre für Schlüsselbereich, die durch eine Überschneidung von RangeI_N und X-Sperren erstellt wurde.

RangeX_S = Konvertierungssperre für Schlüsselbereich, die durch eine Überschneidung von RangeI_N- und RangeS_S.-Sperren erzeugt wurde.

RangeX_U = Konvertierungssperre für Schlüsselbereich, die durch eine Überschneidung von RangeI_N und RangeS_U-Sperren erstellt wurde.

RangeX_X = Exklusive Sperren für Schlüsselbereich und Ressource. Dies ist eine Konvertierungssperre, die für das Update eines Schlüssels in einem Bereich verwendet wird.
Status nvarchar(5) Der Status der Sperranforderung:

CNVRT: Die Sperre wird aus einem anderen Modus konvertiert, aber die Konvertierung wird durch einen anderen Prozess blockiert, der eine Sperre mit einem inkompatiblen Modus aufrechterhält.

GRANT: Die Sperre wurde erteilt.

WAIT: Die Sperre wird durch einen anderen Prozess blockiert, der eine Sperre mit einem inkompatiblen Modus aufrechterhält.

Hinweise

Benutzer können das Sperren von Lesevorgängen wie folgt steuern:

  • Mit SET TRANSACTION ISOLATION LEVEL die Sperrebene für eine Sitzung angeben. Informationen zu Syntax und Einschränkungen finden Sie unter SET TRANSACTION ISOLATION LEVEL (Transact-SQL).For syntax and restrictions, see SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • Mithilfe von Sperrhinweisen die Sperrebene für einen bestimmten Tabellenverweis in einer FROM-Klausel angeben. Syntax und Einschränkungen finden Sie unter Tabellenhinweise (Transact-SQL).

Alle verteilten Transaktionen, denen keine Sitzung zugeordnet ist, sind verwaiste Transaktionen. Der Datenbank-Engine weist allen verwaisten verteilten Transaktionen den SPID-Wert von -2 zu, wodurch es einem Benutzer einfacher ist, verteilte Transaktionen zu blockieren. Weitere Informationen finden Sie unter Verwenden von markierten Transaktionen zum konsistenten Wiederherstellen verwandter Datenbanken (vollständiges Wiederherstellungsmodell).

Berechtigungen

Erfordert die VIEW SERVER STATE-Berechtigung.

Beispiele

A. Auflisten aller Sperren

Im folgenden Beispiel werden Informationen zu allen Sperren angezeigt, die derzeit in einer Instanz des Datenbank-Engine gespeichert sind.

USE master;  
GO  
EXEC sp_lock;  
GO  

B. Auflisten einer Sperre von einem Prozess mit einem einzelnen Server

Im folgenden Beispiel werden Informationen, einschließlich der Sperren, zur Prozess-ID 53 angezeigt.

USE master;  
GO  
EXEC sp_lock 53;  
GO  

Weitere Informationen

sys.dm_tran_locks (Transact-SQL)
DB_NAME (Transact-SQL)
KILL (Transact-SQL)
OBJECT_NAME (Transact-SQL)
sp_who (Transact-SQL)
sys.database_files (Transact-SQL)
sys.dm_os_tasks (Transact-SQL)
sys.dm_os_threads (Transact-SQL)