sp_lock (Transact-SQL)

Stellt Informationen zu Sperren bereit.

Wichtiger HinweisWichtig

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Wenn Sie weitere Informationen zu Sperren in SQL Server Database Engine (Datenbankmodul) erhalten möchten, verwenden Sie die dynamische Verwaltungssicht sys.dm_tran_locks.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

  • [ @spid1 = ] 'session ID1'
    Eine Database Engine (Datenbankmodul)-Sitzungs-ID von sys.dm_exec_sessions, für die der Benutzer Sperrinformationen möchte. session ID1 ist vom Datentyp int und hat den Standardwert NULL. Führen Sie sp_who aus, um Prozessinformationen zur Sitzung zu erhalten. Wenn session ID1 nicht angegeben wird, werden Informationen zu allen Sperren angezeigt.

  • [ @spid2 = ] 'session ID2'
    Eine weitere Database Engine (Datenbankmodul)-Sitzungs-ID von sys.dm_exec_sessions, für die gleichzeitig mit session ID1 eine Sperre besteht und für die der Benutzer ebenfalls Informationen möchte. session ID2 ist vom Datentyp int und hat den Standardwert NULL.

Rückgabecodewerte

0 (Erfolg)

Resultsets

Das Resultset von sp_lock enthält eine Zeile für jede Sperre, die von den in den Parametern @spid1 und @spid2 angegebenen Sitzungen aufrechterhalten wird. Wenn weder @spid1 noch @spid2 angegeben ist, meldet das Resultset die Sperren für alle Sitzungen, die in der Instanz von Database Engine (Datenbankmodul) gegenwärtig aktiviert sind.

Spaltenname

Datentyp

Beschreibung

spid

smallint

Die Sitzungs-ID von Database Engine (Datenbankmodul) 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 = Sperre für einen Heap oder B-Struktur-Index. Diese Informationen sind in SQL Server unvollständig.

AU = Sperre für eine Zuordnungseinheit. Diese Informationen sind in SQL Server unvollständig.

Resource

nchar(32)

Der Wert, der die gesperrte Ressource identifiziert. Das Format des Wertes ist von dem in der Typ-Spalte identifizierten Ressourentyp abhängig:

Typ Wert: Ressource Wert

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 Katalogsicht sys.database_files.

KEY: Eine hexadezimale Zahl, die intern von Database Engine (Datenbankmodul) 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: Es werden keine Informationen bereitgestellt, da die Tabelle bereits in der ObjId-Spalte identifiziert ist.

DB: Es werden keine Informationen bereitgestellt, da die Datenbank bereits in der dbid-Spalte identifiziert ist.

FIL: Der Bezeichner der Datei, der mit der file_id-Spalte in der sys.database_files-Katalogsicht übereinstimmt.

APP: Ein Bezeichner, der für die gesperrte Anwendungsressource eindeutig ist. Im Format DbPrincipleId:<erste zwei bis 16 Zeichen der Ressourcenzeichenfolge><Hashwert>.

MD: Variiert je nach Ressourcentyp. Weitere Informationen finden Sie in der Beschreibung der resource_description-Spalte in sys.dm_tran_locks (Transact-SQL).

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

AU: Keine Informationen verfügbar. Verwenden Sie stattdessen die dynamische Verwaltungssicht sys.dm_tran_locks.

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. Sie wird dazu verwendet, eine häufige Form von Deadlock zu verhindern, die auftritt, wenn mehrere Sitzungen Ressourcen sperren, um diese möglicherweise zu einem späteren Zeitpunkt zu aktualisieren.

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

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

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

IX = Beabsichtigte exklusive Sperre. Zeigt 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 zum Aktualisieren 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. Hinweise zur Syntax und zu Einschränkungen finden Sie unter SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

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

Alle verteilten Transaktionen, denen keine Sitzung zugeordnet ist, sind verwaiste Transaktionen. Database Engine (Datenbankmodul) weist allen verwaisten verteilten Transaktionen den SPID-Wert -2 zu, wodurch ein Benutzer blockierende verteilte Transaktionen leichter identifizieren kann. Weitere Informationen finden Sie unter Wiederherstellen von verwandten Datenbanken mithilfe von markierten Transaktionen (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 zurzeit in einer Instanz von Database Engine (Datenbankmodul) bestehen.

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

Siehe auch

Verweis

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)