Freigeben über


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 = ] spid1 ]
    [ , [ @spid2 = ] spid2 ]
[ ; ]

Argumente

[ @spid1 = ] spid1

Eine Datenbank-Engine Sitzungs-ID-Nummer, aus sys.dm_exec_sessions der der Benutzer Informationen sperren möchte. @spid1 ist int, mit einem Standardwert von NULL. Wird ausgeführt sp_who , um Prozessinformationen zur Sitzung abzurufen. Wenn @spid1 nicht angegeben ist, werden Informationen zu allen Sperren angezeigt.

[ @spid2 = ] spid2

Eine weitere Datenbank-Engine Sitzungs-ID-Nummer, von sys.dm_exec_sessions der aus gleichzeitig eine Sperre wie @spid1 und über die der Benutzer auch Informationen möchte. @spid2 ist int mit einem Standardwert von NULL.

Rückgabecodewerte

0 (Erfolg).

Resultset

Das sp_lock Resultset enthält eine Zeile für jede Sperre, die von den im @spid1 angegebenen Sitzungen und @spid2 Parametern 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 verwenden, um die Datenbank zu identifizieren.
ObjId int Die ID des Objekts, auf dem die Sperre aufrechterhalten wird. Sie können die OBJECT_NAME() Funktion in der zugehörigen Datenbank verwenden, um das Objekt zu identifizieren. Ein Wert von 99 ist ein Sonderfall, der eine Sperre auf einer der Systemseiten angibt, mit denen die Zuordnung von Seiten in einer Datenbank erfasst wird.
IndId smallint Die ID des Indexes, auf dem die Sperre aufrechterhalten wird.
Type nchar(4) Der Sperrentyp:

RID = Sperren einer einzelnen Zeile in einer Tabelle, die durch einen Zeilenbezeichner (RID) identifiziert wird.
KEY = Sperren in einem Index, der einen Bereich von Schlüsseln in serialisierbaren Transaktionen schützt.
PAG = Sperren auf einer Daten- oder Indexseite.
EXT = Sperrung in einem Umfang.
TAB = Sperren einer gesamten Tabelle, einschließlich aller Daten und Indizes.
DB = Sperren einer Datenbank.
FIL = Sperren einer Datenbankdatei.
APP = Sperren einer anwendungsspezifischen Ressource.
MD = Sperrt Metadaten oder Kataloginformationen.
HBT = Sperren auf einem Heap oder B-Tree (HoBT). Diese Informationen sind in SQL Server unvollständig.
AU = Sperren einer Zuordnungseinheit. Diese Informationen sind in SQL Server unvollständig.
Resource nchar(32) Der Wert, der die gesperrte Ressource identifiziert. Das Format des Werts hängt vom Typ der in der Type Spalte identifizierten Ressource ab:

Type Wert: Resource Wert
RID: Ein Bezeichner im Format fileid:pagenumber:rid, in dem fileid die Datei identifiziert wird, die die Seite enthält, pagenumber identifiziert die Seite, die die Zeile enthält, und rid identifiziert die spezifische Zeile auf der Seite. fileid entspricht der file_id Spalte in der sys.database_files Katalogansicht.
KEY: Eine hexadezimale Zahl, die intern vom Datenbank-Engine verwendet wird.
PAG: Eine Zahl im Format fileid:pagenumber, in fileid der die Datei identifiziert wird, die die Seite enthält, und pagenumber identifiziert die Seite.
EXT: Eine Zahl, die die erste Seite im Umfang identifiziert. Die Zahl befindet sich im Format fileid:pagenumber.
TAB: Keine Informationen bereitgestellt, da die Tabelle bereits in der ObjId Spalte identifiziert ist.
DB: Keine Informationen bereitgestellt, da die Datenbank bereits in der dbid Spalte identifiziert 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 resource_description Spalte in sys.dm_tran_locks.
HBT: Keine Informationen angegeben. Verwenden Sie stattdessen die sys.dm_tran_locks dynamische Verwaltungsansicht.
AU: Keine Informationen angegeben. Verwenden Sie stattdessen die sys.dm_tran_locks dynamische Verwaltungsansicht.
Mode nvarchar(8) Der angeforderte Sperrmodus. Mögliche Werte sind:

NULL = Es wird keine Zugriff auf die Ressource gewährt. Dient als Platzhalter.
Sch-S = Schemastabilität. Stellt sicher, dass ein Schemaelement, z. B. eine Tabelle oder ein Index, nicht verworfen wird, während eine Sitzung eine Schemastabilitätssperre für das Schemaelement enthä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 = Freigegeben. Der haltenden Sitzung wird der gemeinsame Zugriff auf die Ressource erteilt.
U = Aktualisieren. Gibt eine Aktualisierungssperre an, die für Ressourcen erworben wurde, die möglicherweise aktualisiert werden. Es wird verwendet, um eine häufige Form von Deadlock zu verhindern, die auftritt, wenn mehrere Sitzungen Ressourcen für ein potenzielles Update zu einem späteren Zeitpunkt sperren.
X = Exklusiv. Der haltenden Sitzung wird exklusiver Zugriff auf die Ressource erteilt.
IS = Absicht freigegeben. Gibt die Absicht an, S-Sperren für eine untergeordnete Ressource in der Sperrhierarchie zu platzieren.
IU = Intent Update. Gibt die Absicht an, U-Sperren für eine untergeordnete Ressource in der Sperrhierarchie zu platzieren.
IX = Intent Exclusive. Gibt die Absicht an, X-Sperren für eine untergeordnete Ressource in der Sperrhierarchie zu platzieren.
SIU = Shared Intent Update. Zeigt den gemeinsamen Zugriff auf eine Ressource mit der Absicht an, Updatesperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten.
SIX = Exklusiv für freigegebene Absichten. Zeigt den gemeinsamen Zugriff auf eine Ressource mit der Absicht an, exklusive Sperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten.
UIX = Exklusive Aktualisierungsabsicht. Zeigt eine aufrechterhaltene Updatesperre für eine Ressource mit der Absicht an, exklusive Sperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten.
BU = Massenaktualisierung. Wird von Massenvorgängen verwendet.
RangeS_S = Freigegebener Schlüsselbereich und freigegebene Ressourcensperre. Zeigt serialisierbaren Bereichsscan an.
RangeS_U = Freigegebener Schlüsselbereich und Ressourcensperre aktualisieren. Zeigt serialisierbaren Updatescan an.
RangeI_N = Schlüsselbereich und NULL-Ressourcensperre einfügen. Wird zum Testen von Bereichen verwendet, bevor ein neuer Schlüssel in einen Index eingefügt wird.
RangeI_S = Schlüsselbereich-Konvertierungssperre. Wird durch eine Überschneidung von RangeI_N und RangeS_S-Sperren erstellt.
RangeI_U = Schlüsselbereich-Konvertierungssperre, die durch eine Überlappung von RangeI_N- und U-Sperren erstellt wurde.
RangeI_X = Schlüsselbereich-Konvertierungssperre, die durch eine Überlappung von RangeI_N- und X-Sperren erstellt wurde.
RangeX_S = Schlüsselbereichskonvertierungssperre, die durch eine Überschneidung von RangeI_N und RangeS_S erstellt wurde. erzeugt wurde.
RangeX_U = Schlüsselbereich-Konvertierungssperre, die durch eine Überlappung von RangeI_N und RangeS_U Sperren erstellt wurde.
RangeX_X = Exklusive Schlüsselbereich und exklusive Ressourcensperre. 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, die Konvertierung wird jedoch durch einen anderen Prozess blockiert, der eine Sperre mit einem konfliktierenden Modus enthält.
GRANT: Die Sperre wurde abgerufen.
WAIT: Die Sperre wird durch einen anderen Prozess blockiert, der eine Sperre mit einem Konfliktmodus hält.

Hinweise

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

  • Wird SET TRANSACTION ISOLATION LEVEL verwendet, um die Sperrebene für eine Sitzung anzugeben. 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).

  • Verwenden von Sperren von Tabellenhinweisen zum Angeben der Sperrebene für einen einzelnen Bezug einer Tabelle in einer FROM Klausel. Informationen zu Syntax und Einschränkungen finden Sie unter Tabellenhinweise (Transact-SQL).For syntax and restrictions, see Table hints (Transact-SQL).

Alle verteilten Transaktionen, denen keine Sitzung zugeordnet ist, sind verwaiste Transaktionen. Die Datenbank-Engine weist alle verwaisten verteilten Transaktionen den SPID-Wert -2zu, der es einem Benutzer erleichtert, verteilte Transaktionen zu blockieren. Weitere Informationen finden Sie unter Verwendung von markierten Transaktionen zum konsistenten Wiederherstellen verwandter Datenbanken.

Berechtigungen

Erfordert die VIEW SERVER STATE-Berechtigung.

Beispiele

A. Alle Sperren auflisten

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 Einzelserverprozess

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

USE master;
GO
EXEC sp_lock 53;
GO