Àá±Ý °ü¸®
¿À¶óŬ ¼­¹ö´Â Àá±Ý(lock) ±â´ÉÀ» ÀÚµ¿À¸·Î °ü¸®ÇÕ´Ï´Ù. ¿À¶óŬÀÇ µðÆúÆ® Àá±Ý(lock) ¸ÞÄ¿´ÏÁòÀº °¡Àå  ³ôÀº µ¥ÀÌÅÍ µ¿½Ã¼ºÀ» Çã¿ëÇϸ鼭 µ¥ÀÌÅÍ ÀÏ°ü¼ºÀ» º¸ÀåÇÒ ¼ö ÀÖµµ·Ï Á¦Çѵµ°¡ °¡Àå ³·Àº ·¹º§¿¡¼­ µ¥ÀÌÅ͸¦ Àá±Þ´Ï´Ù.

ÁÖÀÇ: µðÆúÆ® ¸ÞÄ¿´ÏÁòÀº init.ora ÆĶó¹ÌÅÍ ROW_LOCKINGÀ» »ç¿ëÇÏ¿© ¼öÁ¤µÉ ¼ö ÀÖ½À´Ï´Ù. µðÆúÆ® °ªÀº ALWAYSÀÔ´Ï´Ù. ±×·¸±â ¶§¹®¿¡, ¿À¶óŬ ¼­¹ö´Â Ç×»ó Á¦Çѵµ°¡ °¡Àå ÀûÀº ·¹º§ÀÎ Çà ·¹º§¿¡¼­ Àá°ÜÁö¸ç, DML ¹®Àå ½ÇÇà µ¿¾È Å×ÀÌºí ·¹º§¿¡¼­´Â Àá°ÜÁöÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ, Çà ·¹º§ Àá±Ý(lock)ÀÌ »ç¿ëµÇ´Â SELECT FOR UPDATE ¹®À» Á¦¿ÜÇÏ°í, ´õ Á¦ÇÑµÈ ·¹º§ÀÎ Å×ÀÌºí ·¹º§¿¡¼­ ¿À¶óŬ ¼­¹ö°¡ Àá°ÜÁöµµ·Ï INTENT¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

µ¥ÀÌÅÍ µ¿½Ã¼º
Àá±Ý ±â´ÉÀº ³ôÀº ·¹º§ÀÇ µ¥ÀÌÅÍ µ¿½Ã¼ºÀ» Çã¿ëÇϵµ·Ï ¼³°èµÇ¾ú½À´Ï´Ù. µû¶ó¼­, ¸¹Àº »ç¿ëÀÚµéÀº µ¿½Ã¿¡ µ¿ÀÏÇÑ µ¥ÀÌÅÍ¿¡ ¾ÈÀüÇÏ°Ô ¾×¼¼½ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

Æ®·£Àè¼Ç 1 

Æ®·£Àè¼Ç 2

SQL>  update scott.s_emp
  2   set salary=salary*1.1
  3   where id = 24877;
  1 row updated

SQL>  update scott.s_emp
  2   set salary=salary*1.1
  3   where id = 24878;
  1 row updated.

Æ®·£Àè¼Ç 1

Æ®·£Àè¼Ç 2

SQL> UPDATE s_emp
  2  SET salary = salary*1.1;
13120 row updated.      

SQL> select salary
  2  from s_emp
  3  where id = 10;
SALAYR
---------
     1000


µ¥ÀÌÅÍ ÀÏ°ü¼º

¿À¶óŬ ¼­¹ö´Â ¶ÇÇÑ ´Ù¾çÇÑ ·¹º§ÀÇ µ¥ÀÌÅÍ ÀÏ°ü¼ºÀ» Á¦°øÇÕ´Ï´Ù. µû¶ó¼­, »ç¿ëÀÚ´Â ´Ù¸¥ »ç¿ëÀÚ°¡ µ¥ÀÌÅÍÀÇ Á¤ÀûÀÎ »óŸ¦ º¯°æÇÏ°í ÀÖ´õ¶óµµ ±× »óŸ¦ º¼ ¼ö ÀÖ½À´Ï´Ù.

Áö¼Ó¼º
Àá±Ý(lock)Àº COMMIT, ROLLBACK ¶Ç´Â Æ®·£Àè¼Ç Á¾·á ¶§±îÁö À¯ÁöµË´Ï´Ù. Æ®·£Àè¼ÇÀÌ ºñÁ¤»óÀûÀ¸·Î Á¾·áµÇ¾úÀ» °æ¿ì, PMONÀº Àá±Ý(lock)À» ÇØÁ¦ÇÕ´Ï´Ù.

Àá±Ý(lock) ¸ðµå

Æ®·£Àè¼Ç1

Æ®·£Àè¼Ç2

SQL>  update scott.s_emp
  2   set salary=salary*1.1
  3   where id = 24877;
1 row updated.

SQL>  update scott.s_emp
  2   set salary=salary*1.1
  3   where id = 24877;
Transaction 2 waits.

Æ®·£Àè¼Ç 1 

Æ®·£Àè¼Ç 2

SQL>  update scott.s_emp
  2   set salary=salary*1.1
  3   where id = 24877;
1 row updated.

SQL>  update scott.s_emp
  2   set salary=salary*1.1
  3   where id = 24878;
1 row updated.

2°ÇÀÇ Æ®·£Àè¼ÇÀÌ µ¿ÀÏÇÑ Å×À̺íÀÇ ÇàÀ» °»½ÅÇÕ´Ï´Ù.

Àá±Ý(lock) À¯Áö
Æ®·£Àè¼Ç2°¡ Ä¿¹Ô ¶Ç´Â ·Ñ¹éµÉ ¶§±îÁö Àá±Ý(lock)À» À¯ÁöÇÕ´Ï´Ù.
¿¹

Æ®·£Àè¼Ç1

Æ®·£Àè¼Ç2

SQL>  update scott.s_emp
  2   set salary=salary*1.1
  3   where id = 24877;
1 row updated.
SQL> commit;
Commit complete.        

SQL>  update scott.s_emp
  2   set salary=salary*1.1
  3   where id = 24878;
Transaction 2 waits.
1 row updated.

Æ®·£Àè¼Ç 2°¡ ¿äûµÈ Àá±Ý(lock)À» ÀÔ¼öÇ߱⠶§¹®¿¡, Æ®·£Àè¼Ç 1ÀÌ Ä¿¹ÔµÇÀÚ ¸¶ÀÚ, Æ®·£Àè¼Ç 2°¡ ÇàÀ» °»½ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.

DML LockÀÇ ¸ñÀû
DML LockÀº ¿©·¯ »ç¿ëÀÚ¿¡ ÀÇÇØ µ¿½Ã¿¡ ¾×¼¼½ºµÇ°í ÀÖ´Â µ¥ÀÌÅÍÀÇ ¹«°á¼ºÀ» º¸ÀåÇϱâ À§ÇÑ °ÍÀÔ´Ï´Ù. À̵é Àá±Ý(lock)Àº DML ÀÛ¾÷°ú DDL ÀÛ¾÷À» µ¿½Ã¿¡ Ãæµ¹½ÃÅ°´Â Æı«ÀûÀÎ ¹æÇظ¦ ¿¹¹æÇÕ´Ï´Ù.

2°¡Áö ·¹º§

Æ®·£Àè¼Ç1

Æ®·£Àè¼Ç2

SQL> UPDATE s_emp
  2   SET salary=salary*1.1
13120 rows updated.

SQL>  DROP TABLE s_emp;
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified

Æ®·£Àè¼Ç1

Æ®·£Àè¼Ç2

SQL>  update scott.s_emp
  2   set salary=salary*1.1
  3   where id = 24877;
1 row updated.

SQL>  update scott.s_emp
  2   set salary=salary*1.1
  3   where id = 24877;
Transaction 2 waits.

DDL Lock
DDL LockÀº °´Ã¼°¡ Áö¼ÓÀûÀÎ DDL ÀÛ¾÷¿¡ ÀÇÇØ È°µ¿Çϰųª ÂüÁ¶µÇ´Â µ¿¾È ½ºÅ°¸¶ °´Ã¼ÀÇ Á¤ÀǸ¦ º¸È£ÇÕ´Ï´Ù. ¿À¶óŬ ¼­¹ö´Â µ¿ÀÏÇÑ ½ºÅ°¸¶ °´Ã¼¸¦ ¼öÁ¤Çϰųª ÂüÁ¶ÇÒÁöµµ ¸ð¸¦ ´Ù¸¥ DDL ÀÛ¾÷À¸·ÎºÎÅÍ Æı«ÀûÀÎ ¹æÇظ¦ ¸·±â À§ÇÏ¿© DDL LockÀ» ÀÚµ¿À¸·Î ÀÔ¼öÇÕ´Ï´Ù.

DML Æ®·£Àè¼ÇÀº ÃÖÇÏ 2°³ÀÇ Àá±ÝÀ» ÀÔ¼öÇÑ´Ù

DML ¹® (INSERT, UPDATE, DELETE, SELECT¡¦FOR UPDATE)¿¡ ´ëÇØ 2 Á¾·ùÀÇ Àá±Ý(lock) ±¸Á¶°¡ »ç¿ëµË´Ï´Ù:

ÀÎÅ¥ (Enqueue) ¸ÞÄ¿´ÏÁò
¿À¶óŬ ¼­¹ö´Â ¸ðµç Àá±Ý(lock)À» ÀÎÅ¥·Î½á À¯ÁöÇÕ´Ï´Ù. ÀÎÅ¥ ¸ÞÄ¿´ÏÁòÀº ´ÙÀ½À» ÃßÀûÇÒ ¼ö ÀÖ½À´Ï´Ù:

3¸íÀÇ »ç¿ëÀÚ°¡ µ¿½Ã¿¡ µ¿ÀÏÇÑ ÇàÀ» °»½ÅÇÏ°íÀÚ ÇÑ´Ù¸é, ¸ðµç »ç¿ëÀÚ´Â °øÀ¯ Å×À̺í Àá±Ý(lock)À» ¾òÁö¸¸, ÇÑ ¸í¸¸(ù¹ø° »ç¿ëÀÚ) Çà Àá±Ý(lock)À» ¾ò½À´Ï´Ù. Å×À̺í Àá±Ý ¸ÞÄ¿´ÏÁòÀº Çà Àá±Ý(lock)À» Á¡À¯ÇÏ°í ÀÖ´Â »ç¶÷°ú ±× Àá±Ý(lock)À» ±â´Ù¸®´Â »ç¶÷À» ÃßÀûÇÕ´Ï´Ù.

DML_LOCKS¿Í ENQUEUE_RESOURCES ÆĶó¹ÌÅ͸¦ Áõ°¡½ÃÄÑ, ÀνºÅϽº¿¡ ´ëÇØ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â Àá±Ý(lock)ÀÇ ÃÑ ¼ö¸¦ Áõ°¡½Ãų ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº º´·Ä ¼­¹ö ±¸¼º¿¡¼­ ÇÊ¿äÇÒ °ÍÀÔ´Ï´Ù. 

ÀÚµ¿ Å×À̺í Àá±Ý ¸ðµå
DML Æ®·£Àè¼Ç¿¡ ÀÇÇØ Á¡À¯µÇ´Â 2°³ÀÇ TM Å×À̺í Àá±Ý ¸ðµå(RX¿Í RS)¸¦ Á¾Á¾ º¸°Ô µÉ °ÍÀÔ´Ï´Ù.
À̵éÀº DML Æ®·£Àè¼Ç¿¡ ´ëÇØ ¿À¶óŬ ¼­¹ö°¡ ÀÚµ¿À¸·Î ÇÒ´çÇÏ´Â Å×À̺í Àá±Ý ¸ðµåÀÔ´Ï´Ù.
Å×À̺í Àá±Ý ¸ðµåÀÇ Á¦ÇѼº¿¡ µû¶ó, µ¿ÀÏÇÑ Å×ÀÌºí¿¡¼­ ´Ù¸¥ Å×À̺í Àá±Ý(lock)µéÀÌ ÀÔ¼öµÇ¾î Á¡À¯µÉ ¼ö ÀÖ´Â ¸ðµå°¡ °áÁ¤µË´Ï´Ù.

Çà µ¶Á¡ (Row Exclusive, RX)

¿¹ 

Æ®·£Àè¼Ç 1 (Á¡À¯µÈ RX Å×À̺í Àá±Ý)

Æ®·£Àè¼Ç 2 (Á¡À¯µÈ X Å×À̺í Àá±Ý)

SQL>  update s_emp
  2   set salary=salary*1.1
  3   where id = 24877;
1 row updated.

SQL>  update s_emp
  2   set salary=salary*1.1
  3   where id = 24878;
1 row updated.

 
Çà °øÀ¯ (Row Share, RS)

SELECT¡¦FOR UPDATE ¹®À» »ç¿ëÇÏ´Â ÁúÀÇ µ¿¾È ÇàÀ» Àá±×µµ·Ï ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù.

¿¹

Æ®·£Àè¼Ç 1 (Á¡À¯µÈ RS Å×À̺í Àá±Ý)

Æ®·£Àè¼Ç 2 (Á¡À¯µÈ X Å×À̺í Àá±Ý)

SQL>  select id, salary
  2   from s_emp
  3   where id = 24877;
  4   for update;
        ID      SALARY
 -------- ----------
     24877        1100
  SQL> commit;
  Commit complete. 

SQL>  lock table s_emp
    2   in exclusive mode;
Transaction 2 waits.
Table(s) Locked.

¼öµ¿ Å×À̺í Àá±Ý(lock) ¸ðµå
3°³ÀÇ ´Ù¸¥ Å×À̺í Àá±Ý ¸ðµå´Â ¸í½ÃÀû LOCK TABLE ¸í·É¿¡ ÀÇÇØ ¼öµ¿À¸·Î ÇÒ´çµË´Ï´Ù.

   SQL> LOCK TABLE s_emp IN exclusive MODE;
   Table(s) Locked.

Á¾Á¾ Àá±Ý(lock)¿¡¼­ ¸í½ÃÀû Àá±Ý(lock)À» ÇÒ Çο䰡 ÀÖ´Â °æ¿ìµµ ÀÖÁö¸¸, Àá±Ý(lock) °æÇÕÀÌ ÀÖÀ» °æ¿ì¿¡´Â °³¹ßÀÚ¿Í ÇÔ²² °Ë»çÇÏ°íÀÚ ÇÒ °ÍÀÔ´Ï´Ù.
ºñ¿À¶óŬ ¹é±×¶ó¿îµå¸¦ °¡Áø °³¹ßÀÚµéÀº °¡²û ºÒÇÊ¿äÇÏ°Ô ³ôÀº Àá±Ý(lock) ·¹º§À» »ç¿ëÇÕ´Ï´Ù.

°øÀ¯(Share, S)

°øÀ¯ Àá±Ý(lock)À» ¾Ï½ÃÀûÀ¸·Î ¾ò´Â SQL ¹®Àº ÂüÁ¶ ¹«°á¼º Á¦¾àÁ¶°Ç°ú °ü·ÃÀÌ ÀÖ½À´Ï´Ù. ÀÚ½Ä Å×À̺íÀÇ ¿ÜºÎÅ°(foreign key) ¿­¿¡ À妽º°¡ ¾øÀ» °æ¿ì:

ÀÌ·¯ÇÑ ÇൿÀ» ÇÏ´Â ÀÌÀ¯´Â ÀÚ½Ä ÇàÀÌ Á¾¼ÓµÈ Å×ÀÌºí¿¡ ³²¾Æ ÀÖ´Â µ¿¾È ºÎ¸ð ÇàÀÌ »èÁ¦µÇ¾î¼­´Â(¶Ç´Â ±âº» Å°(primary key)¸¦ °»½ÅÇؼ­´Â) ¾ÈµÇ±â ¶§¹®ÀÔ´Ï´Ù. ÀÚ½Ä Å×À̺íÀº ÀÌ ±ÔÄ¢À» À§¹ÝÇÏ´Â °»½Å ¹× »ðÀÔ ÀÛ¾÷À» ¸·±âÀ§ÇØ Àá°ÜÁý´Ï´Ù.
¿¹

Æ®·£Àè¼Ç 1
(s_dept¿¡¼­ Á¡À¯µÈ RX Å×À̺í Àá±Ý,
 s_emp¿¡¼­ Á¡À¯µÈ S Å×À̺í)

 Æ®·£Àè¼Ç 2 (¿äûµÈ RX Å×À̺í Àá±Ý)

SQL> delete from s_dept
  2  where id = 60;
1 row deleted.}
SQL> commit;
Commit complete.

SQL> update s_emp
  2  set salary=salary*1.1
  3  where id = 24877;
Transaction 2 waits.
1 row updated.


ÀÌ·¯ÇÑ ÇൿÀ» ÇÇÇϱâ À§Çؼ­´Â, ÂüÁ¶ÇÏ´Â(ÀÚ½Ä) Å×À̺íÀÇ ¿ÜºÎÅ° ¿­¿¡ À妽º¸¦ ¼³Á¤ÇϽʽÿÀ.
ÀÚ½Ä Å×À̺íÀÇ ¿ÜºÎ Å°¿¡ À妽º¸¦ ¼³Á¤Çϸé, ¿À¶óŬ ¼­¹ö´Â À妽ºÀÇ º¯°æµÈ °ªÀ» Àá±ÝÀ¸·Î½á ÀÚ½Ä Çà¿¡ º¯°æÀÌ ÇàÇØÁö´Â °ÍÀ» ¸·À» ¼ö ÀÖ½À´Ï´Ù.
 

Æ®·£Àè¼Ç 1 (Á¡À¯µÈ RX Å×À̺í Àá±Ý)

Æ®·£Àè¼Ç 2 (Á¡À¯µÈRX Å×À̺í Àá±Ý

SQL> delete from s_dept
  2  where id = 60;
1 row deleted.
SQL> create index I on s_emp
  2  (dept_id);
Index created

SQL> update s_emp
  2  set salary=salary*1.1
  3  where id = 24877;
1 row updated.

°øÀ¯ Çà µ¶Á¡(Share Row Exclusive, SRX)

¾Ï½ÃÀûÀ¸·Î °øÀ¯ Çà µ¶Á¡ Àá±Ý(lock)À» ¾òÀº SQL ¹®Àº ´Ù½Ã ÂüÁ¶ ¹«°á¼º°ú ¿¬°üµË´Ï´Ù. ´ÙÀ½ »óȲ¿¡¼­, ºÎ¸ð Å×À̺í·ÎºÎÅÍ »èÁ¦ÇÒ ¶§, ÀÚ½Ä Å×ÀÌºí¿¡ °øÀ¯ Çà µ¶Á¡ Àá±Ý(lock)ÀÌ ÇÊ¿äÇÕ´Ï´Ù:

¿¹

Æ®·£Àè¼Ç 1
(s_dept¿¡¼­ Á¡À¯µÈ RX Å×À̺í Àá±Ý,
 s_emp¿¡¼­ Á¡À¯µÈ SRX Å×À̺í)

 Æ®·£Àè¼Ç 2 (¿äûµÈ RX Å×À̺í Àá±Ý)

SQL> delete from s_dept
  2  where id = 60;
1 row deleted.

SQL> commit;
Commit complete.

SQL> update s_emp
  2  set salary=salary*1.1
  3  where id = 24877;
Transaction 2 waits.

1 row updated.

´Ù½Ã, ÇØ°áÃ¥Àº ÀÚ½Ä Å×À̺íÀÇ ¿ÜºÎ Å° ¿­¿¡ À妽º¸¦ ¼³Á¤ÇÏ´Â °ÍÀÔ´Ï´Ù.

µ¶Á¡(Exclusive, X)
ÀÌ°ÍÀº ÃÖ°í ·¹º§ÀÇ Å×À̺í Àá±Ý(lock)À̱⠶§¹®¿¡, °¡Àå Á¦ÇÑÀûÀÎ ¸ðµå·Î¼­, Ư¼ºÀº ´ÙÀ½°ú °°½À´Ï´Ù:

¿¹ 

Æ®·£Àè¼Ç 1 (Á¡À¯µÈ X Å×À̺í Àá±Ý) 

Æ®·£Àè¼Ç 2 (¿äûµÈ RS Å×À̺í Àá±Ý)

SQL> lock table s_dept in
Exclusive mode;
Table(s) Locked.

SQL> select * from s_dept
  2  for update;
Transaction 2 waits.

±â¼úÀû ÁÖÀÇ»çÇ×
ÀÌ Àá±Ý Á¤º¸´Â Æ®·£Àè¼ÇÀÌ Ä¿¹ÔµÉ ¶§ »èÁ¦µÇÁö ¾ÊÁö¸¸, ´ÙÀ½ ÁúÀÇ°¡ ºí·ÏÀ» ÀÐÀ» ¶§ »èÁ¦µË´Ï´Ù. ÀÌ°ÍÀº 'ºí·Ï »èÁ¦ ¿¬±â(delayed block cleanout)'·Î ¾Ë·ÁÁ® ÀÖ½À´Ï´Ù.

»èÁ¦ ÀÛ¾÷À» ¼öÇàÇÏ´Â ÁúÀÇ´Â ·Ñ¹é ¼¼±×¸ÕÆ® Çì´õ¿¡ ÀÖ´Â Æ®·£Àè¼Ç Å×À̺íÀÇ ½Ã½ºÅÛ º¯°æ ¹øÈ£(System Change Number, SCN)¿Í Æ®·£Àè¼ÇÀÇ »óŸ¦ °Ë»çÇØ¾ß ÇÕ´Ï´Ù.

¿À¶óŬ ¼­¹ö´Â ºí·Ï Çì´õ¿¡ ÀÖ´Â °¢ È°µ¿ Æ®·£Àè¼Ç¿¡ ´ëÇÑ ½Äº°ÀÚ¸¦ ºí·Ï ³»¿¡ º¸°üÇÕ´Ï´Ù. Çà ·¹º§¿¡¼­, Àá±Ý(lock) ¹ÙÀÌÆ®´Â Æ®·£Àè¼ÇÀ» Æ÷ÇÔÇÏ´Â ½½·Ô¿¡ ´ëÇÑ ½Äº°ÀÚ¸¦ ÀúÀåÇÕ´Ï´Ù.

¿¹
À§ÀÇ ±×¸²¿¡¼­, ½½·Ô 1À» »ç¿ëÇÏ´Â Æ®·£Àè¼ÇÀº 6ÇàÀ» Àá±×°í ÀÖ°í, ½½·Ô2ÀÇ Æ®·£Àè¼ÇÀº 1ÇàÀ» Àá±×°í ÀÖ½À´Ï´Ù. 

3Á¾·ù
À̵é Àá±Ý(lock)Àº NOWAIT ¸ðµå¿¡¼­ ¸Å¿ì Àá±ñ Á¡À¯µÇ°í ¿äûµÇ±â ¶§¹®¿¡, À̵鿡 ´ëÇÑ °æÇÕÀ» °ÅÀÇ º¸Áö ¸øÇÒ °ÍÀÔ´Ï´Ù.

µ¶Á¡ DDL Lock
CREATE, ALTER, DROP°ú °°Àº ÀϺΠDDL ¹®Àº ÀÛ¾÷ ÁßÀÎ °´Ã¼¿¡ ´ëÇÑ µ¶Á¡ Àá±Ý(lock)À» ¾ò½À´Ï´Ù.
»ç¿ëÀÚ´Â ´Ù¸¥ »ç¿ëÀÚ°¡ ¾î¶°ÇÑ ·¹º§ÀÇ Àá±Ý(lock)ÀÌ¶óµµ Á¡À¯ÇÏ°í ÀÖÀ¸¸é Å×ÀÌºí¿¡¼­ µ¶Á¡ Àá±Ý(lock)À» ¾òÀ» ¼ö ¾ø½À´Ï´Ù. µû¶ó¼­, Å×ÀÌºí¿¡ Ä¿¹ÔµÇÁö ¾ÊÀº Æ®·£Àè¼ÇÀ» °®°í ÀÖ´Â »ç¿ëÀÚ°¡ ÀÖ´Ù¸é, ALTER TABLE ¹®Àº ½ÇÆÐÇÕ´Ï´Ù.
¿¹
 

Æ®·£Á§¼Ç1

Æ®·£Á§¼Ç2

SQL> UPDATE s_emp
  2  SET salary=salary*1.1;
3120 row updated.

SQL> ALTER TABLE s_emp
  2  DISABLE primary key;
  3  where id = 24877;
ORA-00054: resource busy and acquire with NOWAIT specified


°øÀ¯ DDL Lock

ÀϺΠ¹®Àå(GRANT, CREATE PACKAGE¿Í °°Àº)Àº ÀÚ½ÅÀÌ ÂüÁ¶ÇÏ´Â °´Ã¼¿¡ °øÀ¯ DDL Àá±Ý(Lock)ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
ÀÌ°ÍÀº À¯»çÇÑ DDL ¹®À̳ª ¾î¶°ÇÑ DML ¹®µµ ¸·Áö ¸øÇÒ °ÍÀÔ´Ï´Ù. ±×·¯³ª ´Ù¸¥ »ç¿ëÀÚ°¡ ÂüÁ¶µÇ´Â °´Ã¼¸¦ º¯°æÇϰųª »èÁ¦ÇÏÁö ¸øÇϵµ·Ï ¸·À» °ÍÀÔ´Ï´Ù.

Breakable parse lock
¶óÀ̺귯¸® ij½Ã¿¡ ÀÖ´Â ¹®ÀåÀ̳ª PL/SQL °´Ã¼´Â ¹®ÀåÀÌ °øÀ¯ Ç®¿¡¼­ ¿À·¡µÇ¾î »èÁ¦µÉ ¶§±îÁö ÂüÁ¶ÇÏ´Â ¸ðµç °´Ã¼¿¡ ´ëÇØ À̵é Àá±Ý(lock) ÁßÀÇ Çϳª¸¦ Á¡À¯ÇÕ´Ï´Ù.
Breakable parse lockÀº °´Ã¼°¡ º¯°æµÉ °æ¿ì, ¹®ÀåÀÌ ¹«È¿À̾î¾ß ÇÏ´ÂÁö ¿©ºÎ¸¦ °Ë»çÇÕ´Ï´Ù.
ÀÌ Àá±Ý(lock)À» Æ÷ÀÎÅͷμ­ »ý°¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Àá±Ý(lock)Àº ´ë±â³ª °æÇÕÀ» °áÄÚ À¯¹ß½ÃÅ°Áö ¾Ê½À´Ï´Ù.

°³¹ß ¹× »ç¿ëÀÚ À̽´
¿À¶óŬ ¼­¹ö Àá±Ý(lock) ±â´ÉÀº ºñ¿ëÀÌ µéÁö ¾Ê°í È¿À²ÀûÀÔ´Ï´Ù. ´ëºÎºÐÀÇ »çÀÌÆ®´Â Àá±Ý(lock) ±â´É°ú °ü·ÃµÈ ¹®Á¦¸¦ °®°í ÀÖÁö ¾Ê½À´Ï´Ù. Àá±Ý(lock)À¸·Î ÀÎÇØ °æÇÕÀÌ ¹ß»ýÇÒ °æ¿ì, ±× ÀÌÀ¯´Â Á¾Á¾ ´ÙÀ½°ú °°½À´Ï´Ù:

V$LOCK ºä

 Àá±Ý À¯Çü      

 ID 1

 TX

 ·Ñ¹é ¼¼±×¸ÕÆ® ¹øÈ£ ¹× ½½·Ô ¹øÈ£

 TM

 ¼öÁ¤µÇ°í ÀÖ´Â Å×À̺íÀÇ ID


¿¹
V$LOCK ºäÀÇ Æ¯Á¤ ÀÚ¿ø ID 1¿¡ ÇØ´çµÇ´Â Å×À̺í¸íÀ» ã±â À§Çؼ­´Â, ´ÙÀ½À» ¼öÇàÇϽʽÿÀ:

 SQL> SELECT owner, object_id, object_name, object_type,
   2        v$lock.type
   3  FROM dba_objects, v$lock
   4  WHERE object_id = v$lock.id1 and object_name = table_name;

´Ù¸¥ ÇÁ·Î¼¼½º¸¦ ¹æÇØÇÏ´Â ¾î¶°ÇÑ ÇÁ·Î¼¼½ºµµ »ç¿ëÀÚ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ ÀÔ¼öµÈ Àá±Ý(lock)À» Á¡À¯ÇÒ °ÍÀÔ´Ï´Ù. »ç¿ëÀÚ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ ÀÔ¼öµÈ Àá±Ý(lock)Àº ´ÙÀ½°ú °°½À´Ï´Ù:

¿©±â¿¡¼­ ¾ð±ÞµÇÁö ¾Ê´Â ´Ù¸¥ Àá±Ý(lock)µéÀº Àá±ñ µ¿¾È¸¸ Á¡À¯µÇ´Â ½Ã½ºÅÛ Àá±Ý(lock)µéÀÔ´Ï´Ù.

V$LOCKED_OBJECT ºä

Àá±Ý À¯Çü      

 ID 1

XIDUSN

·Ñ¹é ¼¼±×¸ÕÆ® ¹øÈ£

OBJECT_ID

¼öÁ¤µÇ°í ÀÖ´Â °´Ã¼ÀÇ ID

SESSION_ID

°´Ã¼¸¦ Àá±×´Â ¼¼¼Ç ID

ORACLE_USERNAME 

 

LOCKED_MODE

 


¿¹

V$LOCKED_OBJECT ºäÀÇ Æ¯Á¤ OBJECT_ID¿¡ ÇØ´çµÇ´Â Å×À̺í¸íÀ» ã±â À§Çؼ­´Â, ´ÙÀ½À» ¼öÇàÇϽʽÿÀ:

 SQL> select xidusn, object_id, session_id, locked_mode
   2  from v$locked_object;
    XIDUSN  OBJECT_ID  SESSION_ID  LOCKED_MODE
 ---------  ---------  ----------  -----------
         3       2711           9            3
         0       2711           7            3

 SQL> select object_name
   2  from dba_objects
   3  where object_id = 2711;
 OBJECT_NAME
 -----------
 S_EMP

XIDUSNÀÇ °ªÀÌ 0À̶ó¸é, ÇØ´ç SESSION_ID´Â XIDUSNÀÌ 0ÀÌ¿ÜÀÇ ´Ù¸¥ °ªÀ» °®°í ÀÖ´Â SESSION_ID¿¡ ÀÇÇØ Á¡À¯µÇ°í ÀÖ´Â Àá±Ý(lock)À» ¿äûÇÏ¿© ±â´Ù¸®°í ÀÖ´Â ÁßÀÔ´Ï´Ù.

¸ðµç Àá±Ý(lock) Ãâ·Â ¿É¼Ç
'¸ðµç Àá±Ý(lock)' Ãâ·Â ¿É¼Ç¿¡¼­, ¹é±×¶ó¿îµå¿Í »ç¿ëÀÚ Æ®·£Àè¼Ç¿¡ ÀÇÇØ Á¡À¯µÇ°Å³ª ¿äûµÈ ¸ðµç Àá±ÝÀº ±× Áß ÀϺΰ¡ ´Ù¸¥ Æ®·£Àè¼Ç¿¡ ÀÇÇØ ¿äûµÇÁö ¾Ê¾Ò´õ¶óµµ Ãâ·ÂµË´Ï´Ù.

¸ñ·ÏÀÇ ¿­Àº ´ÙÀ½°ú °°½À´Ï´Ù:

ÁÖÀÇ: µ¿ÀÏÇÑ Á¤º¸°¡ OEM ¼º´É °ü¸® ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ Ãâ·ÂµÉ ¼ö ÀÖ½À´Ï´Ù.

  1. Oracle Performance Manager ½ÇÇà
  2. Ãâ·Â -> °æÇÕ -> Àá±Ý

¹æÇØ/´ë±â Àá±Ý(lock) Ãâ·Â ¿É¼Ç
ÀÌ Ãâ·Â ¿É¼ÇÀº ´Ù¸¥ Æ®·£Àè¼Ç¿¡ ÀÇÇØ ¿ä±¸µÈ Àá±Ý(lock)À» Á¡À¯ÇÏ°í ÀÖ´Â Æ®·£Àè¼Ç¸¸À» ³ªÅ¸³À´Ï´Ù 

¼¼¼Ç Á¾·á
»ç¿ëÀÚ°¡ ´Ù¸¥ »ç¿ëÀÚ°¡ ¿ä±¸ÇÏ´Â Àá±Ý(lock)À» Á¡À¯ÇÏ°í ÀÖ´Ù¸é, DBA´Â ´ÙÀ½À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù:

À§¿¡¼­ ¼³¸íÇÑ °¨½Ã ¹æ¹ýÀ» ÅëÇØ »ç¿ëÀÚ¿¡ ´ëÇÑ ¼¼¼Ç ½Äº°ÀÚ¸¦ ¾òÀ» °ÍÀÔ´Ï´Ù.

´ÙÀ½À» ¸í·ÉÀ» »ç¿ëÇÏ¿© »ç¿ëÀÚ ¼¼¼ÇÀ» Á¾·á½Ãų ¼ö ÀÖ½À´Ï´Ù:

°æÇÕÀ» À¯¹ß½ÃÅ°´Â Çà
¾î´À ÇàÀÌ °æÇÕÀ» À¯¹ß½ÃÅ°´ÂÁö ¾Ë ÇÊ¿ä°¡ ÀÖÀ» °æ¿ì¿¡´Â, ´ÙÀ½ÀÇ ¿­ÀÌ Æ÷ÇԵǾî ÀÖ´Â V$SESSIONÀ» ÂüÁ¶ÇÕ´Ï´Ù:


±³Âø»óÅÂ(Deadlock)

±³Âø»óÅ´ 2¸í ÀÌ»óÀÇ »ç¿ëÀÚ°¡ °¢°¢ ¼­·Î°¡ Àá±Ù µ¥ÀÌÅ͸¦ ±â´Ù¸®°í ÀÖÀ» ¶§ ¹ß»ýÇÕ´Ï´Ù.
¿À¶óŬ ¼­¹ö´Â ±³Âø»óŸ¦ ŽÁöÇÑ ¹®ÀåÀ» ·Ñ¹éÇÏ¿© ±³Âø»óŸ¦ ÀÚµ¿À¸·Î ŽÁöÇÏ°í ÇØ°áÇÕ´Ï´Ù.
 

Æ®·£Àè¼Ç 1

½Ã°£

Æ®·£Àè¼Ç 2

SQL> update scott.s_emp
  2  set salary=salary*1.1
  3  where id = 24877;
  1 row updated.      

1

SQL> update scott.s_emp
  2  set salary=salary*1.1
  3  where id = 24876;
  1 row updated.

SQL> update scott.s_emp
  2  set salary=salary*1.1
  3  where id = 24876;
Transaction 1 waits.

2

SQL> update scott.s_emp
  2  set salary=salary*1.1
  3  where id = 24877;
  Transaction 2 waits.

ORA_00060: deadlock
detected while
waiting for resource

3

 

Æ®·£Àè¼Ç 1¿¡¼­ µÎ¹ø° °»½Å ¹®ÀÌ ±³Âø»óÅÂ(deadlock)¸¦ ŽÁöÇß´Ù°í °¡Á¤Çϸé, ¿À¶óŬ ¼­¹ö´Â ±× ¹®ÀåÀ» ·Ñ¹éÇÏ°í ¸Þ½ÃÁö¸¦ ¹ÝȯÇÕ´Ï´Ù. ±³Âø»óÅÂ(deadlock)¸¦ ¹ß»ý½ÃŲ ¹®ÀåÀº ·Ñ¹éµÇÁö¸¸, Æ®·£Àè¼ÇÀº ·Ñ¹éµÇÁö ¾Ê½À´Ï´Ù. À̶§, »ç¿ëÀÚ¿¡°Ô´Â ORA-00060 ¿À·ù ¸Þ½ÃÁö°¡ Àü´ÞµÇ¾î¾ß ÇÕ´Ï´Ù. ´ÙÀ½ Á¶Ä¡´Â Æ®·£Àè¼ÇÀÇ ³ª¸ÓÁö ºÎºÐÀ» ·Ñ¹éÇÏ´Â °ÍÀÔ´Ï´Ù.

±â¼úÀû ÁÖÀÇ»çÇ×
±³Âø»óÅÂ(deadlock)´Â ´ëºÎºÐ Æ®·£Àè¼ÇÀÌ ¸í½ÃÀûÀ¸·Î ¿À¶óŬ ¼­¹öÀÇ µðÆúÆ® Àá±ÝÀ» ¹«È¿·Î ÇÒ ¶§ ¹ß»ýÇÕ´Ï´Ù. ÀÏ´Ü Å½ÁöµÇ¸é, ºÐ»êµÈ ±³Âø»óÅ´ ºÐ»êµÇÁö ¾ÊÀº ±³Âø»óÅÂ¿Í µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î 󸮵˴ϴÙ.


ÃßÀû ÆÄÀÏ
±³Âø»óÅÂ(deadlock) »óȲÀº USER_DUMP_DEST µñ¼Å³Ê¸® ³»ÀÇ ÃßÀû ÆÄÀÏ¿¡ ±â·ÏµÉ °ÍÀÔ´Ï´Ù. ¾ÖÇø®ÄÉÀ̼ǿ¡ ¹®Á¦°¡ ÀÖ´ÂÁö °áÁ¤Çϱâ À§Çؼ­´Â ±³Âø»óÅ ¿À·ù¿¡ ´ëÇÑ ÃßÀû ÆÄÀÏÀ» °¨½ÃÇÏ´Â °ÍÀÌ ±ÇÀåµË´Ï´Ù. ÃßÀû ÆÄÀÏ¿¡´Â Àá±×´Â ÇàÀÇ Çà ID°¡ Æ÷Ç﵃ °ÍÀÔ´Ï´Ù.

  

¹®¸Æ

ÂüÁ¶

ÃʱâÈ­ ÆĶó¹ÌÅÍ

DML_LOCKS
ENQUEUE_RESOURCES
USER_DUMP_DEST

µ¿Àû ¼º´É ºä

LOCK
V$LOCKED_OBJECT
V$SESSION

µ¥ÀÌÅÍ µñ¼Å³Ê¸® ºä

None

¸í·É¾î

LOCK TABLE IN lock MODE;
ALTER TABLE table_name DISABLE TABLE LOCK;
ALTER SYSTEM KILL SESSION ¡¯sid,serial#

ÆÐÅ°ÁöµÈ ÇÁ·Î½ÃÀú ¹× ÇÔ¼ö

None

½ºÅ©¸³Æ®

None

Áø´ÜÆÑ ¾îÇø®ÄÉÀ̼Ç

Lock Manager
Performance Manager

  
 Lock Matrix

¿äûÀÇ À¯Çü

Àá±Ý
¸ðµå

Àá±Ý ´ë»ó

Ãæµ¹/ÁÖÀÇ

¼±ÅÃ(select)            

None

None

Àб⿡ ´ëÇÑ Àá±Ý(lock) ¾øÀ½.

Çà °øÀ¯ ¸ðµå¿¡¼­ÀÇ Å×À̺í Àá±Ý(lock)

¸ðµå2

Å×À̺í»óÀÇTM(RS) Àá±Ý(lock)

¸ðµå6. µ¶Á¡ DDL Àá±Ý(lock) ¾øÀ½. °¡Àå Á¦ÇÑÀÌ ÀûÀº Àá±Ý(lock).

Çà °øÀ¯ ¸ðµå¿¡¼­ÀÇ Å×À̺í ÆÄƼ¼Ç Àá±Ý(lock)

¸ðµå2


¸ðµå2 

Å×À̺í»óÀÇ TM(RS) Àá±Ý(lock)
Å×À̺í ÆÄƼ¼Ç »óÀÇ TM(RS) Àá±Ý(lock). 

¸ðµå6. µ¶Á¡ DDL ¾øÀ½. °¡Àå Á¦ÇÑÀÌ ÀûÀº Àá±Ý(lock).

°»½ÅÀ» À§ÇÑ ¼±ÅÃ(select for update)

¸ðµå2

¸ðµå2


¸ðµå6 

Å×À̺í»óÀÇ TM(RS) Àá±Ý(lock)

°¢ Å×À̺í ÆÄƼ¼Ç»óÀÇ TM(RS)Àá±Ý(lock)

RBS TX ½½·Ô»óÀÇ TX Àá±Ý(lock)

¸ðµå6. µ¿ÀÏÇÑ Çà¿¡¼­ÀÇ °»½Å ¼±Åà ¶Ç´ÂDML

µ¶Á¡ DDLÀÌ ¾øÀ½.

Çà µ¶Á¡ ¸ðµå¿¡¼­ÀÇ Å×À̺í Àá±Ý(lock)

¸ðµå 3

Å×À̺í»óÀÇ TM(RX)Àá±Ý(lock)

¸ðµå 4,5,6 ¸ðµå3ÀÌ ¸ðµå3°ú Ãæµ¹Çϱ⠾ÊÀ» ¶§ °»½Å Çã¿ë
°øÀ¯ Àá±Ý(lock)°ú ÂüÁ¶¹«°á¼º Àá±Ý(lock)ÀÌ ¾øÀ½.

Çà µ¶Á¡ ¸ðµå¿¡¼­ÀÇ Å×À̺í ÆÄƼ¼Ç Àá±Ý(lock)

¸ðµå3


¸ðµå3

 

Å×À̺í»óÀÇ TM(RX)
Àá±Ý(lock)

Å×À̺í ÆÄƼ¼Ç»óÀÇ
TM(RX) Àá±Ý(lock)

 

µ¿ÀÏÇÑ ÆÄƼ¼Ç»óÀÇ ¸ðµå 4,5,6.

¸ðµå3ÀÌ ¸ðµå3°ú Ãæµ¹ÇÏÁö ¾ÊÀ» ¶§ °»½Å Çã¿ë.

°øÀ¯ Àá±Ý(lock)°ú ÂüÁ¶ ¹«°á¼º Àá±Ý(lock)ÀÌ ¾øÀ½.

DML(up/ins/del)

 

¸ðµå3


¸ðµå6

 

Å×À̺í»óÀÇ TM(RX)
Àá±Ý(lock)

RBS TX ½½·Ô»óÀÇ
TX Àá±Ý(lock)

¸ðµå 4,5,6.
µ¿ÀÏÇÑ Çà¿¡¼­ °»½Å¼±ÅÃ(select for update) ¶Ç´Â DML

°øÀ¯ Àá±Ý(lock)°ú ÂüÁ¶ ¹«°á¼º Àá±Ý(lock)ÀÌ ¾øÀ½.

ºÐÇÒµÈ Å×À̺í»óÀÇ DML(up/ins/del)

¸ðµå3


¸ðµå3


¸ðµå6

Å×À̺í»óÀÇ TM(RX)
Àá±Ý(lock)

°»½ÅµÈ ÇàÀ» ¼ÒÀ¯ÇÏ´Â °¢ Å×À̺í ÆÄƼ¼Ç»óÀÇ TM(RX) Àá±Ý
(lock)

RBS TX ½½·Ô»óÀÇ
TX Àá±Ý(lock)

¸ðµå 4,5,6.

µ¿ÀÏÇÑ Çà¿¡¼­ °»½Å¼±Åà (select for update) ¶Ç´Â DML


°øÀ¯ Àá±Ý(lock)°ú ÂüÁ¶ ¹«°á¼º Àá±Ý(lock)ÀÌ ¾øÀ½.

°øÀ¯ ¸ðµå¿¡¼­ÀÇ Å×À̺í Àá±Ý(lock)

¸ðµå4

 

Å×À̺í»óÀÇ TM(S)
Àá±Ý(lock)

 

¸ðµå 3, 5,6.

°»½Å¼±ÅÃ(select for update) ¹× ´Ù¸¥ °øÀ¯ Àá±Ý(lock)  Çã¿ë.

Àá°ÜÁø Å×À̺í»ó¿¡¼­
ORA1555 °¡´É¼º ¾øÀ½.

°øÀ¯ ¸ðµå¿¡¼­ÀÇ Å×À̺í ÆÄƼ¼Ç Àá±Ý(lock)

¸ðµå2

¸ðµå4

Å×À̺í»óÀÇ TM(RS)
Àá±Ý(lock)

Å×À̺í ÆÄƼ¼Ç»óÀÇ
TM(RS) Àá±Ý(lock)

 

µ¿ÀÏÇÑ ÆÄƼ¼Ç¿¡¼­ ¸ðµå 3, 5, 6.

°»½Å¼±ÅÃ(select for update) ¹× ´Ù¸¥ °øÀ¯ Àá±Ý(lock) Çã¿ë.

Àá°ÜÁø Å×À̺í»ó¿¡¼­  
ORA_1555 °¡´É¼º ¾øÀ½.

ÀÚ½Ä Å×ÀÌºí¿¡ ÂüÁ¶ ¹«°á¼º Á¦¾àÁ¶°ÇÀº °®°í ÀÖ°í, ÀÚ½Ä Å×À̺íÀÇ FK ¿­¿¡ À妽º´Â ¾øÀ¸¸ç, FK Á¦¾àÁ¶°Ç¿¡ ON DELETE DASCADE°¡ ¾ø´Â ºÎ¸ð Å×À̺í·ÎºÎÅÍ »èÁ¦/ºÎ¸ðÅ×ÀÌºí¿¡ °»½Å.

¸ðµå4

¸ðµå3

¸ðµå6

ºÎ¸ð Å×ÀÌºí »óÀÇ
TM(RX) Àá±Ý(lock)

RBS TX ½½·Ô»óÀÇ
TX Àá±Ý(lock)

 

ÀÚ½Ä Å×ÀÌºí¿¡¼­ÀÇ ¸ðµå 3,5,6

ÀÚ½Ä Å×ÀÌºí¿¡¼­ °»½Å¼±ÅÃ(select for update)°ú °øÀ¯ Àá±Ý(lock) Çã¿ë.

ºÎ¸ð Å×ÀÌºí¿¡¼­ÀÇ ¸ðµå4,5,6

ºÎ¸ð¿¡ ´ëÇÑ µ¿ÀÏÇÑ Çà¿¡¼­ÀÇ °»½Å¼±ÅÃ(select for update) ¶Ç´Â DML

ÀÚ½Ä Å×À̺íÀÇ FK ¿­¿¡ À妽º¸¦ °®°í ÀÖ´Â ÀڽĿ¡ ´ëÇØ ÂüÁ¶ ¹«°á¼º Á¦¾àÁ¶°ÇÀ» °®°í ÀÖ°í, FK Á¦¾àÁ¶°Ç¿¡ ON DELETE DASCADE°¡ ¾ø´Â ºÎ¸ð Å×À̺í·Î

¸ðµå3

¸ðµå6

ºÎ¸ð Å×À̺í»óÀÇ  
TM(RX) Àá±Ý(lock)

RBS TX ½½·Ô»óÀÇ
TX Àá±Ý(lock)

 

¸ðµå4,5,6. ºÎ¸ð¿¡ ´ëÇÑ µ¿ÀÏÇÑ Çà¿¡¼­ÀÇ °»½Å¼±ÅÃ(select for update) ¶Ç´Â DML

ºÎ¸ð¿¡ ´ëÇÑ DML¿¡ ÀÇÇØ ÂüÁ¶µÇ´Â ÀÚ½ÄÀÇ Çà¿¡ ´ëÇÑ °»½Å

°øÀ¯ Çà µ¶Á¡ ¸ðµå¿¡¼­ÀÇ Å×À̺í Àá±Ý(lock)

¸ðµå5

Å×À̺í»óÀÇ TM(SRX) Àá±Ý(lock)

¸ðµå 3,4,5,6

°»½Å¼±ÅÃ(select for update)¸¸ Çã¿ë

°øÀ¯ Àá±Ý(lock) ¾øÀ½

ORA1555¾øÀ½

Á¾¼Ó»èÁ¦(Cascaded deletes)  ¾øÀ½

°øÀ¯ Çà µ¶Á¡ ¸ðµå¿¡¼­ÀÇ Å×À̺í ÆÄƼ¼Ç Àá±Ý(lock)

¸ðµå5

¸ðµå5

Å×À̺í»óÀÇ TM(SRX) Àá±Ý(lock)

Å×À̺í ÆÄƼ¼Ç»óÀÇ
TM(SRX) Àá±Ý(lock)

 

µ¿ÀÏÇÑ ÆÄƼ¼Ç»óÀÇ ¸ðµå4.

¸ðµç ÆÄƼ¼Ç»óÀÇ ¸ðµå
3,5,6.

°»½Å¼±ÅÃ(select for update)¸¸ Çã¿ë.

ORA 1555 ¾øÀ½

Á¾¼Ó»èÁ¦(Cascaded deletes) ¾øÀ½

ÀÚ½Ä Å×ÀÌºí¿¡ ÂüÁ¶ ¹«°á¼º Á¦¾àÁ¶°ÇÀ» °®°í ÀÖ°í, ÀÚ½Ä Å×À̺íÀÇ FK ¿­¿¡ À妽º°¡ ¾øÀ¸¸ç, FK Á¦¾àÁ¶°Ç¿¡ ON DELETE DASCADE°¡ ÀÖ´Â ºÎ¸ð Å×À̺í·ÎºÎÅÍ »èÁ¦/ºÎ¸ð Å×ÀÌºí¿¡ °»½Å.

¸ðµå5

¸ðµå3

¸ðµå6

ÀÚ½Ä Å×À̺í»óÀÇ
TM(SRX) Àá±Ý(lock)

ºÎ¸ð Å×À̺í»óÀÇ
TM(RX) Àá±Ý(lock)

RBS TX ½½·Ô¿¡¼­
TX Àá±Ý(lock)

 

ÀڽĿ¡¼­ÀÇ ¸ðµå3,4,5,6
Àº °»½Å¼±ÅÃ(select for
update)¸¸ Çã¿ë.

ÂüÁ¶ ¹«°á¼ºÀ¸·Î ÀÎÇÑ
°øÀ¯ Àá±Ý ¾øÀ½.

ORA 1555 ¾øÀ½

ÀÚ½ÄÀÌ ÂüÁ¶ÇÏ´Â ´Ù¸¥
ºÎ¸ð Å×ÀÌºí¿¡¼­ Á¾¼Ó
»èÁ¦ ¾øÀ½

¸ðµå 4,5,6

ºÎ¸ðÀÇ µ¿ÀÏÇÑ Çà¿¡¼­
DML ¶Ç´Â °»½Å¼±ÅÃ
(select for update)

ÀÚ½Ä Å×ÀÌºí¿¡ ÂüÁ¶ ¹«°á¼º Á¦¾àÁ¶°ÇÀ» °®°í ÀÖ°í, ÀÚ½Ä Å×À̺íÀÇ FK ¿­¿¡ À妽º°¡ ÀÖÀ¸¸ç, FK Á¦¾àÁ¶°Ç¿¡ ON DELETE DASCADE°¡ ÀÖ´Â ºÎ¸ð Å×À̺í·ÎºÎÅÍ »èÁ¦/ºÎ¸ð Å×ÀÌºí¿¡ °»½Å

¸ðµå3

¸ðµå3

¸ðµå6

ÀÚ½Ä Å×À̺í»óÀÇ
TM(RX) Àá±Ý(lock)

ºÎ¸ð Å×À̺í»óÀÇ
TM(RX) Àá±Ý(lock)

RBS TX ½½·Ô»óÀÇ
TX Àá±Ý(lock)

 

¸ðµå4,5,6. ºÎ¸ð¿¡ ´ëÇØ µ¿ÀÏÇÑ Çà¿¡¼­ DML ¶Ç´Â °»½Å¼±ÅÃ(select for
update)

¸ðµå4,5,6.  ÇöÀç Á¾¼Ó
»èÁ¦(Cascaded deletes) ´ë»óÀÎ ÀÚ½ÄÀÇ µ¿ÀÏÇÑ Çà
¿¡¼­ ¸ðµç °»½Å¼±ÅÃ
(select for update) ¶Ç´Â DML ¶Ç´Â ´Ù¸¥ Á¾¼Ó »èÁ¦

µ¶Á¡ ¸ðµå¿¡¼­ÀÇ
Å×À̺í Àá±Ý(lock)

 

¸ðµå6

Å×À̺í»óÀÇ TM(X) Àá±Ý(lock)

¸ðµå 2,3,4,5,6.
¼±Åø¸ Çã¿ë. DDL ¾øÀ½.

°¡Àå Á¦ÇÑÀûÀÎ Àá±Ý ¸ðµå.

µ¶Á¡ ¸ðµå¿¡¼­ÀÇ
Å×À̺í ÆÄƼ¼Ç Àá±Ý(lock)

 

¸ðµå3


¸ðµå6

 

Å×À̺í»óÀÇTM(RX) Àá±Ý(lock)

Å×À̺í ÆÄƼ¼Ç»óÀÇ TM(X) Àá±Ý(lock)

 

µ¿ÀÏÇÑ ÆÄƼ¼Ç¿¡¼­ÀÇ ¸ðµå 2,3,4,5,6.

¸ðµç ÆÄƼ¼Ç¿¡¼­ÀÇ ¸ðµå5.

µ¶Á¡ DDL ¾øÀ½.

ÆÄƼ¼Ç¿¡¼­ °¡Àå Á¦ÇÑÀûÀÎ Àá±Ý ¸ðµå

»èÁ¦, Àý´Ü, Å×ÀÌºí »ý¼º, À妽º »ý¼º DDL

¸ðµå4

Nowait

 

Å×À̺í»óÀÇ TM(X) Àá±Ý(lock)

¸ðµå 2,3,4,5,6.
¼±Åø¸ Çã¿ë. DDL ¾øÀ½.
´ë±â°¡ ¾ø±â ¶§¹®¿¡ Å×ÀÌºí¿¡ ´Ù¸¥ Àá±Ý(lock) ¸ðµå°¡ ÀÖÀ» °æ¿ì, DDL ½ÇÆÐ.

»èÁ¦, Àý´Ü, ÆÄƼ¼Ç Ãß°¡DDL

¸ðµå3

¸ðµå6

Nowait

 

Å×À̺í»óÀÇTM(RX) Àá±Ý(lock)
Å×À̺í ÆÄƼ¼Ç»óÀÇ TM(X) Àá±Ý(lock)

 

µ¿ÀÏÇÑ ÆÄƼ¼Ç¿¡¼­ ¸ðµå 2,3,4,5,6.

¸ðµç ÆÄƼ¼Ç¿¡¼­ ¸ðµå5

´ë±â°¡ ¾ø±â ¶§¹®¿¡ Å×ÀÌºí¿¡ ´Ù¸¥ Àá±Ý(lock) ¸ðµå°¡ ÀÖÀ» °æ¿ì, DDL ½ÇÆÐ.

X Á¤´ä:C


X Á¤´ä:B


X Á¤´ä:B


X Á¤´ä:B