小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


ORA-00060: リソース待機の間にデッドロックが検出されました。

はじめに

Oracleには、デッドロックを検出してエラーにする機能があることを知りました。

デッドロックを起こしてみる。

まず、SQL*Plusのコンソールを2つ立ち上げます。
1.トランザクション1がID1のレコードをロックします。

select * from table01 where id = '1' for update;

2.トランザクション2がID2のレコードをロックします。

select * from table01 where id = '2' for update;

3.トランザクション1がID2のレコードをロックすると、すでにトランザクション2によってロックされているため、waitします。

select * from table01 where id = '1' for update;
>...

4.トランザクション2がID1のレコードをロックすると、すでにトランザクション1によってロックされているため、waitします。
この場合、デッドロックが発生し、トランザクション1側がORA-00060のエラーとなります。

ORA-00060: リソース待機の間にデッドロックが検出されました。

関連記事