sys.sp_lock (Transact-SQL)

Şunlar için geçerlidir: SQL Server

Kilitler hakkında bilgi bildirir.

Important

Bu özellik, SQL Server'ın gelecek bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın. SQL Server Database Engine kilitleri hakkında bilgi edinmek için sys.dm_tran_locks dinamik yönetim görünümünü kullanın.

Transact-SQL söz dizimi kuralları

Syntax

sys.sp_lock
    [ [ @spid1 = ] spid1 ]
    [ , [ @spid2 = ] spid2 ]
[ ; ]

Arguments

[ @spid1 = ] spid1

Kullanıcının kilitleme bilgisini almak istediği bir Database Engine oturum kimliği numarasısys.dm_exec_sessions. @spid1 bir halde, varsayılan olarak NULL. Oturumla ilgili süreç bilgisi elde etmek için çalıştırın sp_who . Eğer @spid1 belirtilmemişse, tüm kilitlerle ilgili bilgiler gösterilir.

[ @spid2 = ] spid2

Başka bir Database Engine oturum kimliği numarası sys.dm_exec_sessions@spid1 ile aynı anda kilitlenebilir ve kullanıcı da bu konuda bilgi almak ister. @spid2int, varsayılan olarak .NULL

Dönüş kodu değerleri

0 (başarı).

Sonuç kümesi

Sonuç kümesi, sp_lock@spid1 ve @spid2 parametrelerinde belirtilen oturumlar tarafından tutulan her kilit için bir satır içerir. Ne @spid1 ne de @spid2 belirtilmemişse, sonuç kümesi Database Engine örneğinde şu anda aktif olan tüm oturumların kilitlerini bildirir.

Sütun adı Veri türü Description
spid smallint Kilidi talep eden süreç için Database Engine oturum kimliği numarası.
dbid smallint Kilidin tutulduğu veritabanının kimlik numarası. Bu fonksiyonu veritabanını tanımlamak için kullanabilirsiniz DB_NAME() .
ObjId int Kilidin tutulduğu nesnenin kimlik numarası. İlgili veritabanındaki bu OBJECT_NAME() fonksiyonu kullanarak nesneyi tanımlayabilirsiniz. Değeri 99 , veritabanında sayfaların tahsisini kaydetmek için kullanılan sistem sayfalarından birinde kilitlenen özel bir durumdur.
IndId smallint Kilidin tutulduğu indeksin tanımlama numarası.
Type nchar(4) Kilit türü:

RID = Bir satır tanımlayıcı (RID) ile tanımlanan bir tablodaki tek bir satırda kilitlen.
KEY = Serileştirilebilir işlemlerde anahtarları koruyan bir indeks içindeki kilit.
PAG = Bir veri veya indeks sayfasını kilitleyin.
EXT = Bir ölçüde kilitle.
TAB = Tüm veri ve indeksler dahil olmak üzere tüm tabloyu kilitle.
DB = Bir veritabanını kilitle.
FIL = Bir veritabanı dosyasını kilitle.
APP = Uygulama tarafından belirlenen bir kaynağı kilitle.
MD = Meta veri veya katalog bilgisindeki kilitler.
HBT = Bir yığın veya B-Ağaç (HoBT) kilitle. Bu bilgiler SQL Server'da eksiktir.
AU = Tahsis birimini kilitle. Bu bilgiler SQL Server'da eksiktir.
Resource nchar(32) Kilitli kaynağı tanımlayan değer. Değerin formatı, sütunda Type belirtilen kaynak türüne bağlıdır:

Type Değer: Resource Değer
RID: Formatında fileid:pagenumber:ridbir tanımlayıcı, fileid burada sayfayı içeren dosyayı, pagenumber satırı içeren sayfayı ve rid sayfadaki belirli satırı tanımlar. fileid katalog görünümündeki file_idsys.database_files sütunla eşleşiyor.
KEY: Database Engine tarafından dahili olarak kullanılan onaltılık sayı.
PAG: Formatında fileid:pagenumberbir sayı, fileid burada sayfayı içeren dosyayı ve pagenumber sayfayı tanımlar.
EXT: Kapsamın ilk sayfasını tanımlayan bir sayı. Numara formatında fileid:pagenumber.
TAB: Tablo zaten sütunda ObjId tanımlandığı için bilgi verilmemiştir.
DB: Veritabanı zaten sütunda dbid tanımlandığı için bilgi verilmemiştir.
FIL: Katalog görünümündeki sütunla file_idsys.database_files eşleşen dosyanın tanımlayıcısı.
APP: Kilitlenen uygulama kaynağına özgü bir tanımlayıcı. Formatında DbPrincipalId:<first two to 16 characters of the resource string><hashed value>.
MD: kaynak türüne göre değişir. Daha fazla bilgi için resource_description sütunun açıklamasına bakınız.
HBT: Bilgi verilmedi. Bunun yerine dinamik yönetim görünümünü sys.dm_tran_locks kullanın.
AU: Bilgi verilmedi. Bunun yerine dinamik yönetim görünümünü sys.dm_tran_locks kullanın.
Mode nvarchar(8) Kilit modu istedi. Şu olabilir:

NULL = Kaynağa erişim izni verilmez. Bir geçici görev olarak hizmet ediyor.
Sch-S = Şema kararlılığı. Herhangi bir oturum şema elemanında şema stabilitesi kilidi tutarken tablo veya indeks gibi bir şema öğesinin düşürülmemesini sağlar.
Sch-M = Şema değişikliği. Belirtilen kaynağın şemasını değiştirmek isteyen herhangi bir oturum tarafından tutulmalıdır. Belirtilen nesneye başka oturumların referans vermediğinden emin olur.
S = Paylaşıldı. Tutma oturumuna kaynağa paylaşılan erişim verilir.
U = Güncelleme. Kaynaklarda edinilen ve sonrasında güncellenebilecek bir güncelleme kilidini gösterir. Bu, birden fazla oturumun kaynakları ileride güncelleme için kilitlediğinde ortaya çıkan yaygın bir çıkmaz türünü önlemek için kullanılır.
X = Özel. Oturuma özel kaynak erişimi verilir.
IS = Niyet Paylaşıldı. S kilitlerini kilit hiyerarşisindeki bazı alt kaynaklara yerleştirme amacını gösterir.
IU = Niyet Güncellemesi. U kilitlerini kilit hiyerarşisindeki bazı alt kaynaklara yerleştirme amacını gösterir.
IX = Niyetle Özel Görüş. Kilit hiyerarşisindeki bazı alt kaynaklara X kilitleri yerleştirme amacını gösterir.
SIU = Paylaşılan Niyet Güncellemesi. Kilit hiyerarşisindeki alt kaynaklarda güncelleştirme kilitleri alma amacıyla kaynağa paylaşılan erişimi gösterir.
SIX = Paylaşılan Niyet Özel Özellik. Bir kaynağa paylaşılan erişimi, kilit hiyerarşisindeki alt kaynaklarda özel kilitler edinme niyetiyle belirtir.
UIX = Niyetle Özel Güncelleme. Kilit hiyerarşisindeki alt kaynaklarda özel kullanım kilitleri alma amacıyla bir kaynakta güncelleştirme kilidi tutma durumunu gösterir.
BU = Toplu Güncelleme. Toplu işlemler tarafından kullanılır.
RangeS_S = Paylaşılan Key-Range ve Paylaşılan Kaynak kilidi. Serileştirilebilir aralık taramayı gösterir.
RangeS_U = Paylaşılan Key-Range ve Kaynak Kilidi Güncelleme. Serileştirilebilir bir güncelleştirme taramasını belirtir.
RangeI_N = Key-Range ve Null Resource kilidi ekle. Dizine yeni bir anahtar eklemeden önce aralıkları test etmek için kullanılır.
RangeI_S = Key-Range Dönüşüm kilidi. RangeI_N ve S kilitlerinin üst üste baz geçmesiyle oluşturulmuştur.
RangeI_U = Key-Range RangeI_N ve U kilitlerinin örtüşmesiyle oluşturulan dönüşüm kilidi.
RangeI_X = Key-Range RangeI_N ve X kilitlerinin örtüşmesiyle oluşturulan dönüşüm kilidi.
RangeX_S = Key-Range RangeI_N ve RangeS_S'in örtüşmesiyle oluşturulan dönüşüm kilidi. Kilitler.
RangeX_U = Key-Range RangeI_N ve RangeS_U kilitlerinin örtüşmesiyle oluşturulan dönüşüm kilidi.
RangeX_X = Özel Key-Range ve Özel Kaynak kilidi. Bu, aralıktaki bir anahtarı güncelleştirirken kullanılan dönüştürme kilididir.
Status nvarchar(5) Kilit isteği durumu:

CNVRT: Kilit başka bir moddan dönüştürülüyor, ancak çevirme, çelişkili modlu bir kilidi tutan başka bir süreç tarafından engelleniyor.
GRANT: Kilit alındı.
WAIT: Kilit, çelişkili modlu bir kilidi tutan başka bir süreç tarafından engellenmiştir.

Açıklamalar

Kullanıcılar, okuma işlemlerinin kilitlenmesini şu yollarla kontrol edebilirler:

Bir oturumla ilişkili olmayan tüm dağıtık işlemler yetim kalmış işlemlerdir. Database Engine, tüm yetim dağıtık işlemlere oturum kimliği -2ile atar; bu da kullanıcının dağıtık işlemleri engellemesini kolaylaştırır. Daha fazla bilgi için, İlgili Veritabanlarını Sürekli Kurtarmak İçin İşaretlenmiş İşlemleri Kullan bölümüne bakınız.

Permissions

VIEW SERVER STATE izin gerektirir.

SQL Server 2022 ve üzeri için izinler

Sunucuda VIEW SERVER PERFORMANCE STATE izin gerektirir.

Examples

A. Tüm kilitleri listele

Aşağıdaki örnek, şu anda Database Engine'in bir örneğinde tutulan tüm kilitler hakkında bilgileri gösterir.

USE master;
GO

EXECUTE sp_lock;
GO

B. Tek sunuculu bir süreçten bir kilidi listeleyin

Aşağıdaki örnek, kilitler dahil oturum kimliği 53hakkında bilgi sunar.

USE master;
GO

EXECUTE sp_lock 53;
GO