2

テーブル ロックに関して、Oracle 11g データベースで問題が発生しています。

table1 などのテーブルを切り捨てる sql*plus を介して実行されるプロシージャがあります。テーブルが切り捨てられる部分でプロシージャの実行中に、ORA-00054: リソースがビジーで取得で NOWAIT エラーが発生することがあります。Tomcat サーバーに webapp があり、再起動すると (Tomcat からデータベースへのセッションを強制終了するため)、手順を正常に再実行できます。table1 は、select でも、webapp のソース コードでは使用されていませんが、table1 の多くの親テーブルは使用されています。

親テーブルの 1 つに対するコミットされていない更新がロックを引き起こしている可能性はありますか? もしそうなら、それをテストする方法について何か提案はありますか? 問題が発生したときに DBA に確認しましたが、プロシージャをブロックしているセッションと、ロックの原因となったステートメントを取得できませんでした。

4

2 に答える 2

0

テスト方法について何か提案はありますか?

エラーが発生した場合は、ブロックしているセッションを確認できORA-00054: resource busy and acquire with NOWAITます。

ブロッキング セッションは、あるセッションがオブジェクトの排他ロックを保持し、別のセッションが同じデータを更新する前にそれを解放しない場合に発生します。これは、最初がCOMMITまたはROLLBACKを実行するまで、2 番目をブロックします。

SELECT
   s.blocking_session, 
   s.sid, 
   s.serial#, 
   s.seconds_in_wait
FROM
   v$session s
WHERE
   blocking_session IS NOT NULL;

たとえば、私の同様の回答hereおよびhereを参照してください。

于 2015-04-15T05:20:35.870 に答える