SP_LOCK

摘要:SP_LOCK

--顯示被LOCK狀態
sp_lock

--刪除LOCK spid(確定狀況可刪除)
KILL spid

--spid是進程標識號碼 查詢何者連結該SPID
sp_who

--dbid是鎖定發生的數據庫(sysdatabases)
SELECT * FROM master.dbo.sysdatabases

--objid用來顯示在數據庫中鎖定發生所在的對象(sysobjects)
SELECT * FROM master.dbo.sysobjects

--這個DBCC命令將返回正在EventInfo字段中運行的語句的相關信息。
DBCC INPUTBUFFER(spid)


--列出最初導致一連串其它處理序被鎖住的起始源頭
IF EXISTS(SELECT * FROM master.dbo.sysprocesses WHERE spid in (SELECT blocked FROM master.dbo.sysprocesses))
 BEGIN
  SELECT spid 處理序, status 狀態
  , 登入帳號=SUBSTRING(SUSER_SNAME(sid), 1, 30)
  , 使用者機器名稱=SUBSTRING(hostname, 1, 12)
  , 是否鎖住=CONVERT(char(3), blocked)
  , 資料庫名稱=SUBSTRING(DB_NAME(dbid), 1, 10)
  , cmd 命令, waittype 等待類型
  FROM master.dbo.sysprocesses
  --找出鎖住別(自己未被鎖住(blocked=0) 但在別的處理序中blocked欄位出現的值)
  WHERE spid IN (SELECT blocked FROM master.dbo.sysprocesses)
  AND blocked = 0
 END
ELSE
 BEGIN
   SELECT '沒有處理序被鎖住'
 END
/*
 --開啟進階顯示(SQL2008以後需開啟)建議用完關掉
 EXEC sp_configure 'show advanced options', 1
 GO
 RECONFIGURE WITH OVERRIDE
 GO

 --取消平行處理
 EXEC sp_configure 'max degree of parallelism', 1
 GO
 RECONFIGURE WITH OVERRIDE
 GO
*/