
--查询锁表的sid,serial
select busername,bsid,bserial#,logon_time from v session b where asession_id = bsid order by blogon_time;
--解表
alter system kill session'sid,serial';
看数据库、事物隔离级别以及是什么表锁
以SQLserver为例在默认事物隔离情况下为例
当某个表存在排他锁,比如一个事物未提交并且其中含有更新语句则产生排他锁
此时是无法对该表进行查询的,因为默认事物隔离级别(非脏读)下,select会对表加共享锁,但是排他锁不兼容共享锁,所以此时不能查询。
用下边的语句查询,如果想结束直接kill
SELECT SPID=pspid,
DBName = convert(CHAR(20),dname),
ProgramName = program_name,
LoginName = convert(CHAR(20),lname),
HostName = convert(CHAR(20),hostname),
Status = pstatus,
BlockedBy = pblocked,
LoginTime = login_time,
QUERY = CAST(tTEXT AS VARCHAR(MAX))
FROM MASTERdbosysprocesses p
INNER JOIN MASTERdbosysdatabases d
ON pdbid = ddbid
INNER JOIN MASTERdbosyslogins l
ON psid = lsid
CROSS APPLY sysdm_exec_sql_text(sql_handle) t
WHERE pblocked = 0
AND EXISTS (SELECT 1
FROM MASTERdbosysprocesses p1
WHERE p1blocked = pspid)
在 *** 作数据库的时候,有时候会由于 *** 作不当引起数据库表被锁定,这么我们经常不知所措,不知怎么给这些表解锁,在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话,但是我们很难找到那个会话被锁定了,想找到所以被锁的会话就更难了,下面这叫查询语句可以查询出所以被锁的会话。如下:
SELECT snusername, mSID,snSERIAL#, mTYPE,
DECODE (mlmode,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl',
4, 'Share',
5, 'S/Row Excl',
6, 'Exclusive',
lmode, LTRIM (TO_CHAR (lmode, '990'))
) lmode,
DECODE (mrequest,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl',
4, 'Share',
5, 'S/Row Excl',
6, 'Exclusive',
request, LTRIM (TO_CHAR (mrequest, '990'))
) request,
mid1, mid2
FROM v$session sn, v$lock m
WHERE (snSID = mSID AND mrequest != 0) --存在锁请求,即被阻塞
OR ( snSID = mSID --不存在锁请求,但是锁定的对象被其他会话请求锁定
AND mrequest = 0
AND lmode != 4
AND (id1, id2) IN (
SELECT sid1, sid2
FROM v$lock s
WHERE request != 0 AND sid1 = mid1
AND sid2 = mid2)
)
ORDER BY id1, id2, mrequest;
通过以上查询知道了sid和 SERIAL#就可以开杀了
alter system kill session 'sid,SERIAL#';
以上就是关于查看用户锁表和对表解锁的sql语句全部的内容,包括:查看用户锁表和对表解锁的sql语句、数据库锁表会影响前台查询吗、如何查询锁表的SQL等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)