0

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コマンドのみを使用している場合、このエラーの考えられる理由は何ですか?

4

1 に答える 1

2

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

そのため、NOWAIT を指定しないことが 1 つの可能性です。

「圧倒された」ためにデータベースがこのエラーをスローする状況を認識していません。

于 2012-04-27T13:10:38.603 に答える