2011-09-21 11 views
8

突然更新クエリが実行されません。私はクエリを選択することができますが、レコードを更新しようとすると、データベースは無限にハングアップします。私もSQL Plusから試してみて何も起こりません。UPDATEクエリにOracleデータベースが無限にぶら下がっています

+1

もっと明示できますか?システム上で何が起こっているのかを推測する方法はありません。あなたは何を知っていますか?あなたは何を確認しましたか?あなたのシステムはどのように動作していますか?更新クエリはどのように見えますか?どのようなDMLが同じテーブルに対して同時に実行されていますか? –

+0

ログオフしてもう一度OKにできますか? ARCHIVELOGモードですか?現在のアップデートを見つける別のセッションでコミットされていない変更がありますか?もう少し情報があれば便利かもしれません.... – Ollie

答えて

23

ほとんどの場合、同じレコードセットに対して別のオープンされているコミットされていないトランザクションがあるため、そのトランザクションでロックされています。

そしておそらくがロックされており、別のトランザクションで同じUPDATEが実行されています。

トランザクションをコミット/ロールバックするだけで問題ありません。

+2

今**私は教育的な推測と呼んでいます;-) –

+3

はい。はい、そうです。あなたがいつか周りにいて、初心者を指導しているとき、あなたはその強さが私のような気持ちになり、すべてのことを伝える前にその問題を知っています。 :)しかし、私はもちろん、必ずしも正しいとは限りません。 –

+0

私はその雰囲気を知っています。それは "それ以上のことを観察し、観察する"とうまく行く:) –

12

このクエリは、更新プログラムをブロックしているユーザーを表示します。この実行し、別のセッションで、その後、ハングアップデートを実行します。

select s1.username || '@' || s1.machine || 
    ' (SID=' || s1.sid || ') is blocking ' 
    || s2.username || '@' || s2.machine || ' (SID=' || s2.sid || ') ' AS blocking_status 
    from v$lock l1 join v$lock l2 on (l1.id1 = l2.id1 and l2.id2 = l2.id2) 
       JOIN v$session s1 ON (s1.sid = l1.sid) 
       JOIN v$session s2 ON (s2.sid = l2.sid) 
    WHERE l1.BLOCK=1 and l2.request > 0; 

編集:私はORAFAQからしばらく前にこれをcribbedよう

が適切にこれを属性に、それが見えます。

+0

私はそれをブックマークしなければなりません。非常に素晴らしい! –

+1

私はそれをたくさん使っています。私がそれを見つけた場所を覚えていればいいと思う。おそらくTom Kyteのスペシャルです。更新:私はここにそれを持っていると思う:http://orafaq.com/node/854 – DCookie

+0

どのように私たちは、結果のタスクを停止または殺すことができますか? – user3141985

関連する問題