查询数据库事务等待
select * from v$trxwait
结果中有3个字段,ID,WAIT_FOR_ID,WAIT_TIME,分别为事务ID,等待的事务ID,等待时间。
查询等待时间最长的事务对应的WAIT_FOR_ID,通过下面sql查询对应的事务详细信息
select * from v$trx where id = WAIT_FOR_ID
在结果中找到事务对应的会话SESS_ID,通过下面sql查询会话的详细信息
select * from v$sessions where sess_id = SESS_ID
可以看到会话的状态和对应sql脚本,STATE和SQL_TEXT,,当状态为IDLE(空闲)时,可以通过如下命令强制杀掉会话
sp_close_session(SESS_ID);
这样阻塞的事务基本可以正常走下去了。
另外通过下面sql可以查询事务有没有死锁
select * from v$lock where trx_id = 事务ID
结果中BLOCKED为1表示出现了锁等待,需要根据情况进行处理