LoginSignup
0
1

More than 5 years have passed since last update.

1. SELECT ... FOR UPDATE ⇒ 2. DDL(待機) ⇒ 3. UPDATE ⇒ 1. COMMIT ⇒ 2. DDL流れる ⇒ 3. ROLLBACK でどうなるか?(Oracle Database)

Posted at

これもやってみましたやで彡(゚)(゚) まずはテストデータから。

テストデータ
SELECT C1 FROM TBL_A;

        C1
----------
         1
         2

 

  • Session1(SELECT ... FOR UPDATE文)
SELECT 1 FROM TBL_A WHERE C1 = 1 FOR UPDATE;

         1
----------
         1

23:05:42 SQL>

 

  • Session2(ALTER TABLE文)
※待たされる
ALTER TABLE TBL_A ADD (C2 VARCHAR2(10));

 

  • Session3(※Session1とは異なるレコードをUPDATE)
※すぐ実行される
UPDATE TBL_A SET C1 = 3 WHERE C1 = 2;

1 row updated.

23:05:58 SQL>

 

  • Session1の続き(COMMITしてロック解放)
COMMIT;

Commit complete.

23:06:26 SQL>

 

  • Session2の続き
※待たされていたDDLが流れる。
Table altered.

23:06:26 SQL>

 

  • Session3の続き(ROLLBACK)
※上手く行く。
ROLLBACK;

Rollback complete.

23:06:30 SQL>

結局ロックが競合するポイントが最初の

Session1のFOR UPDATE ← Session2のALTER文

しか無いので、あとは流れちゃうんですやね。彡(゚)(゚)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1