Oracle对某些表的更新无限期挂起

Che*_*het 2 database oracle sqlplus

我可以很好地更新一些表,但我的ASP.NET应用程序或SQLPLUS无法更新我拥有的某个表.两者都无限期地挂起.我必须强行退出SQLPLUS.我在运行以下内容的标准OracleCommand对象中都有更新语句:

cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

但我也有asp:SqlDataSources绑定到GridView.似乎没什么用.

这里有一个类似的问题:Oracle Update挂起.我粗略地认为某些东西必须在这张桌子上有某种锁,但我不知道如何删除它甚至找不到它.任何帮助将不胜感激.

我正在运行Oracle 9i EE 9.2.

cag*_*boy 6

可能是另一个会话有未完成的工作(即UPDATE或DELETE)

你可以找到这可能与哪个会话...

select s1.username || '@' || s1.machine    || ' ( SID=' || s1.sid || ' ) is blocking '
  || s2.username || '@' || s2.machine || ' ( SID=' || s2.sid || ' ) ' AS blocking_status
  from v$lock l1, v$session s1, v$lock l2, v$session s2
  where s1.sid=l1.sid and s2.sid=l2.sid
  and l1.BLOCK=1 and l2.request > 0
  and l1.id1 = l2.id1
  and l2.id2 = l2.id2
Run Code Online (Sandbox Code Playgroud)

编辑:

有可能你在一个缺少COMMIT的地方找到了一些代码.

检查V $ SESSION中的违规会话ID,看看是否可以确定它可能是哪个代码.

为了帮助您找到胭脂代码(假设它是什么),您可以使用...找到会话运行的最后一个SQL命令.

select *
from   v_$sqltext, v_$session
where  v_$session.prev_hash_value = v_$sqltext.hash_value
and    [some filter on v_$session]
Run Code Online (Sandbox Code Playgroud)