2

一部のテーブルは問題なく更新できますが、特定のテーブルは ASP.NET アプリケーションまたは SQLPLUS で更新できません。どちらも無期限にハングします。SQLPLUS を強制終了する必要があります。以下を実行している標準の OracleCommand オブジェクトの両方に update ステートメントがあります。

cmd.ExecuteNonQuery();

しかし、私は GridView にバインドされた asp:SqlDataSources も持っています。何も機能していないようです。

ここにも同様の質問があります: Oracle Update Hangs。何かがこのテーブルにある種のロックを持っている必要があるという大まかな考えがありますが、それを削除する方法や、それを見つける方法さえわかりません。どんな助けでも大歓迎です。

Oracle 9i EE 9.2 を実行しています。

4

1 に答える 1

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

編集:

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]
于 2009-08-05T14:13:30.303 に答える