数据库oracle
程序中有一个事务,操作三个表,在操作完第一个表的时候有一个断点,导致后来的都没执行,然后过了很久,回来继续执行,控制台提示connection shutdown
然后去数据库里操作第一个表的时候提示record is locked by another user,
这个时候怎么处理可以解锁这条数据
--查找锁表进程
SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,
s.terminal, s.logon_time, l.type
FROM v$session s, v$lock l
WHERE s.sid = l.sid
AND s.username IS NOT NULL
ORDER BY sid;
--杀掉进程 sid,serial#
alter system kill session'210,11562';
oracle
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
--查看那个用户那个进程照成死锁
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
杀掉锁表进程:
如有记录则表示有lock,记录下SID和serial# ,将记录的ID替换下面的1,2,即可解除LOCK
alter system kill session '1,2';
仅做参考 之前用过好久没用了 不过方法就是这样的 如果不能直接运行语句可百度
--检查死锁记录
SELECT s.sid, s.serial#,ao.OBJECT_NAME,s.EVENT
FROM v$locked_object lo, dba_objects ao, v$session s
WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;
--杀掉进程 sid,serial#
alter system kill session 'sid,serial#';//sid,serial#取自查询死锁记录的结果