2009-08-05 11 views
2

いくつかのテーブルを正常に更新できますが、私が持っているテーブルはASP.NETアプリケーションまたはSQLPLUSで更新できません。どちらも無期限にハングします。私は強制的にSQLPLUSを終了しなければならない。私が実行している標準のOracleCommandオブジェクトの両方で更新していたstatments:特定のテーブルへのOracleの更新が無期限に実行される

cmd.ExecuteNonQuery(); 

を私はまた、ASPがあります:GridViewのにバインドSqlDataSourcesを。何も動作していないようです。

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

私はOracle 9i EE 9.2を使用しています。

答えて

6

チャンスはあなたがこれは...

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 

EDITとなる可能性があるセッション(複数可)を見つけることができます

別のセッションがコミットされていない作業(すなわち更新または削除)を持っていることですチャンスはあなたがコミットが見つからないどこかでコードの口紅を持っているということです。

V $ SESSIONで違反しているセッションIDを確認して、どのコードである可能性があるかを確認してください。 (それはそれが何であるかだと仮定して)あなたが口紅コードを見つけること

は、あなたは、

select * 
from v_$sqltext, v_$session 
where v_$session.prev_hash_value = v_$sqltext.hash_value 
and [some filter on v_$session] 
+0

は非常にクールな...最後のSQLコマンドを使用して、セッションで走ったおかげで見つけることができます。今度は、SID 28が6つの異なるSIDをブロックする6行を返します。それらをブロック解除するにはどうすればよいですか? =) – Chet

+0

これらのセッションをコミット/ロールバックできない場合は、ALTER SYSTEM KILL SESSION 'session-id、session-serial'を使用してセッションを終了できます。 殺害していることを正確に知っていることに注意してください。実行中のトランザクションをブロックするだけで –

関連する問題