Àá±Ý °ü¸®
¿À¶óŬ ¼¹ö´Â Àá±Ý(lock) ±â´ÉÀ» ÀÚµ¿À¸·Î °ü¸®ÇÕ´Ï´Ù. ¿À¶óŬÀÇ
µðÆúÆ® Àá±Ý(lock) ¸ÞÄ¿´ÏÁòÀº °¡Àå ³ôÀº µ¥ÀÌÅÍ µ¿½Ã¼ºÀ» Çã¿ëÇÏ¸é¼ µ¥ÀÌÅÍ ÀÏ°ü¼ºÀ» º¸ÀåÇÒ ¼ö ÀÖµµ·Ï Á¦Çѵµ°¡ °¡Àå ³·Àº ·¹º§¿¡¼ µ¥ÀÌÅ͸¦
Àá±Þ´Ï´Ù.
ÁÖÀÇ: µðÆúÆ® ¸ÞÄ¿´ÏÁòÀº init.ora ÆĶó¹ÌÅÍ ROW_LOCKINGÀ» »ç¿ëÇÏ¿© ¼öÁ¤µÉ ¼ö ÀÖ½À´Ï´Ù.
µðÆúÆ® °ªÀº ALWAYSÀÔ´Ï´Ù. ±×·¸±â ¶§¹®¿¡, ¿À¶óŬ ¼¹ö´Â Ç×»ó Á¦Çѵµ°¡ °¡Àå ÀûÀº ·¹º§ÀÎ Çà ·¹º§¿¡¼ Àá°ÜÁö¸ç, DML ¹®Àå ½ÇÇà µ¿¾È
Å×ÀÌºí ·¹º§¿¡¼´Â Àá°ÜÁöÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ, Çà ·¹º§ Àá±Ý(lock)ÀÌ »ç¿ëµÇ´Â SELECT FOR UPDATE ¹®À» Á¦¿ÜÇÏ°í, ´õ Á¦ÇѵÈ
·¹º§ÀÎ Å×ÀÌºí ·¹º§¿¡¼ ¿À¶óŬ ¼¹ö°¡ Àá°ÜÁöµµ·Ï INTENT¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
µ¥ÀÌÅÍ µ¿½Ã¼º
Àá±Ý ±â´ÉÀº ³ôÀº ·¹º§ÀÇ µ¥ÀÌÅÍ
µ¿½Ã¼ºÀ» Çã¿ëÇϵµ·Ï ¼³°èµÇ¾ú½À´Ï´Ù.
µû¶ó¼, ¸¹Àº »ç¿ëÀÚµéÀº µ¿½Ã¿¡ µ¿ÀÏÇÑ µ¥ÀÌÅÍ¿¡ ¾ÈÀüÇÏ°Ô ¾×¼¼½ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
Æ®·£Àè¼Ç 1 |
Æ®·£Àè¼Ç 2 |
SQL> update
scott.s_emp |
SQL> update
scott.s_emp |
Æ®·£Àè¼Ç 1 |
Æ®·£Àè¼Ç 2 |
SQL> UPDATE s_emp |
SQL> select salary |
µ¥ÀÌÅÍ ÀÏ°ü¼º
¿À¶óŬ ¼¹ö´Â ¶ÇÇÑ ´Ù¾çÇÑ ·¹º§ÀÇ µ¥ÀÌÅÍ ÀÏ°ü¼ºÀ» Á¦°øÇÕ´Ï´Ù. µû¶ó¼, »ç¿ëÀÚ´Â
´Ù¸¥ »ç¿ëÀÚ°¡ µ¥ÀÌÅÍÀÇ Á¤ÀûÀÎ »óŸ¦ º¯°æÇÏ°í ÀÖ´õ¶óµµ ±× »óŸ¦ º¼ ¼ö ÀÖ½À´Ï´Ù.
Áö¼Ó¼º
Àá±Ý(lock)Àº COMMIT, ROLLBACK ¶Ç´Â Æ®·£Àè¼Ç Á¾·á ¶§±îÁö
À¯ÁöµË´Ï´Ù. Æ®·£Àè¼ÇÀÌ ºñÁ¤»óÀûÀ¸·Î Á¾·áµÇ¾úÀ» °æ¿ì, PMONÀº Àá±Ý(lock)À» ÇØÁ¦ÇÕ´Ï´Ù.
Àá±Ý(lock) ¸ðµå
Æ®·£Àè¼Ç1 |
Æ®·£Àè¼Ç2 |
SQL> update
scott.s_emp |
SQL> update
scott.s_emp |
Æ®·£Àè¼Ç 1 |
Æ®·£Àè¼Ç 2 |
SQL> update
scott.s_emp |
SQL> update
scott.s_emp |
Àá±Ý(lock) À¯Áö
Æ®·£Àè¼Ç2°¡ Ä¿¹Ô ¶Ç´Â ·Ñ¹éµÉ ¶§±îÁö Àá±Ý(lock)À»
À¯ÁöÇÕ´Ï´Ù.
¿¹
Æ®·£Àè¼Ç1 |
Æ®·£Àè¼Ç2 |
SQL> update
scott.s_emp |
SQL> update
scott.s_emp |
Æ®·£Àè¼Ç 2°¡ ¿äûµÈ Àá±Ý(lock)À» ÀÔ¼öÇ߱⠶§¹®¿¡, Æ®·£Àè¼Ç 1ÀÌ Ä¿¹ÔµÇÀÚ ¸¶ÀÚ, Æ®·£Àè¼Ç 2°¡ ÇàÀ» °»½ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.
DML LockÀÇ ¸ñÀû
DML LockÀº ¿©·¯ »ç¿ëÀÚ¿¡ ÀÇÇØ µ¿½Ã¿¡ ¾×¼¼½ºµÇ°í ÀÖ´Â
µ¥ÀÌÅÍÀÇ ¹«°á¼ºÀ» º¸ÀåÇϱâ À§ÇÑ °ÍÀÔ´Ï´Ù. À̵é Àá±Ý(lock)Àº DML ÀÛ¾÷°ú DDL ÀÛ¾÷À» µ¿½Ã¿¡ Ãæµ¹½ÃÅ°´Â Æı«ÀûÀÎ ¹æÇظ¦
¿¹¹æÇÕ´Ï´Ù.
2°¡Áö ·¹º§
Æ®·£Àè¼Ç1 |
Æ®·£Àè¼Ç2 |
SQL> UPDATE s_emp |
SQL> DROP TABLE
s_emp; |
Æ®·£Àè¼Ç1 |
Æ®·£Àè¼Ç2 |
SQL> update
scott.s_emp |
SQL> update
scott.s_emp |
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 |
SQL> update
s_emp |
Çà °øÀ¯ (Row Share, RS)
SELECT¡¦FOR
UPDATE ¹®À» »ç¿ëÇÏ´Â ÁúÀÇ µ¿¾È ÇàÀ» Àá±×µµ·Ï ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹
Æ®·£Àè¼Ç 1 (Á¡À¯µÈ RS Å×À̺í Àá±Ý) |
Æ®·£Àè¼Ç 2 (Á¡À¯µÈ X Å×À̺í Àá±Ý) |
SQL> select id,
salary |
SQL> lock table
s_emp |
¼öµ¿ Å×À̺í Àá±Ý(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 |
Æ®·£Àè¼Ç 2 (¿äûµÈ RX Å×À̺í Àá±Ý) |
SQL> delete from
s_dept |
SQL> update s_emp |
ÀÌ·¯ÇÑ ÇൿÀ» ÇÇÇϱâ À§Çؼ´Â, ÂüÁ¶ÇÏ´Â(ÀÚ½Ä) Å×À̺íÀÇ ¿ÜºÎÅ° ¿¿¡ À妽º¸¦
¼³Á¤ÇϽʽÿÀ.
ÀÚ½Ä Å×À̺íÀÇ ¿ÜºÎ Å°¿¡ À妽º¸¦ ¼³Á¤Çϸé, ¿À¶óŬ ¼¹ö´Â À妽ºÀÇ º¯°æµÈ °ªÀ» Àá±ÝÀ¸·Î½á ÀÚ½Ä Çà¿¡ º¯°æÀÌ ÇàÇØÁö´Â °ÍÀ»
¸·À» ¼ö ÀÖ½À´Ï´Ù.
Æ®·£Àè¼Ç 1 (Á¡À¯µÈ RX Å×À̺í Àá±Ý) |
Æ®·£Àè¼Ç 2 (Á¡À¯µÈRX Å×À̺í Àá±Ý |
SQL> delete from
s_dept |
SQL> update s_emp |
°øÀ¯ Çà µ¶Á¡(Share Row Exclusive, SRX)
¾Ï½ÃÀûÀ¸·Î °øÀ¯ Çà µ¶Á¡ Àá±Ý(lock)À» ¾òÀº SQL ¹®Àº ´Ù½Ã ÂüÁ¶ ¹«°á¼º°ú ¿¬°üµË´Ï´Ù. ´ÙÀ½ »óȲ¿¡¼, ºÎ¸ð Å×À̺í·ÎºÎÅÍ »èÁ¦ÇÒ ¶§, ÀÚ½Ä Å×ÀÌºí¿¡ °øÀ¯ Çà µ¶Á¡ Àá±Ý(lock)ÀÌ ÇÊ¿äÇÕ´Ï´Ù:
¿¹
Æ®·£Àè¼Ç 1 |
Æ®·£Àè¼Ç 2 (¿äûµÈ RX Å×À̺í Àá±Ý) |
SQL> delete from
s_dept SQL> commit; |
SQL> update s_emp 1 row updated. |
´Ù½Ã, ÇØ°áÃ¥Àº ÀÚ½Ä Å×À̺íÀÇ ¿ÜºÎ Å° ¿¿¡ À妽º¸¦ ¼³Á¤ÇÏ´Â °ÍÀÔ´Ï´Ù.
µ¶Á¡(Exclusive, X)
ÀÌ°ÍÀº ÃÖ°í ·¹º§ÀÇ Å×À̺í Àá±Ý(lock)À̱⠶§¹®¿¡, °¡Àå Á¦ÇÑÀûÀÎ ¸ðµå·Î¼, Ư¼ºÀº ´ÙÀ½°ú °°½À´Ï´Ù:
¿¹
Æ®·£Àè¼Ç 1 (Á¡À¯µÈ X Å×À̺í Àá±Ý) |
Æ®·£Àè¼Ç 2 (¿äûµÈ RS Å×À̺í Àá±Ý) |
SQL> lock table s_dept
in |
SQL> select * from
s_dept |
±â¼úÀû ÁÖÀÇ»çÇ×
ÀÌ Àá±Ý Á¤º¸´Â Æ®·£Àè¼ÇÀÌ Ä¿¹ÔµÉ ¶§ »èÁ¦µÇÁö ¾ÊÁö¸¸, ´ÙÀ½ ÁúÀÇ°¡
ºí·ÏÀ» ÀÐÀ» ¶§ »èÁ¦µË´Ï´Ù. ÀÌ°ÍÀº 'ºí·Ï »èÁ¦ ¿¬±â(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 |
SQL> ALTER TABLE
s_emp |
°øÀ¯ 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 ¼º´É °ü¸® ¾ÖÇø®ÄÉÀ̼ǿ¡¼ Ãâ·ÂµÉ ¼ö ÀÖ½À´Ï´Ù.
¹æÇØ/´ë±â Àá±Ý(lock) Ãâ·Â ¿É¼Ç
ÀÌ Ãâ·Â ¿É¼ÇÀº ´Ù¸¥ Æ®·£Àè¼Ç¿¡ ÀÇÇØ ¿ä±¸µÈ Àá±Ý(lock)À» Á¡À¯ÇÏ°í ÀÖ´Â Æ®·£Àè¼Ç¸¸À» ³ªÅ¸³À´Ï´Ù
¼¼¼Ç Á¾·á
»ç¿ëÀÚ°¡ ´Ù¸¥ »ç¿ëÀÚ°¡ ¿ä±¸ÇÏ´Â Àá±Ý(lock)À» Á¡À¯ÇÏ°í ÀÖ´Ù¸é,
DBA´Â ´ÙÀ½À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù:
À§¿¡¼ ¼³¸íÇÑ °¨½Ã ¹æ¹ýÀ» ÅëÇØ »ç¿ëÀÚ¿¡ ´ëÇÑ ¼¼¼Ç ½Äº°ÀÚ¸¦ ¾òÀ» °ÍÀÔ´Ï´Ù.
´ÙÀ½À»
¸í·ÉÀ» »ç¿ëÇÏ¿© »ç¿ëÀÚ ¼¼¼ÇÀ» Á¾·á½Ãų ¼ö ÀÖ½À´Ï´Ù:
°æÇÕÀ» À¯¹ß½ÃÅ°´Â Çà
¾î´À ÇàÀÌ °æÇÕÀ» À¯¹ß½ÃÅ°´ÂÁö ¾Ë ÇÊ¿ä°¡ ÀÖÀ» °æ¿ì¿¡´Â,
´ÙÀ½ÀÇ ¿ÀÌ Æ÷ÇԵǾî ÀÖ´Â V$SESSIONÀ» ÂüÁ¶ÇÕ´Ï´Ù:
Æ®·£Àè¼Ç 1¿¡¼ µÎ¹ø° °»½Å ¹®ÀÌ ±³Âø»óÅÂ(deadlock)¸¦ ŽÁöÇß´Ù°í °¡Á¤Çϸé, ¿À¶óŬ ¼¹ö´Â ±× ¹®ÀåÀ» ·Ñ¹éÇÏ°í ¸Þ½ÃÁö¸¦ ¹ÝȯÇÕ´Ï´Ù. ±³Âø»óÅÂ(deadlock)¸¦ ¹ß»ý½ÃŲ ¹®ÀåÀº ·Ñ¹éµÇÁö¸¸, Æ®·£Àè¼ÇÀº ·Ñ¹éµÇÁö ¾Ê½À´Ï´Ù. À̶§, »ç¿ëÀÚ¿¡°Ô´Â ORA-00060 ¿À·ù ¸Þ½ÃÁö°¡ Àü´ÞµÇ¾î¾ß ÇÕ´Ï´Ù. ´ÙÀ½ Á¶Ä¡´Â Æ®·£Àè¼ÇÀÇ ³ª¸ÓÁö ºÎºÐÀ» ·Ñ¹éÇÏ´Â °ÍÀÔ´Ï´Ù. ±â¼úÀû ÁÖÀÇ»çÇ× |
|
¹®¸Æ |
ÂüÁ¶ |
ÃʱâÈ ÆĶó¹ÌÅÍ |
DML_LOCKS |
µ¿Àû ¼º´É ºä |
LOCK |
µ¥ÀÌÅÍ µñ¼Å³Ê¸® ºä |
None |
¸í·É¾î |
LOCK TABLE IN lock MODE; |
ÆÐÅ°ÁöµÈ ÇÁ·Î½ÃÀú ¹× ÇÔ¼ö |
None |
½ºÅ©¸³Æ® |
None |
Áø´ÜÆÑ ¾îÇø®ÄÉÀÌ¼Ç |
Lock Manager |
Lock Matrix
¿äûÀÇ À¯Çü |
Àá±Ý |
Àá±Ý ´ë»ó |
Ãæµ¹/ÁÖÀÇ |
¼±ÅÃ(select) |
None |
None |
Àб⿡ ´ëÇÑ Àá±Ý(lock) ¾øÀ½. |
Çà °øÀ¯ ¸ðµå¿¡¼ÀÇ Å×À̺í Àá±Ý(lock) |
¸ðµå2 |
Å×À̺í»óÀÇTM(RS) Àá±Ý(lock) |
¸ðµå6. µ¶Á¡ DDL Àá±Ý(lock) ¾øÀ½. °¡Àå Á¦ÇÑÀÌ ÀûÀº Àá±Ý(lock). |
Çà °øÀ¯ ¸ðµå¿¡¼ÀÇ Å×À̺í ÆÄƼ¼Ç Àá±Ý(lock) |
¸ðµå2
|
Å×À̺í»óÀÇ TM(RS) Àá±Ý(lock) |
¸ðµå6. µ¶Á¡ DDL ¾øÀ½. °¡Àå Á¦ÇÑÀÌ ÀûÀº
Àá±Ý(lock). |
°»½ÅÀ» À§ÇÑ ¼±ÅÃ(select for update) |
¸ðµå2 ¸ðµå2
|
Å×À̺í»óÀÇ TM(RS) Àá±Ý(lock) °¢ Å×À̺í ÆÄƼ¼Ç»óÀÇ TM(RS)Àá±Ý(lock) RBS TX ½½·Ô»óÀÇ TX Àá±Ý(lock) |
¸ðµå6. µ¿ÀÏÇÑ Çà¿¡¼ÀÇ °»½Å ¼±Åà ¶Ç´ÂDML µ¶Á¡ DDLÀÌ ¾øÀ½. |
Çà µ¶Á¡ ¸ðµå¿¡¼ÀÇ Å×À̺í Àá±Ý(lock) |
¸ðµå 3 |
Å×À̺í»óÀÇ TM(RX)Àá±Ý(lock) |
¸ðµå 4,5,6 ¸ðµå3ÀÌ ¸ðµå3°ú Ãæµ¹Çϱ⠾ÊÀ» ¶§ °»½Å Çã¿ë |
Çà µ¶Á¡ ¸ðµå¿¡¼ÀÇ Å×À̺í ÆÄƼ¼Ç Àá±Ý(lock) |
¸ðµå3
|
Å×À̺í»óÀÇ TM(RX) Å×À̺í ÆÄƼ¼Ç»óÀÇ
|
µ¿ÀÏÇÑ ÆÄƼ¼Ç»óÀÇ ¸ðµå 4,5,6. ¸ðµå3ÀÌ ¸ðµå3°ú Ãæµ¹ÇÏÁö ¾ÊÀ» ¶§ °»½Å Çã¿ë. °øÀ¯ Àá±Ý(lock)°ú ÂüÁ¶ ¹«°á¼º Àá±Ý(lock)ÀÌ ¾øÀ½. |
DML(up/ins/del) |
¸ðµå3
|
Å×À̺í»óÀÇ TM(RX) RBS TX ½½·Ô»óÀÇ |
¸ðµå 4,5,6. °øÀ¯ Àá±Ý(lock)°ú ÂüÁ¶ ¹«°á¼º Àá±Ý(lock)ÀÌ ¾øÀ½. |
ºÐÇÒµÈ Å×À̺í»óÀÇ DML(up/ins/del) |
¸ðµå3
|
Å×À̺í»óÀÇ TM(RX) °»½ÅµÈ ÇàÀ» ¼ÒÀ¯ÇÏ´Â °¢ Å×À̺í ÆÄƼ¼Ç»óÀÇ TM(RX)
Àá±Ý RBS TX ½½·Ô»óÀÇ |
¸ðµå 4,5,6. µ¿ÀÏÇÑ Çà¿¡¼ °»½Å¼±Åà (select for update) ¶Ç´Â DML
|
°øÀ¯ ¸ðµå¿¡¼ÀÇ Å×À̺í Àá±Ý(lock) |
¸ðµå4 |
Å×À̺í»óÀÇ TM(S)
|
¸ðµå 3, 5,6. °»½Å¼±ÅÃ(select for update) ¹× ´Ù¸¥ °øÀ¯ Àá±Ý(lock) Çã¿ë. Àá°ÜÁø Å×À̺í»ó¿¡¼ |
°øÀ¯ ¸ðµå¿¡¼ÀÇ Å×À̺í ÆÄƼ¼Ç Àá±Ý(lock) |
¸ðµå2 ¸ðµå4 |
Å×À̺í»óÀÇ TM(RS) Å×À̺í ÆÄƼ¼Ç»óÀÇ
|
µ¿ÀÏÇÑ ÆÄƼ¼Ç¿¡¼ ¸ðµå 3, 5, 6. °»½Å¼±ÅÃ(select for update) ¹× ´Ù¸¥ °øÀ¯ Àá±Ý(lock) Çã¿ë. Àá°ÜÁø Å×À̺í»ó¿¡¼ |
ÀÚ½Ä Å×ÀÌºí¿¡ ÂüÁ¶ ¹«°á¼º Á¦¾àÁ¶°ÇÀº °®°í ÀÖ°í, ÀÚ½Ä Å×À̺íÀÇ FK ¿¿¡ À妽º´Â ¾øÀ¸¸ç, FK Á¦¾àÁ¶°Ç¿¡ ON DELETE DASCADE°¡ ¾ø´Â ºÎ¸ð Å×À̺í·ÎºÎÅÍ »èÁ¦/ºÎ¸ðÅ×ÀÌºí¿¡ °»½Å. |
¸ðµå4 ¸ðµå3 ¸ðµå6 |
ºÎ¸ð Å×ÀÌºí »óÀÇ RBS TX ½½·Ô»óÀÇ
|
ÀÚ½Ä Å×ÀÌºí¿¡¼ÀÇ ¸ðµå 3,5,6 ÀÚ½Ä Å×ÀÌºí¿¡¼ °»½Å¼±ÅÃ(select for update)°ú °øÀ¯ Àá±Ý(lock) Çã¿ë. ºÎ¸ð Å×ÀÌºí¿¡¼ÀÇ ¸ðµå4,5,6 ºÎ¸ð¿¡ ´ëÇÑ µ¿ÀÏÇÑ Çà¿¡¼ÀÇ °»½Å¼±ÅÃ(select for update) ¶Ç´Â DML |
ÀÚ½Ä Å×À̺íÀÇ FK ¿¿¡ À妽º¸¦ °®°í ÀÖ´Â ÀڽĿ¡ ´ëÇØ ÂüÁ¶ ¹«°á¼º Á¦¾àÁ¶°ÇÀ» °®°í ÀÖ°í, FK Á¦¾àÁ¶°Ç¿¡ ON DELETE DASCADE°¡ ¾ø´Â ºÎ¸ð Å×À̺í·Î |
¸ðµå3 ¸ðµå6 |
ºÎ¸ð Å×À̺í»óÀÇ RBS TX ½½·Ô»óÀÇ
|
¸ðµå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) Å×À̺í ÆÄƼ¼Ç»óÀÇ
|
µ¿ÀÏÇÑ ÆÄƼ¼Ç»óÀÇ ¸ðµå4. ¸ðµç ÆÄƼ¼Ç»óÀÇ ¸ðµå °»½Å¼±ÅÃ(select for update)¸¸ Çã¿ë. ORA 1555 ¾øÀ½ Á¾¼Ó»èÁ¦(Cascaded deletes) ¾øÀ½ |
ÀÚ½Ä Å×ÀÌºí¿¡ ÂüÁ¶ ¹«°á¼º Á¦¾àÁ¶°ÇÀ» °®°í ÀÖ°í, ÀÚ½Ä Å×À̺íÀÇ FK ¿¿¡ À妽º°¡ ¾øÀ¸¸ç, FK Á¦¾àÁ¶°Ç¿¡ ON DELETE DASCADE°¡ ÀÖ´Â ºÎ¸ð Å×À̺í·ÎºÎÅÍ »èÁ¦/ºÎ¸ð Å×ÀÌºí¿¡ °»½Å. |
¸ðµå5 ¸ðµå3 ¸ðµå6 |
ÀÚ½Ä Å×À̺í»óÀÇ ºÎ¸ð Å×À̺í»óÀÇ RBS TX ½½·Ô¿¡¼
|
ÀڽĿ¡¼ÀÇ ¸ðµå3,4,5,6 ÂüÁ¶ ¹«°á¼ºÀ¸·Î ÀÎÇÑ ORA 1555 ¾øÀ½ ÀÚ½ÄÀÌ ÂüÁ¶ÇÏ´Â ´Ù¸¥ ¸ðµå 4,5,6 ºÎ¸ðÀÇ µ¿ÀÏÇÑ Çà¿¡¼ |
ÀÚ½Ä Å×ÀÌºí¿¡ ÂüÁ¶ ¹«°á¼º Á¦¾àÁ¶°ÇÀ» °®°í ÀÖ°í, ÀÚ½Ä Å×À̺íÀÇ FK ¿¿¡ À妽º°¡ ÀÖÀ¸¸ç, FK Á¦¾àÁ¶°Ç¿¡ ON DELETE DASCADE°¡ ÀÖ´Â ºÎ¸ð Å×À̺í·ÎºÎÅÍ »èÁ¦/ºÎ¸ð Å×ÀÌºí¿¡ °»½Å |
¸ðµå3 ¸ðµå3 ¸ðµå6 |
ÀÚ½Ä Å×À̺í»óÀÇ ºÎ¸ð Å×À̺í»óÀÇ RBS TX ½½·Ô»óÀÇ
|
¸ðµå4,5,6. ºÎ¸ð¿¡ ´ëÇØ µ¿ÀÏÇÑ Çà¿¡¼ DML ¶Ç´Â °»½Å¼±ÅÃ(select for
¸ðµå4,5,6. ÇöÀç Á¾¼Ó |
µ¶Á¡ ¸ðµå¿¡¼ÀÇ
|
¸ðµå6 |
Å×À̺í»óÀÇ TM(X) Àá±Ý(lock) |
¸ðµå 2,3,4,5,6. °¡Àå Á¦ÇÑÀûÀÎ Àá±Ý ¸ðµå. |
µ¶Á¡ ¸ðµå¿¡¼ÀÇ
|
¸ðµå3
|
Å×À̺í»óÀÇ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 |
¸ðµå3 ¸ðµå6 Nowait
|
Å×À̺í»óÀÇTM(RX) Àá±Ý(lock)
|
µ¿ÀÏÇÑ ÆÄƼ¼Ç¿¡¼ ¸ðµå 2,3,4,5,6. ¸ðµç ÆÄƼ¼Ç¿¡¼ ¸ðµå5 ´ë±â°¡ ¾ø±â ¶§¹®¿¡ Å×ÀÌºí¿¡ ´Ù¸¥ Àá±Ý(lock) ¸ðµå°¡ ÀÖÀ» °æ¿ì, DDL ½ÇÆÐ. |