akk*_*346 1 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.
Run Code Online (Sandbox Code Playgroud)
INACTIVE 会话如何阻止 ACTIVE 会话?我如何获得有关此 INACTIVE 会话的更多信息?
一个INACTIVE会话阻塞一个会话非常简单ACTIVE。首先,之间的差异ACTIVE和INACTIVE。
一个ACTIVE会话只是一个是目前在数据库中调用。一个INACTIVE会话不是。一个简单的例子是,如果您有一个通过 的数据库连接SQL*Plus,并且它位于SQL>提示符处,那就是一个INACTIVE会话。只要您执行SQLorPL/SQL语句,会话就会变成ACTIVE。
现在,至于INACTIVE会话如何阻止一个会话ACTIVE,这非常简单。
想象两个SQL*Plus会话,都在SQL>提示时闲置。两者都是INACTIVE。现在,会话 1 执行:
update taba set col2='Hello world' where col1=1;
Run Code Online (Sandbox Code Playgroud)
会话 1 将暂时变为ACTIVE,并锁定它更新的行,然后返回INACTIVE状态。
现在,当会话 2 执行相同的SQL时会发生什么?
它将尝试更新相同的行,但会被INACTIVE尚未提交的会话 1阻塞,因此继续持有锁。与此同时,会话 2 仍然是ACTIVE,并将保持阻塞状态,ACTIVE直到会话 1 提交或回滚。
| 归档时间: |
|
| 查看次数: |
4742 次 |
| 最近记录: |