查询数据库中表被锁的情况
来源:互联网 发布:麦乐迪软件 编辑:程序博客网 时间:2024/06/05 17:38
SQL Server:
1. 查看当前被锁对象
select dtl.request_session_id spid,
object_name(dtl.resource_associated_entity_id) table_name,
db.name db_name,
dtl.request_mode,
dtl.request_type,
dtl.request_status,
dtl.request_owner_type
from sys.dm_tran_locks dtl,sys.databases db
where dtl.resource_database_id=db.database_id
and dtl.resource_type='OBJECT'
and dtl.request_mode='IX';
或者执行 sp_who 查看mode=’IX’.
2 查看锁的语句,需要创建存储过程,并执行SP_WHO_LOCK(推荐)
create procedure [dbo].[sp_who_lock]AS
BEGIN
declare @spid int,
@bl int,
@intTransactionCountOnEntry int,
@intRowcount int,
@intCountProperties int,
@intCounter int
create table #tmp_lock_who
( id int identity(1,1),
spid smallint,
bl SMALLINT )
IF @@ERROR<>0 RETURN @@ERROR
insert into #tmp_lock_who(spid,bl)
select 0, blocked
from (select * from master.dbo.sysprocesses where blocked>0 ) a
where not EXISTS (select * from (select * from master.dbo.sysprocesses where blocked>0) b where spid=a.blocked)
union
select spid,blocked from master.dbo.sysprocesses where blocked>0
IF @@ERROR<>0 RETURN @@ERROR
select @intCountProperties = Count(*), @intCounter = 1
from #tmp_lock_who
IF @@ERROR<>0 RETURN @@ERROR
if @intCountProperties = 0
select 'No Locking!' as MESSAGE
while @intCounter <= @intCountProperties
BEGIN
select @spid = spid, @bl = bl
from #tmp_lock_who
where Id = @intCounter
begin
if @spid = 0
select 'The locking session is: '+ CAST(@bl AS VARCHAR(10)) + ', the sql is below.'
else
select 'Session SPID: '+ CAST(@spid AS VARCHAR(10))+ ' is locked by Session SPID: '+ CAST(@bl AS VARCHAR(10)) +',the sql is below.'
DBCC INPUTBUFFER (@bl )
end
set @intCounter = @intCounter + 1
END
drop table #tmp_lock_who
return 0
END
Oracle:
1. 当前被锁对象
select o.object_type,o.owner||'.'||o.object_nameobject,s.sid,s.serial#,p.spid,s.username,s.osuser,s.program,l.locked_mode
from v$locked_object l,dba_objects o,v$session s,v$process p
where l.object_id = o.object_id
and s.sid=l.session_id
and s.paddr=p.addr
2. 持有锁的会话与被等待锁的SQL
SELECT bs.username "Blocking User", bs.username "DB User",
ws.username "Waiting User", bs.sid "SID", ws.sid"WSID",
bs.serial# "Serial#", bs.sql_address "address",
bs.sql_hash_value "Sql hash", bs.program "Blocking App",
ws.program "Waiting App", bs.machine "Blocking Machine",
ws.machine "Waiting Machine", bs.osuser "Blocking OS User",
ws.osuser "Waiting OS User", bs.serial# "Serial#",
ws.serial# "WSerial#",
DECODE (wk.TYPE,
'MR', 'Media Recovery',
'RT', 'Redo Thread',
'UN', 'USER Name',
'TX', 'Transaction',
'TM', 'DML',
'UL', 'PL/SQL USER LOCK',
'DX', 'Distributed Xaction',
'CF', 'Control FILE',
'IS', 'Instance State',
'FS', 'FILE SET',
'IR', 'Instance Recovery',
'ST', 'Disk SPACE Transaction',
'TS', 'Temp Segment',
'IV', 'Library Cache Invalidation',
'LS', 'LOG START OR Switch',
'RW', 'ROW Wait',
'SQ', 'Sequence Number',
'TE', 'Extend TABLE',
'TT', 'Temp TABLE',
wk.TYPE
) lock_type,
DECODE (hk.lmode,
0, 'None',
1, 'NULL',
2, 'ROW-S (SS)',
3, 'ROW-X (SX)',
4, 'SHARE',
5, 'S/ROW-X (SSX)',
6, 'EXCLUSIVE',
TO_CHAR (hk.lmode)
) mode_held,
DECODE (wk.request,
0, 'None',
1, 'NULL',
2, 'ROW-S (SS)',
3, 'ROW-X (SX)',
4, 'SHARE',
5, 'S/ROW-X (SSX)',
6, 'EXCLUSIVE',
TO_CHAR (wk.request)
) mode_requested,
TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2,
DECODE (hk.BLOCK,
0, 'NOT Blocking', /* Not blocking any other processes */
1, 'Blocking', /* This lock blocks other processes */
2, 'Global', /* This lock is global, so we can't tell */
TO_CHAR (hk.BLOCK)
) blocking_others
FROM v$lock hk, v$session bs, v$lock wk, v$session ws
WHERE hk.BLOCK = 1
AND hk.lmode != 0
AND hk.lmode != 1
AND wk.request != 0
AND wk.TYPE(+) = hk.TYPE
AND wk.id1(+) = hk.id1
AND wk.id2(+) = hk.id2
AND hk.sid = bs.sid(+)
AND wk.sid = ws.sid(+)
AND (bs.username IS NOT NULL)
AND (bs.username <> 'SYSTEM')
AND (bs.username <> 'SYS')
ORDER BY 1;
- 查询数据库中表被锁的情况
- 查询数据库中表的大小情况。
- Scripts:查询数据库中表空间的情况汇总dba_tablespaces.sql
- 查询数据库中表的行数及空间占用情况
- 查询数据库中表的行数及空间占用情况
- 查询数据库中表的数量及详细信息
- 查询数据库中表使用的空间信息。
- 数据库中表的复杂查询&分页
- Sql Server, 查询数据库中表的大小
- 如何查询数据库中表的字段名?
- Oracle数据库--表锁的情况查询
- 查询数据库中表名(未完)
- 查询数据库中表信息等
- 查询MSSQL数据库中表结构的详细信息的SQL语句
- 查询sql数据库中表占用的空间大小
- 查询sql数据库中表占用的空间大小
- 统计一个数据库中表个数的sql查询语句
- MS SQLServer 查询数据库中表的记录数
- Jboss配置
- 国内学术期刊名录·2012 年版
- uva oj 445
- vb_20130911
- 携程篇之最牛团队
- 查询数据库中表被锁的情况
- JAVA学习---HANDLE EVENT
- Cglib动态代理
- COleControl Class
- Android_简单笔记一
- sql server新建有并授权, sp_configure命令
- C和C++中的字符串操作(比较详细)
- HtmlEmail发送邮件
- android tabhost