sp_lock (Transact-SQL)

適用於:SQL Server

報告鎖定的相關信息。

重要

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

Transact-SQL 語法慣例

語法

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

引數

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

[ @spid2 = ] 'session ID2'這是另一個 資料庫引擎 來自sys.dm_exec_sessions的會話標識碼號碼,其可能會與會話標識元1 同時鎖定,以及使用者也想要的資訊。 會話標識元2int ,預設值為NULL。

傳回碼值

0 (成功)

結果集

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

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

RID = 鎖定資料列識別碼 (RID) 所識別資料表中的單一數據列。

KEY = 鎖定索引內可保護可串行化交易中索引鍵的範圍。

PAG = 鎖定數據或索引頁面上。

EXT = 鎖定範圍。

TAB = 鎖定整個數據表,包括所有數據和索引。

DB = 鎖定資料庫。

FIL = 鎖定資料庫檔案。

APP = 鎖定應用程式指定的資源。

MD = 鎖定元資料或目錄資訊。

HBT = 鎖定堆積或 B 型樹狀結構 (HoBT)。 這項資訊在 SQL Server 中不完整。

AU = 鎖定配置單位。 這項資訊在 SQL Server 中不完整。
資源 nchar(32) 識別已鎖定之資源的值。 值的格式取決於 Type 資料行中所識別的資源類型:

類型 值: 資源

RID:fileid:pagenumber:rid 格式的標識符,其中 fileid 會識別包含頁面的檔案、pagenumber 識別包含數據列的頁面,以及 rid 會識別頁面上的特定數據列。 fileid 符合sys.database_files目錄檢視中的file_id數據行。

KEY:資料庫引擎 內部使用的十六進位數位。

PAG:fileid:pagenumber 格式的數位,其中 fileid 會識別包含頁面的檔案,而 pagenumber 會識別頁面。

EXT:識別範圍中第一頁的數位。 此數位的格式為 fileid:pagenumber。

TAB:沒有提供任何資訊,因為已在 ObjId 數據行中識別數據表。

DB:未提供任何資訊,因為資料庫已在 dbid 數據行中識別出來。

FIL:檔案的標識碼,符合sys.database_files目錄檢視中的file_id數據行。

APP:鎖定之應用程式資源的唯一標識符。 以 DbPrincipalId:<前兩到 16 個字元的資源字串><哈希值>格式。

MD:依資源類型而有所不同。 如需詳細資訊,請參閱 sys.dm_tran_locks (Transact-SQL)resource_description數據行的描述

HBT:未提供任何資訊。 請改用 sys.dm_tran_locks 動態管理檢視。

AU:未提供任何資訊。 請改用 sys.dm_tran_locks 動態管理檢視。
模式 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 = 獨佔索引鍵範圍和獨佔資源鎖定。 這是更新範圍中索引鍵時所使用的轉換鎖定。
狀態 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  

另請參閱

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)