oracle死锁原因分析

来源:互联网 发布:2017学什么编程 编辑:程序博客网 时间:2024/04/27 16:38
select /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ 'Wait' "Status", a.username, a.machine, a.sid, a.serial#, a.last_call_et "Seconds", b.id1,c.sql_text "SQL"from v$session a, v$lock b, v$sqltext cwhere a.username is not nulland a.lockwait = b.kaddrand c.hash_value =a.sql_hash_valueunionselect /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ 'Lock' "Status", a.username, a.machine, a.sid, a.serial#, a.last_call_et "Seconds", b.id1, c.sql_text "SQL"from v$session a, v$lock b, v$sqltext cwhere b.id1 in(select /*+ NO_MERGE(d) NO_MERGE(e) */ distinct e.id1from v$session d, v$lock ewhere d.lockwait = e.kaddr)and a.username is not nulland a.sid = b.sidand b.request=0and c.hash_value =a.sql_hash_value/*其中:Status有两种状态,LOCK表明该进程锁住了某个资源,WAIT表示该进程正在等待某个资源。Username, Machine分别为ORACLE用户名及机器名SID,SERIAL#可用于随后的解锁操作Seconds表示该进程最后一次进行操作至当前的时间(秒)ID1, 锁标识。某个LOCK状态的ID1与某个WAIT状态的ID1相同,可说明锁的正是另一个进程等待的。SQL: 锁住资源的SQL语句2. 解除锁诊断出锁的状态后,若发现该阻塞其它用户进程的进程是正常操作中,则可通知该用户对其进行提交,从而达到释放锁资源的目的;若为非正常操作,即,其状态为"inactive",且其Seconds已为较多长时间,则可执行以下语句将该进程进行清除,系统会自动对其进行回滚,从而释放锁住的资源。 alter system kill session 'sid, serial#'; 例如: 对于上例中显示的结果, 可用以下语句清除锁住资源的进程:alter system kill session '12, 966'; */
原创粉丝点击