oracle查看死锁和处理方法
在操作数据库中经常会遇到表死锁问题,特别是不良的数据库设计和操作的时候,更容易遇到死锁问题。今天在系统中往oracle中添加数据时,特意快速多点几次添加的时候,就出现了死锁问题,而且刚好在读取和更新表的主键值时出现死锁。今天先不谈如何设计不出现死锁问题,只是记录一下如何通过sql语句查找和解决死锁问题。
查看被锁住的表
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
查询死锁的sql语句
select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object))
查询被锁住的进程
select username,lockwait,status,machine,program from v$session where sid in (select session_id from v$locked_object)
处理掉死锁的进程
alter system kill session ‘sid,serial#’;
wala-wo