问题描述:
解决方法1:通过pl/sql定位阻塞
1)确定节点(instance)和进程(session)
当出现阻塞时,4的位置和5的位置将出现数字,以此定位
2)确定阻塞session的具体信息
select * from gv$session where inst_id=1 and sid=2714;
看到osuser字段,明确为人名,于是这个session可直接kill;
同时从上面的得到sid,serial#字段,用于下一步kill session
3)kill session语句如下:
alter system kill session 'sid,serial#,@1';
其中@1指明是节点1上的session进程,若是在oracle节点2上执行该语句,但未指明是节点1,Oracle将找不到该进程,但是在单实例上就没有这个担忧。
解决方法2:通过sqlplus定位
- select * from v$lock; 查sid
- select sid,serial#,sql_text from v$session where sid=上面得sid;
- 接下来会对serial#进行kill操作,(因为sid会重复使用,无法准确定位)
- alter system kill session 'sid,serial#'(上面查的数字)
而kill session动作是rollback,而非commit