oracle INACTIVE会话阻塞活动会话需要一种方法来查找阻塞的sqlid

时间:2017-11-12 15:15:13

标签: java oracle session

我正在使用以下信息获取oracle 11g数据库的锁定

06112017:11:00:09    WELOPP@n1pv97/46581  (Session=('300,19867')Status=INACTIVE sqlid=>) blocking WELOPP@n1pv97/45876          (Session=('1803,10683')
                      Status=ACTIVE sqlid=fp5x2quh0zpqk) for the last 91850 seconds.

06112017:11:00:09    WELOPP@n1pv97/46581  (Session=('300,19867')Status=INACTIVE sqlid=>) blocking WELOPP@n1pv97/59864          (Session=('843,58185')
                       Status=ACTIVE sqlid=fp5x2quh0zpqk) for the last 5388 seconds.

INACTIVE会话如何阻止ACTIVE会话? 如何获得有关此INACTIVE会话的更多信息?

1 个答案:

答案 0 :(得分:0)

INACTIVE会话阻止ACTIVE会话非常简单。首先,ACTIVEINACTIVE之间存在差异。

ACTIVE会话只是当前在数据库调用中的会话。 INACTIVE会话不是。一个简单的例子是,如果您通过SQL*Plus建立了数据库连接,并且它位于SQL>提示符下,那就是INACTIVE会话。只要您执行SQLPL/SQL语句,会话就会变为ACTIVE

现在,关于INACTIVE会话如何阻止ACTIVE会话,嗯,这非常简单。

想象一下两个SQL*Plus个会话,它们都在SQL>提示符处闲置。两者都是INACTIVE。现在,会话1执行:

update taba set col2='Hello world' where col1=1;

会话1将暂时变为ACTIVE,并对其更新的行进行锁定,并返回INACTIVE状态。

现在,当Session 2执行相同的 SQL时会发生什么?

它将尝试更新相同的行,但会被未提交的INACTIVE会话1阻止,因此会继续保持锁定状态。与此同时,会话2仍为ACTIVE,并且将保持阻塞并保持ACTIVE,直到会话1提交或回滚。

希望这很清楚。