ÀúÀåÁ¡Àº µ¥ÀÌÅͺ£À̽º ¿äûÀÌ ½ÇÆÐÇÒ ¶§ DBMS¿¡ ÀÇÇØ ÀÛ¾÷À» ½ÇÇà Ãë¼ÒÇÏ´Â ¸ÞÄ«´ÏÁòÀÔ´Ï´Ù. ÀúÀåÁ¡Àº ºñ¿øÀÚÀû µ¥ÀÌÅͺ£À̽º ¿äûÀ» ¿øÀÚÀûÀ¸·Î µ¿ÀÛÇÏ°Ô ¸¸µì´Ï´Ù. ½ÇÇà Áß¿¡ ¿À·ù°¡ ¹ß»ýÇϸé ÀúÀåÁ¡À» »ç¿ëÇÏ¿© ÀúÀåÁ¡ÀÌ ½ÃÀÛµÈ ½Ã°£°ú ÀúÀåÁ¡ ±¸°£ º¹¿øÀÌ ¿äûµÈ ½Ã°£ »çÀÌ¿¡ Æ®·£Àè¼Ç¿¡ ÀÇÇØ º¯°æµÈ »çÇ×À» ½ÇÇà Ãë¼ÒÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀúÀåÁ¡Àº º¹ÇÕ SQL¹®°ú ºñ½ÁÇÕ´Ï´Ù. À̸¦ ÅëÇØ ¿©·¯ SQL¹®À» ´ÜÀÏ ½ÇÇà °¡´É ºí·ÏÀ¸·Î ±×·ìÈÇÒ ¼ö ÀÖ½À´Ï´Ù. ºí·ÏÀÇ Ã¹¹øÂ° ºÎ¼Ó ¸í·É¹®ÀÌ ½ÇÇàµÇ±â Àü¿¡ ÀúÀåÁ¡ ºí·ÏÀ» ½ÃÀÛÇÏ´Â ÀúÀåÁ¡ ¿äûÀÌ ÇÊ¿äÇÕ´Ï´Ù. ºÎ¼Ó ¸í·É¹® Áß¿¡¼ ¿À·ù°¡ ¹ß»ýÇÏ¸é ±× ºÎ¼Ó ¸í·É¹®¸¸ ±¸°£ º¹¿øµË´Ï´Ù. ÀÌ´Â ´ÜÀÏ ¿À·ù·Î Àüü ºí·Ï¿¡ ¿À·ù°¡ ¹ß»ýÇϰí Àüü º¹ÇÕ SQL¹®À» ±¸°£ º¹¿øÇÏ°Ô ¸¸µå´Â º¹ÇÕ SQL¹®º¸´Ù Á» ´õ ÁýÁß¼ºÀ» Á¦°øÇÕ´Ï´Ù. ¸í·É¹®ÀÇ ÀúÀåÁ¡ ºí·Ï ³¡¿¡¼ ÀúÀåÁ¡À» ÇØÁ¦Çϰųª ÀúÀåÁ¡À¸·Î ±¸°£ º¹¿øÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½ SQL¹®À¸·Î ÀúÀåÁ¡À» ÀÛ¼ºÇϰí Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù.
SAVEPOINT savepoint1 ON ROLLBACK RETAIN CURSORS
RELEASE SAVEPOINT savepoint1
ROLLBACK TO SAVEPOINT
SAVEPOINT, RELEASE SAVEPOINT ±×¸®°í ROLLBACK TO SAVEPOINT¹®ÀÇ ¿ÏÀüÇÑ ±¸¹®¿¡ ´ëÇØ¼´Â SQL ÂüÁ¶¼¸¦ ÂüÁ¶ÇϽʽÿÀ.
DB2 Universal Database´Â ´ÙÀ½ Á¦ÇÑ»çÇ×À» ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ÀúÀåÁ¡À» »ç¿ëÇÒ ¶§ Àû¿ëÇÕ´Ï´Ù.
DB2¸¦ ÅëÇØ ÀúÀåÁ¡¿¡ DDL¹®À» Æ÷ÇÔ½Ãų ¼ö ÀÖ½À´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥ÀÌ DDL¹®À» ½ÇÇàÇÏ´Â ÀúÀåÁ¡À» ¼º°øÀûÀ¸·Î ÇØÁ¦Çϸé, ÀÀ¿ëÇÁ·Î±×·¥Àº DDL¿¡¼ ÀÛ¼ºµÈ SQL ¿ÀºêÁ§Æ®¸¦ °è¼Ó »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ DDL¹®À» ½ÇÇàÇÏ´Â ÀúÀåÁ¡¿¡ ´ëÇØ ROLLBACK TO SAVEPOINT¹®À» ½ÇÇàÇϸé, DB2´Â ÀÌ·¯ÇÑ DDL¹®ÀÇ ¿µÇâÀ» ¹Þ´Â Ä¿¼¸¦ À¯È¿ÇÏÁö ¾ÊÀ½À¸·Î Ç¥½ÃÇÕ´Ï´Ù.
´ÙÀ½ ¿¹¿¡¼ ÀÀ¿ëÇÁ·Î±×·¥Àº ROLLBACK TO SAVEPOINT¹®À» ½ÇÇàÇÑ ÈÄ ÀÌÀü¿¡ ¿¸° ¼¼ °³ÀÇ Ä¿¼¿¡¼ ÆäÄ¡ÇÏ·Á°í ÇÕ´Ï´Ù.
SAVEPOINT savepoint_name; PREPARE s1 FROM 'SELECT FROM t1'; --issue DDL statement for t1 ALTER TABLE t1 ADD COLUMN... PREPARE s2 FROM 'SELECT FROM t2'; --issue DDL statement for t3 ALTER TABLE t3 ADD COLUMN... PREPARE s3 FROM 'SELECT FROM t3'; OPEN c1 USING s1; OPEN c2 USING s2; OPEN c3 USING s3; ROLLBACK TO SAVEPOINT FETCH c1; --invalid (SQLCODE -910) FETCH c2; --successful FETCH c3; --invalid (SQLCODE -910)
ROLLBACK TO SAVEPOINT¹®¿¡¼ DB2´Â "c1"°ú "c3" Ä¿¼¸¦ À¯È¿ÇÏÁö ¾ÊÀ½À¸·Î Ç¥½ÃÇÕ´Ï´Ù. ÀÌ·± Ä¿¼°¡ Á¾¼ÓµÇ¾î ÀÖ´Â SQL ¿ÀºêÁ§Æ®°¡ ÀúÀåÁ¡ÀÇ DDL¹®¿¡¼ 󸮵DZ⠶§¹®ÀÔ´Ï´Ù. ±×·¯³ª, ¿¹¿¡¼ "c2" Ä¿¼¸¦ »ç¿ëÇÏ´Â FETCH´Â ROLLBACK TO SAVEPOINT¹® ´ÙÀ½¿¡ ¼º°øÀûÀ¸·Î ÀÌ·ç¾îÁý´Ï´Ù.
CLOSE¹®À» ½ÇÇàÇÏ¿© À¯È¿ÇÏÁö ¾ÊÀº Ä¿¼¸¦ ´ÝÀ» ¼ö ÀÖ½À´Ï´Ù. À¯È¿ÇÏÁö ¾ÊÀº Ä¿¼¿¡ ´ëÇØ FETCH¸¦ ½ÇÇàÇϸé DB2´Â SQLCODE -910À» ¸®ÅÏÇÕ´Ï´Ù. À¯È¿ÇÏÁö ¾ÊÀº Ä¿¼¿¡ ´ëÇØ OPEN¹®À» ½ÇÇàÇϸé DB2´Â SQLCODE -502À» ¸®ÅÏÇÕ´Ï´Ù. À¯È¿ÇÏÁö ¾ÊÀº Ä¿¼¿¡ ´ëÇØ UPDATE ¶Ç´Â DELETE WHERE CURRENT OF¹®À» ½ÇÇàÇϸé DB2´Â SQLCODE -910À» ¸®ÅÏÇÕ´Ï´Ù.
ÀúÀåÁ¡¿¡¼ DB2´Â NOT LOGGED INITIALLY Ư¼ºÀÇ Å×À̺í°ú Àӽà Å×À̺íÀ» ´ÙÀ½°ú °°ÀÌ Ã³¸®ÇÕ´Ï´Ù.
DB2 ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ¼º´ÉÀ» Çâ»ó½ÃŰ·Á¸é INSERT BUF ¿É¼ÇÀ» »ç¿ëÇÏ¿© »çÀü ó¸® ÄÄÆÄÀÏÇϰųª ¹ÙÀεåÇÏ¿© ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ¹öÆÛ »ðÀÔÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ¹öÆÛ »ðÀÔ°ú ÀúÀåÁ¡À» µÑ´Ù »ç¿ëÇϸé, DB2´Â SAVEPOINT, RELEASE SAVEPOINT, OR ROLLBACK TO SAVEPOINt¹®À» ½ÇÇàÇϱâ Àü¿¡ ¹öÆÛ¸¦ ºñ¿ó´Ï´Ù.
ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ¹öÆÛ »ðÀÔÀ» »ç¿ëÇÏ´Â °Í¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ¹öÆÛ »ðÀÔ »ç¿ëÀ» ÂüÁ¶ÇϽʽÿÀ. ÀÀ¿ëÇÁ·Î±×·¥ »çÀü ó¸® ÄÄÆÄÀϰú ¹ÙÀε忡 ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Command Reference¸¦ ÂüÁ¶ÇϽʽÿÀ.
ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ÀúÀåÁ¡À» »ç¿ëÇϸé, »çÀü ó¸® ÄÄÆÄÀÏ ¿É¼Ç BLOCKING NO¸¦ »ç¿ëÇÏ¿© ÀÀ¿ëÇÁ·Î±×·¥À» »çÀü ó¸® ÄÄÆÄÀÏÇϰųª ¹ÙÀεåÇÏ¿© Ä¿¼¸¦ Ŭ·°ÇÏÁö ¸øÇϵµ·Ï ¸·´Â °Í¿¡ ´ëÇØ °í·ÁÇØ º¸½Ê½Ã¿À. ºí·ÎÅ· Ä¿¼°¡ ¿©·¯ ÇàÀ» »çÀü¿¡ ÆäÄ¡ÇÏ¿© ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ¼º´ÉÀ» Çâ»ó½Ãų ¼ö ÀÖÁö¸¸, ÀúÀåÁ¡À» »ç¿ëÇÏ´Â ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ¸®ÅÏÇÑ µ¥ÀÌÅÍ¿Í ºí·ÎÅ· Ä¿¼´Â µ¥ÀÌÅͺ£À̽º¿¡ È®¾àµÈ µ¥ÀÌÅ͸¦ ¹Ý¿µÇÏÁö ¾Ê½À´Ï´Ù.
BLOCKING NO¸¦ »ç¿ëÇÏ¿© ÀÀ¿ëÇÁ·Î±×·¥À» »çÀü ó¸® ÄÄÆÄÀÏÇÏÁö ¾Ê°í, ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ROLLBACK TO SAVEPOINTÇÑ ÈÄ¿¡ FETCH¹®À» ½ÇÇàÇϸé FETCH¹®Àº »èÁ¦µÈ µ¥ÀÌÅ͸¦ °Ë»öÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ SQL¿¡ µé¾î ÀÖ´Â ÀÀ¿ëÇÁ·Î±×·¥ÀÌ BLOCKING NO ¿É¼Ç ¾øÀÌ »çÀü ó¸® ÄÄÆÄÀÏµÈ´Ù°í °¡Á¤ÇØ º¸½Ê½Ã¿À.
CREATE TABLE t1(c1 INTEGER); DECLARE CURSOR c1 AS 'SELECT c1 FROM t1 ORDER BY c1'; INSERT INTO t1 VALUES (1); SAVEPOINT showFetchDelete; INSERT INTO t1 VALUES (2); INSERT INTO t1 VALUES (3); OPEN CURSOR c1; FETCH c1; --get first value and cursor block ALTER TABLE t1... --add constraint ROLLBACK TO SAVEPOINT; FETCH c1; --retrieves second value from cursor block
ÀÀ¿ëÇÁ·Î±×·¥ÀÌ "t1" Å×ÀÌºí¿¡¼ ù¹øÂ° FETCH¸¦ ½ÇÇàÇϸé, DB2 ¼¹ö´Â Ä÷³ °ªÀÇ ºí·Ï(1, 2 ¹× 3)À» Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ëÇÁ·Î±×·¥¿¡ º¸³À´Ï´Ù. ÀÌ·± Ä÷³ °ªÀº Ŭ¶óÀÌ¾ðÆ®¿¡ Áö¿ªÀûÀ¸·Î ÀúÀåµË´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ROLLBACK TO SAVEPOINT SQL¹®À» ½ÇÇàÇϸé '2'¿Í '3' Ä÷³ °ªÀº Å×ÀÌºí¿¡¼ »èÁ¦µË´Ï´Ù. ROLLBACK TO SAVEPOINT¹® ´ÙÀ½¿¡ Å×À̺íÀÇ ´ÙÀ½ FETCH´Â '2' Ä÷³ °ªÀÌ ´õ ÀÌ»ó Å×ÀÌºí¿¡ ¾ø¾îµµ À̸¦ ¸®ÅÏÇÕ´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥Àº Ä¿¼ ºí·ÎÅ· ¿É¼ÇÀ» »ç¿ëÇÏ¿© ¼º´ÉÀ» Çâ»ó½Ã۰í Áö¿ªÀûÀ¸·Î ÀúÀåµÈ µ¥ÀÌÅ͸¦ ¾×¼¼½ºÇϹǷΠÀÌ °ªÀ» ¼ö½ÅÇÕ´Ï´Ù.
ÀÀ¿ëÇÁ·Î±×·¥ »çÀü ó¸® ÄÄÆÄÀϰú ¹ÙÀε忡 ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Command Reference¸¦ ÂüÁ¶ÇϽʽÿÀ.
XA ȣȯ Æ®·£Àè¼Ç °ü¸® ÇÁ·Î±×·¥ÀÌ XA_END ¿äûÀ» ½ÇÇàÇÒ ¶§ ÀÀ¿ëÇÁ·Î±×·¥¿¡ Ȱ¼ºÈµÈ ÀúÀåÁ¡ÀÌ ÀÖÀ¸¸é DB2´Â RELEASE SAVEPOINT¹®À» ½ÇÇàÇÕ´Ï´Ù.