¾È±Ô °øºÎ¹æ

MS-SQL > Transaction & Lock - Áßø Æ®·£Àè¼Ç(Nested Transactions)

µî·ÏÀÏ : 2017-07-03 19:41 Á¶È¸¼ö : 34,509

Nested TransactionÀº Æ®·£Àè¼Ç ³»¿¡¼­ ´Ù½Ã Æ®·£Àè¼ÇÀ» Á¤ÀÇÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.
±×¸®±¸, savepoint ¶ó´Â°É ¾Ë¾Æº¼ÅÙµ¥¿ä. ÀÌ°ÍÀº Àüü Æ®·£Àè¼ÇÀÌ ¾Æ´Ï¶ó ƯÁ¤ ½ÃÁ¡±îÁöÀÇ Æ®·£Àè¼Ç¸¸
Ãë¼ÒµÇµµ·Ï ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.

  9.3.1  Æ®·£Àè¼Ç ³»ÀÇ Æ®·£Àè¼Ç ó¸®(Nested Transactions)
 
  Æ®·£Àè¼Ç ³»¿¡¼­ ´Ù½Ã Æ®·£Àè¼ÇÀ» Á¤ÀÇÇÒ¼ö ÀÖ½À´Ï´Ù.
  ±×·¯³ª, °¡Àå ¸ÕÀú ½ÃÀÛÇÑ Æ®·£Àè¼Ç¸¸ÀÌ ½ÇÁúÀûÀÎ Àǹ̸¦ °¡Áö¸ç, ±×¼Ó¿¡ ³»ÀåµÈ Æ®·£Àè¼ÇÀº ´Ü¼øÈ÷
  @@trancount°ª¸¸À» Áõ°¡½Ãŵ´Ï´Ù. ¿Ö³ÄÇÏ¸é ¾îÂ÷ÇÇ Æ®·£Àè¼ÇÀ̶ó´Â°ÍÀº ±× Á¤ÀÇ ÀÚü°¡ All or Nothing
  °³³äÀ¸·Î 󸮰¡ ¸ðµÎ µÇ°Å³ª ¾Æ´Ï¸é ¸ðµÎ Ãë¼Ò°¡ µÇ±â ¶§¹®ÀÌÁö¿ä.
 
  ÇöÀç Æ®·£Àè¼Ç ³×½ºÆà »óŸ¦ º¸·Á¸é @@trancount °ªÀ̳ª DBCC OPENTRAN ¸í·ÉÀ» »ç¿ëÇÏ¸é µË´Ï´Ù.
 
 
Nested Transaction ¿¹Á¦
		SET IMPLICIT_TRANSACTIONS OFF
		
		go
		SELECT @@TRANCOUNT              		-- °ªÀº 0
		BEGIN TRAN TRAN_1       	       		-- óÀ½ Æ®·£Àè¼Ç TRAN_1
			SELECT @@TRANCOUNT			-- °ªÀº 1
			BEGIN TRAN TRAN_2			-- µÎ¹ø° Æ®·£Àè¼Ç TRAN_2
				SELECT @@TRANCOUNT		-- °ªÀº 2
				CREATE TABLE TEST_TBL(ID INT)
				
				DBCC OPENTRAN	
				
				BEGIN TRAN TRAN_3		-- ¼¼¹ø° Æ®·£Àè¼Ç TRAN_3	
					SELECT @@TRANCOUNT	-- °ªÀº 3
				COMMIT TRAN TRAN_3		-- ¼¼¹ø° Æ®·£Àè¼Ç ¿Ï·á
			COMMIT TRAN TRAN_2			-- µÎ¹ø° Æ®·£Àè¼Ç ¿Ï·á	
		COMMIT TRAN TRAN_1				-- ù¹ø° Æ®·£Àè¼Ç ¿Ï·á	
		SELECT @@TRANCOUNT				-- °ªÀº 0
		
		
  
     
      ¾îÂ¸é ±²ÀåÈ÷ º¹ÀâÇÏ°Ô º¸ÀÌÁö¸¸, ¾î·ÆÁö ¾Ê´Â ³»¿ëÀÔ´Ï´Ù.
      Æ®·£Àè¼ÇÀ» Á¾·áÇϱâ À§Çؼ­´Â BETRAN ¹®À» »ç¿ëÇÑ ¸¸Å­ ±×¿¡ ´ëÀÀµÇ´Â COMMIT¹®À» »ç¿ëÇϰųª BEGIN TRAN
      ¹®À» ¼ö¿¡ »ó°ü¾øÀÌ ROLLBACK¹®À» Çѹø¸¸ »ç¿ëÇØ ÁÖ¸é µË´Ï´Ù.
     
      À§ÀÇ ¿¹Á¦Ã³·³ BEGIN TRAN ¹®À» ¼¼¹ø »ç¿ëÇß´Ù¸é COMMIT ¹®À» ¼¼¹ø»ç¿ëÇؾ߸¸ ¿ÏÀüÈ÷ Æ®·£Àè¼ÇÀÌ ¿Ï·áµÇ´Â
      °ÍÀ» ¾Ë¼ö ÀÖ½À´Ï´Ù.
     
9.3.2  Æ®·£Àè¼Ç SAVEPOINT ½ÃÁ¡ ±îÁö¸¸ ROLLBACK

SAVEPOINT ¶ó´Â°ÍÀº Æ®·£Àè¼Ç ó¸®ÁßÀÇ ÇÑ °úÁ¤À» °¡¸®Å°´Â ÁÖ¼Ò °³³äÀÔ´Ï´Ù.
ÀÌ°ÍÀº Æ®·£Àè¼ÇÀ» ó¸®ÇÏ´Ù°¡ ¾÷¹« ±ÔÄ¢»óÀÇ ¿À·ù°¡ ¹ß»ýÇßÀ» ¶§ ±×³É ROLLBACK TRAN ¹®À» »ç¿ëÇÏ¿© Àüü
Æ®·£Àè¼ÇÀÌ Ãë¼ÒµÇ´Â °ÍÀ» ¸·À» ¼ö ÀÖ´Â ¹æ¹ýÀ¸·Î ROLLBACK TRAN SAVEPOINT_NAME Çü½ÄÀ» »ç¿ëÇÏ¿© ÁøÇàµÈ
Æ®·£Àè¼Ç Áß¿¡¼­ ƯÁ¤ ½ÃÁ¡±îÁö¸¸ Ãë¼ÒÇÒ¼ö ÀÖ°Ô²û ÇØ ÁÝ´Ï´Ù.

¿¹Á¦¸¦ º¸¸é¼­ Çؾ߰ÚÁö¿ä? ¾Æ·¡ÀÇ ¿¹Á¦¸¦ º¸¸é,

 
SAVEPOINT ¿¹Á¦
		CREATE TABLE tran4 (id int, trancnt int)
		
		BEGIN TRAN
			INSERT TRAN4 VALUES(1,@@trancount)
			SAVE TRANSACTION tran_step1 	    -- Æ®·£Àè¼Ç SAVEPOINT Á¤ÀÇ
				INSERT tran4 VALUES(2,@@TRANCOUNT)
			ROLLBACK TRAN tran_step1		    -- SAVEPOINT ½ÃÁ¡±îÁö¸¸ Ãë¼Ò
			INSERT tran4 VALUES(3,@@trancount)
		COMMIT TRAN
		
		SELECT * FROM tran4		
		
		
 
     
      À§ÀÇ ¿¹Á¦ÀÇ °á°ú¸¦ º¸¸é
     
      id      trancnt
      ------------------
      1         2
      3         2
     
      ¿Í °°ÀÌ 2¹ø¿¡ ´ëÇÑ µ¥ÀÌŸ´Â rollback 󸮰¡ µÇ¾úÀ½À» ¾Ë¼ö ÀÖ½À´Ï´Ù.
     
      ¾ðÁ¦ ÀÌ·±°É »ç¿ëÇÏ°Ô µÉÁö´Â ¸ð¸£°ÚÁö¸¸, ÀÌ·± ¸í·Éµµ ÀÖ±¸³ª ÇÏ´Â Á¤µµ´Â ¾Ë¾ÆµÎ´Â°ÍÀÌ ÁÁÀ» µí ½Í¾î¼­
      ¸îÀÚ Àû¾î º¸¾Ò½À´Ï´Ù.
     
      ¿À´Ãµµ ÇູÇϽÿͿ©.
 
¡Ø Ȥ½Ã µµ¿òÀÌ µÇ¼Ì´Ù¸é ´ñ±Û¿¡ ÇѸ¶µð ³²°ÜÁÖ¼¼¿ä!
ÀÛ¼ºÀÚ   ºñ¹Ð¹øÈ£
ÀÚµ¿±Û ¹æÁö     (ÀÚµ¿±Û ¹æÁö ±â´ÉÀÔ´Ï´Ù.)
³»¿ë   ´ñ±Û´Þ±â 
À̸ÞÀÏ ¹®ÀÇ : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.