ORA-25351: transaction is currently in use
Cause: The transaction is currently used by a different session.
Action: Do not switch to a transaction attached to some other session.
。
ORA-25351 错误表明当前正在使用的事务正在被另一个事务占用或延续。
ORA-25351被触发时,说明其他 session 正在使用此事务。
有时候,程序会在一个会话中启动事务,但忘记关闭事务。如果该会话在没有明确关闭事务之前意外断开连接,则这个事务会始终是激活状态。在这种情况下,其他会话尝试使用该事务时,会触发ORA-25351。
1. 找到当前正在使用的事务的会话 ID,使用以下语句:
SELECT SI.USERNAME, SI.SID, SI.SERIAL#,
SUB.XIDUSN, SUB.XIDSQN, SUB.FLAG,
SUB.REFERENCE_ADDRESS
FROM V$SESSION SI, V$TRANSACTION SUB
WHERE SI.SID = SUB.SES_ADDR;
2. 将查看到的会话 ID 关闭:
ALTER SYSTEM KILL SESSION ‘sid, serial#’;
3. 验证事务是否仍处于激活状态,使用:
SELECT SI.USERNAME, SI.SID, SI.SERIAL#,
SUB.XIDUSN, SUB.XIDSQN, SUB.FLAG,
SUB.REFERENCE_ADDRESS
FROM V$SESSION SI, V$TRANSACTION SUB
WHERE SI.SID = SUB.SES_ADDR;
如果当前事务已完成,则不会再显示出当前异常情况,应该可以正常使用事务了。