はじめに
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: リソース待機の間にデッドロックが検出されました。
関連記事