sp_lock (Transact-SQL)
Aktualisiert: 14. April 2006
Stellt Informationen zu Sperren bereit.
Wichtig: |
---|
Dieses Thema zu gespeicherten Systemprozeduren wird nur aus Gründen der Abwärtskompatibilität in Microsoft SQL Server 2005 eingeschlossen. Wenn Sie weitere Informationen zu Sperren in SQL Server 2005-Datenbankmodul erhalten möchten, verwenden Sie die dynamische Verwaltungssicht sys.dm_tran_locks. Weitere Informationen finden Sie unter sys.dm_tran_locks. |
Wichtig: |
---|
Dieses Feature hat sich gegenüber früheren SQL Server-Versionen geändert. Weitere Informationen finden Sie unter Fehlerhafte Änderungen an Features des Datenbankmoduls in SQL Server 2005. |
Transact-SQL-Syntaxkonventionen
Syntax
sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]
[ ; ]
Argumente
- [ @spid1 = ] 'session ID1'
Eine Sitzungs-ID (SPID in SQL Server 2000 und früher) von Datenbankmodul aus sys.dm_exec_sessions, für die der Benutzer Informationen zu Sperren wünscht. session ID1 ist vom Datentyp int. Der Standardwert ist 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 Sitzungs-ID von Datenbankmodul aus sys.dm_exec_sessions, die möglicherweise gleichzeitig mit session ID1 gesperrt ist und zu der der Benutzer ebenfalls Informationen wünscht. session ID2 ist vom Datentyp int. Der Standardwert ist 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 Datenbankmodul gegenwärtig aktiviert sind.
Spaltenname | Datentyp | Beschreibung |
---|---|---|
spid |
smallint |
Die Sitzungs-ID von 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. |
Type |
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 2005 unvollständig. AU = Sperre für eine Zuordnungseinheit. Diese Informationen sind in SQL Server 2005 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, der das Format fileid:pagenumber:rid aufweist, wobei fileid die Datei identifiziert, die die Seite enthält, pagenumber, die Seite, die die Zeile enthält, und rid, die Zeile auf der Seite. fileid entspricht der file_id-Spalte in der sys.database_files-Katalogsicht. KEY: Eine hexadezimale Zahl, die intern von 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. Das verwendete Format ist DbPrincipleId:<Die ersten 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. 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 = Gemeinsame Sperre. Der haltenden Sitzung wird der gemeinsame Zugriff auf die Ressource erteilt. U = Aktualisierungssperre. Zeigt eine Aktualisierungssperre 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 gemeinsame Sperre. Zeigt die Absicht an, S-Sperren für eine untergeordnete Ressource in der Sperrhierarchie zu platzieren. IU = Beabsichtigte Aktualisierungssperre. 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 = Gemeinsame Sperre mit beabsichtigter Aktualisierungssperre. Zeigt den gemeinsamen Zugriff auf eine Ressource mit der Absicht an, Aktualisierungssperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten. SIX = Gemeinsame 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 = Aktualisierungssperre mit beabsichtigter exklusiver Sperre. Zeigt eine aufrechterhaltene Aktualisierungssperre für eine Ressource mit der Absicht an, exklusive Sperren für untergeordnete Ressourcen in der Sperrhierarchie zu erhalten. BU = Massenaktualisierungssperre. Wird von Massenvorgängen verwendet. RangeS_S = Gemeinsame Sperren für Schlüsselbereich und Ressource. Zeigt serialisierbaren Bereichsscan an. RangeS_U = Gemeinsame Sperre für Schlüsselbereich und Aktualisierungssperre für Ressource. Zeigt serialisierbaren Aktualisierungsscan 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 erstellt 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 zur Aktualisierung 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. Hinweise zur Syntax und zu Einschränkungen finden Sie unter Tabellenhinweis (Transact-SQL).
Weitere Informationen zu den von Datenbankmodul verwendeten Sperrtypen finden Sie unter Sperren im Datenbankmodul.
Alle verteilten Transaktionen, denen keine Sitzung zugeordnet ist, sind verwaiste Transaktionen. 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 Verwenden markierter 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 Datenbankmodul bestehen.
USE master;
GO
EXEC sp_lock;
GO
B. Auflisten einer Sperre für einen Einzelserverprozess
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
DB_NAME (Transact-SQL)
KILL (Transact-SQL)
OBJECT_NAME (Transact-SQL)
sp_who (Transact-SQL)
sys.database_files (Transact-SQL)
sys.dm_os_tasks
sys.dm_os_threads
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version
Verlauf
14. April 2006
Begriff
Definition
Geänderter Inhalt:
- Das Beispiel wurde in sys.dm_os_tasks verschoben.
- Verweise auf SPID wurden durch die Sitzungs-ID ersetzt.