快速查询DB Lock的方法
DBCC Opentran
DBCC inputBuffer(id)
KILL (id)
?
sp_lock
?
--找出產生Lock的源頭
--Find locked process
select open_tran,* from sys.sysprocesses where blocked>0
--Find suspected process
select * from sys.sysprocesses where status='sleeping' and waittype=0x0000 and open_tran>0
--Find original process locking others
IF EXISTS(SELECT * FROM master.sys.sysprocesses WHERE spid
??? IN (SELECT blocked FROM master.sys.sysprocesses)) --Make sure there is locked process
??? SELECT spid ,status , LoginUser=SUBSTRING(SUSER_SNAME(sid),1,30),
?????? Hostname, IsBlocked=CONVERT(char(3),blocked),
?????? DBName= SUBSTRING(DB_NAME(dbid),1,20),program_name, last_batch,cmd,waittype
??? FROM master.sys.sysprocesses
??? --List process whose blocked=0 but found in other process's blocked column
??? WHERE spid IN (SELECT blocked FROM master.sys.sysprocesses)
??? AND blocked=0
ELSE
??? SELECT 'No Locked Process'
?
??
--查詢Lock情形
declare? @temp table
(spid int,dbid int,ObjId int,IndId int,Type varchar(3),Resouse varchar(20),Mode varchar(5),Status varchar(5))
INSERT @temp EXEC sp_lock? --@@spid
--select * from @temp
--For SQL2000
SELECT spid,dbname=db_name(dbid),objname=object_name(ObjId),
idxname=(SELECT name FROM sysindexes WHERE id=ObjId AND indid=t.IndId),
Type,Resouse,Mode,Status FROM @Temp t WHERE dbid>=5 and TYPE in ('TAB', 'KEY', 'RID') and object_name(ObjId) is not? null
ORDER BY dbid,objid,indid
?
--For SQL Server 2005; use sys.indexes?
SELECT spid,dbname=db_name(dbid),objname=object_name(ObjId),
Idxname=(SELECT name FROM sys.indexes WHERE object_id=ObjId AND index_id=t.IndId),
Type,Resouse,Mode,Status FROM @temp t WHERE dbid>=5 and TYPE in ('TAB', 'KEY', 'RID') and object_name(ObjId) is not null
ORDER BY dbid,objid,indid
?
?
?
轉載于:https://www.cnblogs.com/songguangqin/archive/2008/12/21/1359209.html
總結
以上是生活随笔為你收集整理的快速查询DB Lock的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql+phpmyadmin配置流程
- 下一篇: 采用POD以及DMD方法实现圆柱绕流流动