2012-04-27 26 views
0

: - 私たちのコードではORA-00054エラーの原因は何ですか? Oracleのドキュメントから

ORA-00054 resource busy and acquire with NOWAIT specified 

    Cause: Resource interested is busy. 
    Action: Retry if necessary. 

は、我々は更新しようとしている行をロックするSELECT FOR UPDATE NOWAITコマンドを発行します。

今、ロジックがSQLエラー54を返す場合、ロジックは、別のユーザーが同じレコードを更新しようとしていると見なされます。この論理は有効ですか?

Oracleのマニュアルから、DBが圧倒されているような場合は、このエラーがスローされる可能性があります。

上記のSQLコマンドのみを使用しているときに、このエラーが発生する可能性がある理由は何ですか?

+1

エラーはすぐに、またはタイムアウトとして返されますか? – skaffman

+0

私はそこで麻薬をデバッグしたり置くことができないので、すぐに戻るかどうかはわかりません。コードはスタンドアロンサーバーで実行されています。 – AppleGrew

答えて

2

SELECT ... FOR UPDATEは、テーブルのRS(行共有)ロックとその行のX(排他的)ロックを取得しようとします。別のセッションがテーブルの排他ロック(インデックスの作成など)または行の排他ロック(更新のための更新、削除、または選択)を持つ場合、クエリは他のトランザクションがロックを解放するのを待ちます(コミットまたはロールバックNOWAITを指定していない限り)。

NOWAITを指定しないでください。

"圧倒"のためにこのエラーが発生する可能性がある状況を認識していません。

+0

それはここで問題です。これは私のローカルデータベースであり、私は唯一のユーザーです。このエラーの原因となった行をユーザーがロックしていたdbを見つける方法はありますか? – AppleGrew

+0

最後のコメントは明確ではありませんでした。どのようなクエリがこのエラーの原因となっている行をロックしたのかをdbから見つける方法はありますか? – AppleGrew

+0

クエリをWAITに変更すると、システムビューDBA_WAITERSがロックセッションを識別するのに役立ちます。 –

関連する問題