共用方式為


sp_lock (Transact-SQL)

適用於:SQL Server

報告鎖定的相關信息。

重要

SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 若要取得 SQL Server 資料庫引擎 中鎖定的相關信息,請使用sys.dm_tran_locks動態管理檢視。

Transact-SQL 語法慣例

語法

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

引數

[ @spid1 = ] spid1

使用者想要鎖定資訊的 資料庫引擎 會話標識碼sys.dm_exec_sessions@spid1為 int,預設值為 NULL。 執行 sp_who 以取得工作階段的相關進程資訊。 如果未 指定@spid1 ,則會顯示所有鎖定的相關信息。

[ @spid2 = ] spid2

另一個 資料庫引擎 會話標識符,sys.dm_exec_sessions其可能同時具有鎖定@spid1,以及使用者也想要的資訊。 @spid2為 int,預設值為 NULL

傳回碼值

0 (成功)。

結果集

sp_lock結果集針對@spid1@spid2參數中指定的會話所持有的每個鎖定,各包含一個數據列。 如果未指定@spid1@spid2,則結果集會報告 資料庫引擎 實例中目前使用中之所有會話的鎖定。

資料行名稱 資料類型 描述
spid smallint 要求鎖定之進程的 資料庫引擎會話標識碼。
dbid smallint 保留鎖定之資料庫的標識碼。 您可以使用 函式 DB_NAME() 來識別資料庫。
ObjId int 鎖定所在的物件識別碼。 您可以使用 OBJECT_NAME() 相關資料庫中的 函式來識別物件。 值 99 是一個特殊案例,表示其中一個系統頁面的鎖定,用來記錄資料庫中的頁面配置。
IndId smallint 鎖定所在的索引標識碼。
Type nchar(4) 鎖定類型:

RID = 鎖定資料列識別碼 (RID) 所識別資料表中的單一數據列。
KEY = 在索引內鎖定,以保護可串行化交易中的索引鍵範圍。
PAG = 鎖定資料或索引頁面。
EXT = 鎖定範圍。
TAB = 鎖定整個數據表,包括所有數據和索引。
DB = 鎖定資料庫。
FIL = 鎖定資料庫檔案。
APP = 鎖定應用程式指定的資源。
MD = 鎖定元資料或目錄資訊。
HBT = 鎖定堆積或 B 型樹狀結構 (HoBT)。 這項資訊在 SQL Server 中不完整。
AU = 鎖定配置單位。 這項資訊在 SQL Server 中不完整。
Resource nchar(32) 識別已鎖定之資源的值。 值的格式取決於資料行中所 Type 識別的資源類型:

Type 值: Resource
RID:格式 fileid:pagenumber:rid為 的識別碼,其中 fileid 會識別包含頁面的檔案、 pagenumber 識別包含數據列的頁面,以及 rid 識別頁面上的特定數據列。 fileidfile_id 比對目錄檢視中的數據 sys.database_files 行。
KEY:資料庫引擎 內部使用的十六進位數位。
PAG:格式 fileid:pagenumber的數位,其中 fileid 會識別包含頁面的檔案,並 pagenumber 識別頁面。
EXT:識別範圍中第一頁的數位。 數位格式 fileid:pagenumber為 。
TAB:因為數據表已在數據行中 ObjId 識別,因此未提供任何資訊。
DB:因為資料庫已在數據行中 dbid 識別出來,因此未提供任何資訊。
FIL:檔案的標識符,其符合 file_id 目錄檢視中的數據 sys.database_files 行。
APP:鎖定之應用程式資源的唯一標識符。 格式 DbPrincipalId:<first two to 16 characters of the resource string><hashed value>為 。
MD:依資源類型而有所不同。 如需詳細資訊,請參閱 sys.dm_tran_locks 中的數據行描述resource_description
HBT:未提供任何資訊。 請改用 sys.dm_tran_locks 動態管理檢視。
AU:未提供任何資訊。 請改用 sys.dm_tran_locks 動態管理檢視。
Mode nvarchar(8) 要求的鎖定模式。 可為以下項目:

NULL = 未將存取權授與資源。 做為佔位元。
Sch-S = 架構穩定性。 確保架構專案,例如數據表或索引,不會卸除,而任何會話都保留架構元素的架構穩定性鎖定。
Sch-M = 架構修改。 必須由任何想要變更指定資源之結構描述的工作階段所保留。 確保沒有其他工作階段參考指示的物件。
S = 共用。 保留工作階段被授予資源的共用存取權限。
U = 更新。 指出在最終可能更新的資源上取得的更新鎖定。 它用來防止在多個會話鎖定資源以供稍後進行潛在更新時發生的常見死結形式。
X = 獨佔。 保留工作階段被授予資源的獨佔存取權限。
IS = 意圖共用。 表示意圖將 S 鎖定置於鎖定階層中的某些次級資源上。
IU = 意圖更新。 表示意圖將 U 鎖定置於鎖定階層中的某些次級資源上。
IX = 意圖獨佔。 表示意圖將 X 鎖定置於鎖定階層中的某些次級資源上。
SIU = 共用意圖更新。 表示對資源的共用存取,意圖取得鎖定階層中的次級資源的更新鎖定。
SIX = 共用意圖獨佔。 表示對資源的共用存取,意圖取得鎖定階層中的次級資源的獨佔鎖定。
UIX = 更新意圖獨佔。 表示資源上的更新鎖定保留,意圖取得鎖定階層中的次級資源的獨佔鎖定。
BU = 大量更新。 供大量作業使用。
RangeS_S = 共用索引鍵範圍和共用資源鎖定。 表示可序列化的範圍掃描。
RangeS_U = 共用索引鍵範圍和更新資源鎖定。 表示可序列化的更新掃描。
RangeI_N = 插入索引鍵範圍和 Null 資源鎖定。 在將新的索引鍵插入索引之前用來測試範圍。
RangeI_S = 索引鍵範圍轉換鎖定。 由RangeI_N和 S 鎖定重疊所建立。
RangeI_U = 由RangeI_N和 U 鎖定重疊所建立的索引鍵範圍轉換鎖定。
RangeI_X = 由RangeI_N和 X 鎖定重疊所建立的索引鍵範圍轉換鎖定。
RangeX_S = 以重疊RangeI_N和RangeS_S所建立的索引鍵範圍轉換鎖定。 鎖定。
RangeX_U = 由RangeI_N和RangeS_U鎖定重疊所建立的索引鍵範圍轉換鎖定。
RangeX_X = 獨佔索引鍵範圍和獨佔資源鎖定。 這是在更新範圍中的索引鍵時所使用的轉換鎖定。
Status nvarchar(5) 鎖定要求狀態:

CNVRT:鎖定正從另一個模式轉換,但另一個進程會封鎖鎖定與衝突模式的鎖定。
GRANT:已取得鎖定。
WAIT:鎖定被另一個持有具有衝突模式鎖定的進程封鎖。

備註

用戶可以透過下列方式控制讀取作業的鎖定:

與會話無關的所有分散式交易都是孤立的交易。 資料庫引擎 會指派所有孤立的分散式交易 SPID 值-2,讓使用者更容易識別封鎖分散式交易。 如需詳細資訊,請參閱 使用標示的交易以一致的方式復原相關資料庫。

權限

需要 VIEW SERVER STATE 權限。

範例

A. 列出所有鎖定

下列範例會顯示 資料庫引擎 實例中目前保留之所有鎖定的相關信息。

USE master;
GO
EXEC sp_lock;
GO

B. 從單一伺服器進程列出鎖定

下列範例會顯示有關進程標識子 53的資訊,包括鎖定。

USE master;
GO
EXEC sp_lock 53;
GO