SQL ¼¹ö 2005°¡ ³ª¿À¸é¼ °³ÀÎÀûÀ¸·Î °¡Àå Å©°Ô °ü½ÉÀ» º¸ÀÎ ºÎºÐÀÌ ¹Ù·Î Å×ÀÌºí ÆÄÆ¼¼Å´×ÀÌ´Ù.
ÇöÀç ·Ôµ¥Ä¥¼ºÀ½·á¿¡¼µµ ¸Å´Þ 100¸¸ °ÇÀÇ °Å·¡¸í¼¼Ç¥ ³»¿ªÀÌ ½×ÀÌ¸é¼ À̸¦ ó¸®Çϱâ À§ÇÑ ´ë¿ë·® µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇØ ³ôÀº °ü½ÉÀ» ±â¿ïÀ̰í ÀÖ´Ù. À̹ø ±Û¿¡¼´Â ´ë¿ë·® µ¥ÀÌÅͺ£À̽º¸¦ À§ÇÑ Å×ÀÌºí ÆÄÆ¼¼Å´×°ú °¡¿ë¼ºÀ» ³ôÀ̱â À§ÇÑ ½º³À¼¦ ±×¸®°í ¹Ì·¯¸µ¿¡ ´ëÇØ ¾Ë¾Æ º¼ °ÍÀÌ´Ù.
¿¬Àç °¡À̵å¿î¿µÃ¼Á¦ : À©µµ¿ì 2000, À©µµ¿ì 2003, À©µµ¿ì XP
°³¹ßµµ±¸ : MS SQL ¼¹ö 2005 º£Å¸ 2, ºñÁÖ¾ó ½ºÆ©µð¿À 2005 º£Å¸ 1
±âÃÊÁö½Ä : MS SQL ¼¹ö 2000, C#
ÀÀ¿ëºÐ¾ß : MS SQL ¼¹ö 2005 °ü¸®¿Í °³¹ß
Áö³ 3ȸ¿¡ °ÉÃÄ SQL ¼¹ö 2005ÀÇ »õ·Î¿î Ư¡µé¿¡ ´ëÇØ ¾Ë¾ÆºÃ´Ù. À̹ø ±Û¿¡¼´Â ¸¶Áö¸·À¸·Î ´ë¿ë·® µ¥ÀÌÅͺ£À̽º¸¦ À§ÇÑ ±âÁ¸ÀÇ ÆÄƼ¼Çºä¸¦ ´ëüÇÏ´Â Å×ÀÌºí ÆÄÆ¼¼Å´×°ú µ¥ÀÌÅͺ£À̽º ÀÌ·Â °ü¸®¸¦ À§ÇÑ ½º³À¼¦, ±×¸®°í °¡¿ë¼ºÀ» ³ôÀ̱â À§ÇÑ Å¬·¯½ºÅ͸µ¿¡ °ßÁÙ ¼ö ÀÖ´Â ¹Ì·¯¸µ¿¡ ´ëÇØ ¾Ë¾Æ º¼ °ÍÀÌ´Ù.
±â¾÷ÀÇ µ¥ÀÌÅÍ´Â ½Ã°£ÀÌ Áö³¯¼ö·Ï Á¡Á¡ ¸¹¾ÆÁö°í ÀÖ´Ù. ºÐ¼®À» À§ÇÑ µ¥ÀÌÅÍ´Â Á¡Á¡ ´õ ½×¿©¸¸ °¡°í ´õ ÀÌ»ó ÇϳªÀÇ Å×ÀÌºí¿¡ ÀÌ ¸ðµç Á¤º¸¸¦ ´ã¾Æ µÎ´Â °ÍÀÌ ºñÈ¿À²ÀûÀÏ ¶§°¡ ÀÖ´Ù. º¸Åë ±â°¡³ª Å×¶ó ´ÜÀ§ÀÇ µ¥ÀÌÅ͸¦ ÇϳªÀÇ Å×ÀÌºí¿¡ ´ã¾Æ µÎ°Ô µÇ¸é Å×À̺í À¯Áö º¸¼ö°¡ Èûµé¸ç ¼º´É ¶ÇÇÑ ´À·ÁÁö°Ô µÈ´Ù.
ÀÌ·¯ÇÑ µ¥ÀÌÅÍ´Â ´ëºÎºÐ °ú°ÅÀÇ µ¥ÀÌÅͰ¡ ÇÔ²² ÀÖ¾î¼ ±×·¯´Âµ¥, ¾Æ¸¶ ¸î ³â ÀüÀÇ µ¥ÀÌÅÍ´Â °ÅÀÇ »ç¿ëÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ·² ¶§¿¡´Â Å×À̺íÀ» ³ª´©¾î¼ ÃÖ±ÙÀÇ µ¥ÀÌÅÍ´Â ³ôÀº ¼º´ÉÀ» ³»´Â I/O¿¡ ´ã¾Æ µÎ°í, ¿¹ÀüÀÇ µ¥ÀÌÅÍ´Â ºñ±³Àû ³·Àº ¼º´ÉÀÇ Àú·ÅÇÑ I/O ÀåÄ¡¿¡ ´ã¾Æ µÎ´Â °ÍÀÌ È¿À²ÀûÀÏ °ÍÀÌ´Ù. ÀÌ·² ¶§ »ç¿ëÇÏ´Â °ÍÀÌ ¹Ù·Î ÆÄƼ¼Å´×ÀÌ´Ù.
SQL ¼¹ö 7.0/2000¿¡¼ ºÐÇÒµÈ ºä
ÆÄƼ¼Å´×À» À§ÇÑ Àü·«Àº SQL ¼¹ö 7.0¿¡¼ºÎÅÍ Áö¿øÇß´Ù. ºÐÇÒµÈ ºä(partitioned view)¸¦ ÀÌ¿ëÇÏ¿© °¢°¢ÀÇ Å×À̺íÀ» UNIONÀ¸·Î ¹¾î¼ ¸¶Ä¡ ÇϳªÀÇ Å×À̺í·Î º¼ ¼ö ÀÖµµ·Ï Çß´Ù.
CREATE VIEW Production.vTransaction
AS
SELECT * FROM Production.Transaction_2003_09 UNION ALL
SELECT * FROM Production.Transaction_2003_10 UNION ALL
SELECT * FROM Production.Transaction_2003_11
ÀÌ¿Í °°ÀÌ 2003³â 9¿ùÀÇ Å×À̺í°ú 2003³â 10¿ùÀÇ Å×À̺í, 2003³â 11¿ùÀÇ Å×À̺íÀ» UNIONÀ¸·Î °áÇÕÇÔÀ¸·Î½á ºÐÇÒµÈ ºä¸¦ ¸¸µé ¼ö ÀÖ´Ù. ÀÌ ¶§ °¢ Å×À̺íÀº ÆÄƼ¼Å´× Ä÷³À» CHECK Á¶°ÇÀ» ÀÌ¿ëÇÏ¿© ¹Ì¸® Á¦ÇÑÇØµÖ¾ß ÇÑ´Ù. ¿¹¸¦ µé¸é ¾ÕÀÇ °¢ Å×ÀÌºí¿¡ TransactionDate¶ó´Â ³¯Â¥ Ä÷³ÀÌ ÀÖ´Ù¸é Á¦ÇÑ Á¶°ÇÀ¸·Î ´ÙÀ½°ú °°ÀÌ Áà¾ß ÇÑ´Ù.
CHECK ( TransactionDate between '2003-09-01' AND '2003-09-30')
ÀÌ·¸°Ô ÆÄƼ¼Å´× Ä÷³À» Á¤ÀÇÇϰí ÀÌ Ä÷³¿¡ INDEX¸¦ °É¾î µÎ¸é ºÐÇÒµÈ ºä¸¦ ÀÌ¿ëÇÏ¿© Å×ÀÌºí¿¡ Á¢±ÙÇÒ ¶§ ´Ù¸¥ ³¯Â¥ÀÇ Å×À̺íÀº ÀÐÁö ¾Ê°Ô µÈ´Ù. SQL ¼¹ö 2000¿¡¼´Â ºÐÇÒ ºä¸¦ ÀÌ¿ëÇÏ¿© µ¥ÀÌÅÍ °»½Å ÀÛ¾÷ÀÌ È¿°úÀûÀ¸·Î ¼öÇàÇϵµ·Ï Áö¿øÇÏ¿´À¸¸ç ºÐ»ê ºÐÇÒµÈ ºä(distributed partitioned view)·Î±îÁö ¹ßÀüÀ» ÇÏ¿© °¢°¢ÀÇ Å×À̺íÀÌ ÇÑ ¼¹ö°¡ ¾Æ´Ñ ´Ù¸¥ ¼¹ö¿¡ À־ °¡´ÉÇϵµ·Ï ¹ßÀüÇß´Ù.
ÇÏÁö¸¸ ºÐÇÒµÈ ºä ¹æ½ÄÀÇ ÆÄƼ¼Å´×Àº ¿©·¯ Å×À̺íÀ» ÇϳªÀÇ ºä·Î ¸ð¾Ò±â ¶§¹®¿¡ °ü¸®»ó ºÒÆíÇÑ Á¡ÀÌ ¸¹¾Ò´Ù. ¿¹¸¦ µé¸é Å×ÀÌºí ±¸Á¶¸¦ ¹Ù²Û ´Ù°Å³ª À妽º¸¦ Àç»ý¼ºÇϰųª º¯°æÇÏ´Â °æ¿ì °¢°¢ÀÇ Å×À̺íÀ» ¸ðµÎ ¹Ý¿µÇØÁà¾ß Çϱ⠶§¹®ÀÌ´Ù.
SQL ¼¹ö 2005ÀÇ Å×ÀÌºí ÆÄÆ¼¼Å´×
SQL ¼¹ö 2005¿¡¼´Â ºä¸¦ ÅëÇÑ ÆÄƼ¼Å´×ÀÌ ¾Æ´Ñ Å×ÀÌºí ´ÜÀ§ÀÇ ÆÄƼ¼Å´×À» Áö¿øÇÑ´Ù. Áï ÇϳªÀÇ Å×À̺íÀ» ¿©·¯ Á¶°¢À¸·Î Âɰ³¾î °ü¸®ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ±×·¯¹Ç·Î ºÐÇÒµÈ ºäó·³ °¢ Å×À̺íÀ» µû·Î °ü¸®ÇÒ Çʿ䰡 ¾ø´Ù. ¿¹¸¦ µé¸é À妽º¸¦ ¸¸µå´Âµ¥ ÀÖ¾î¼ ÇϳªÀÇ Å×ÀÌºí¸¸ ¸¸µé¸é µÇ¹Ç·Î °ü¸®»ó ÀÌÁ¡ÀÌ ÀÖ´Ù. ¶ÇÇÑ ¼º´É¿¡ À־µ ´õ ÁÁÀº ¼º´ÉÀ» º¸¿©ÁØ´Ù.
ºÐÇÒµÈ ºä¿¡¼´Â °¢°¢ÀÇ Å×À̺íÀ» º¸°í ³ªÁß¿¡ ÇÕÄ¡´Â ¹æ½ÄÀ¸·Î ÁøÇàµÇ¾úÁö¸¸, Å×ÀÌºí ÆÄÆ¼¼Å´×¿¡¼´Â ¸ÖƼ CPU ȯ°æÀ̶ó¸é º´·Äó¸®(demand parallelism)¸¦ ÀÌ¿ëÇÏ¿© º¸´Ù ºü¸¥ Äõ¸®¸¦ ¼öÇàÇÒ ¼öµµ ÀÖ´Ù. Äõ¸®¸¦ ÄÄÆÄÀÏÇϴµ¥ À־µ ºÐÇÒµÈ ºä¿¡¼´Â Å×À̺íÀÌ ¸¹À»¼ö·Ï ´À·ÈÁö¸¸, Å×ÀÌºí ÆÄÆ¼¼Å´×¿¡¼´Â ÆÄƼ¼Ç °³¼ö¿¡ »ó°ü¾øÀÌ ºü¸¥ ¼Óµµ¸¦ º¸ÀåÇÑ´Ù.
 |
| <±×¸² 1> Å×ÀÌºí ÆÄÆ¼¼Å´× |
Å×ÀÌºí ÆÄÆ¼¼Å´×Àº ÆÄƼ¼Å´× ÇÔ¼ö¿Í ½ºÅ°¸¶¸¦ ÀÌ¿ëÇÏ¿© ±¸ÇöÀ» ÇÑ´Ù. ÆÄƼ¼Å´× ÇÔ¼ö·Î´Â °æ°è ¿µ¿ªÀ» ±¸ºÐÇÏ°í ½ºÅ°¸¶·Î´Â ½ÇÁ¦ ¹°¸®ÀûÀÎ ÆÄÀÏ ±×·ì¿¡ °¢ ÆÄƼ¼ÇÀ» ¸ÊÇÎÇÑ´Ù.
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000)
ÀÌ ¿¹Á¦´Â myRangePF1À̶ó´Â ÆÄƼ¼Ç ÇÔ¼ö¸¦ Á¤ÀÇÇϴµ¥ ÀÖ¾î °æ°è ºÎºÐÀ» ¿ÞÂÊ¿¡ Æ÷ÇÔÇÏ´Â ÇÔ¼ö¸¦ ¸¸µé°í ÀÖ´Ù. ÀÌ¿Í °°ÀÌ ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°ÀÌ 4°³ÀÇ ÆÄƼ¼Ç ¿µ¿ªÀ» Á¤ÀÇÇÑ´Ù.
| ÆÄƼ¼Ç | 1 | 2 | 3 | 4 |
| °ª | col <= 1 | col > 1 and col <= 100 | col > 100 AND col <= 1,000 | col > 1,000 |
Áï, °æ°è¸¦ ¿ÞÂÊ ºÎºÐ¿¡ Æ÷ÇÔÇϱ⠶§¹®¿¡ 1,100,1000Àº °¢°¢ ¿ÞÂÊ ÆÄƼ¼Ç¿¡ Æ÷ÇÔÇÏ°Ô µÈ´Ù. ¸¸¾à LEFT ´ë½Å¿¡ RIGHT¶ó°í ¾´´Ù¸é 1,100,1000Àº °¢°¢ ¿À¸¥ÂÊ ÆÄƼ¼Ç¿¡ Æ÷ÇÔÇÏ°Ô µÈ´Ù. ÆÄƼ¼Ç ÇÔ¼ö¸¦ ¸¸µé¾úÀ¸¸é ½ÇÁ¦ ¹°¸®ÀûÀÎ ¿µ¿ª¿¡ ¸ÊÇÎÇÒ ¼ö ÀÖ´Â ½ºÅ°¸¶¸¦ Á¤ÀÇÇØ¾ß ÇÑ´Ù.
CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
TO (test1fg, test2fg, test3fg, test4fg)
ÀÌ ±¸¹®Àº ¾Õ¿¡¼ Á¤ÀÇÇÑ ÆÄƼ¼Ç ÇÔ¼ö¸¦ ¹ÙÅÁÀ¸·Î °¢°¢ 4°³ÀÇ ÆÄÀÏ ±×·ì¿¡ ¸ÊÇÎÇϰí ÀÖ´Ù. µû¶ó¼ ÀÌ·± °æ¿ì´Â °¢°¢ÀÇ ÆÄƼ¼ÇÀÌ º°°³ÀÇ ¹°¸®ÀûÀÎ °ø°£¿¡ ÀúÀåµÇ°Ô µÈ´Ù. ¹°·Ð ÇϳªÀÇ ÆÄÀÏ ±×·ì¿¡ ´ãÀ» ¼öµµ ÀÖ´Ù. ±×·³ ÀÌÁ¦ SQL ¼¹ö 2000ÀÇ ºÐÇÒµÈ ºä¿Í SQL ¼¹ö 2005ÀÇ Å×ÀÌºí ÆÄÆ¼¼Å´×ÀÇ Â÷ÀÌÁ¡¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.
ºÐÇÒµÈ ºä vs. Å×ÀÌºí ÆÄÆ¼¼Å´×
¸ÕÀú ºÐÇÒµÈ ºä¸¦ ¸¸µé¾îº¸ÀÚ. ±âº»ÀûÀ¸·Î SQL ¼¹ö 2005 º£Å¸2¸¦ ¼³Ä¡Çϸé AdventureWorks¿¡ TransactionHistory¶ó´Â Å« Å×À̺íÀÌ Á¸ÀçÇÑ´Ù. À̸¦ ¸ÕÀú ºÐÇÒµÈ ºä·Î ¸¸µé±â À§ÇØ ´ÙÀ½°ú °°ÀÌ ¿©·¯ °³ÀÇ Å×À̺í·Î ³ª´©°í °¢°¢ CHECK Á¦¾à Á¶°£À» ÁÖ°í À妽º¸¦ »ý¼ºÇغ¸ÀÚ. Àüü ÄÚµå´Â ¡®ÀÌ´ÞÀÇ µð½ºÄÏ¡¯¿¡ ÀÖ´Ù.
Å×ÀÌºí ºÐÇÒ
SELECT *
INTO Production.Transaction_2003_09
FROM Production.TransactionHistory
WHERE TransactionDate between '2003-09-01' and '2003-09-30';
SELECT *
INTO Production.Transaction_2003_10
FROM Production.TransactionHistory
WHERE TransactionDate between '2003-10-01' and '2003-10-31';
...
üũ Á¦¾à Á¶°Ç »ðÀÔ
ALTER TABLE [Production].[Transaction_2003_09]
WITH CHECK ADD CONSTRAINT [CK_Transaction_2003_09]
CHECK (TransactionDate between '2003-09-01' AND '2003-09-30');
ALTER TABLE [Production].[Transaction_2003_10]
WITH CHECK ADD CONSTRAINT [CK_Transaction_2003_10]
CHECK ( TransactionDate between '2003-10-01' AND '2003-10-31');
...
À妽º ¸¸µé±â
CREATE CLUSTERED INDEX [IX_Transaction_2003_09_TransactionDate] ON
[Production].[Transaction_2003_09]([TransactionDate]);
CREATE CLUSTERED INDEX [IX_Transaction_2003_10_TransactionDate] ON
[Production].[Transaction_2003_10]([TransactionDate]);
...
ºä ¸¸µé±â
CREATE VIEW Production.vTransaction
AS
SELECT * FROM Production.Transaction_2003_09 UNION ALL
SELECT * FROM Production.Transaction_2003_10 UNION ALL
...
ÀÌÁ¦ ´Ù ¸¸µé¾úÀ¸¸é °ú¿¬ Àß ¸¸µé¾ú´ÂÁö »ùÇà Äõ¸®¸¦ ½ÇÇàÇØº¸ÀÚ.
SELECT * FROM Production.vTransaction
WHERE TransactionDate between '2003-09-01' and '2003-10-31';
-----------------------------------------------------------------
(20494 row(s) affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Transaction_2003_10'. Scan count 1, logical reads 74, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Transaction_2003_09'. Scan count 1, logical reads 88, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
ÀÌ °á°ú¸¦ º¸¸é ¿¹»ó´ë·Î ´Ù¸¥ Å×À̺íÀº ÀбⰡ ¾ø°í ÇØ´ç Å×ÀÌºí¿¡¼¸¸ ÀбⰡ ÀÏ¾î³ °ÍÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·³ ½ÇÁ¦ ½ÇÇà °èȹÀ» º¸ÀÚ.
 |
| <ȸé 1> ºÐÇÒµÈ ºä¸¦ ÀÌ¿ëÇÑ ½ÇÇà °èȹ |
½ÇÇà °èȹÀ» º¸¸é ´Ù¸¥ Å×À̺íÀ» ¸ðµÎ º» ´ÙÀ½¿¡ ÇÊÅÍ·Î °É·¯¼ ³ªÁß¿¡ °áÇÕ(concatenation) ¿¬»êÀ» ÀÌ¿ëÇÏ¿© ÇÕÄ¡´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ¾Õ¿¡¼´Â PK(Primary Key)°¡ ¾ø¾î¼ ±×·± °ÍÀ̰í, ¸¸¾à ÆÄƼ¼Å´× Ä÷³ÀÌ PK¶ó¸é ´Ù¸¥ Å×À̺íÀº ¾Æ¿¹ º¸Áöµµ ¾Ê°í ÇÊÅ͸µµµ ¾ø¾î ¹Ù·Î µ¥ÀÌÅ͸¦ °¡Á®¿Â´Ù.
ÇÏÁö¸¸ PK°¡ ÀÖ´Â Å×ÀÌºíµµ ÀúÀå ÇÁ·Î½ÃÀú¸¦ ÀÌ¿ëÇÏ¿© Äõ¸®¸¦ ÇÏ¸é ¾îÂ÷ÇÇ ÇöÀç¿Í ¶È°°ÀÌ ÇÊÅ͸µÇÏ¿© °áÇÕÇϹǷΠū Â÷ÀÌ´Â ¾ø´Ù°í ºÁµµ µÈ´Ù. Àб⠼ö¸¦ º¸´õ¶óµµ ´Ù¸¥ Å×À̺íÀº ÇÊÅ͸µÀ» ÇϹǷΠ0ÀÌ ³ª¿Â´Ù. ÀÌÁ¦´Â Å×ÀÌºí ÆÄÆ¼¼Å´×À» ÀÌ¿ëÇØº¸ÀÚ. SQL ¼¹ö 2005 º£Å¸2¿¡¼ ¿£Áø ¿¹½Ã(Engine Example)¸¦ ¼³Ä¡ÇÏ¿© ´ÙÀ½ Æú´õ¿¡ °¡º¸¸é Å×ÀÌºí ÆÄÆ¼¼Å´× ¿¹Á¦°¡ ÀÖ´Ù.
C:\Program Files\Microsoft SQL Server\90\Tools\Samples\1033\Engine\Administration\Partitioning\Scripts
\PartitionAW.sql
ÀÌ ¿¹Á¦¸¦ ½ÇÇà½Ã۸é TransactionHistory Å×À̺íÀ» ÆÄƼ¼Å´×À» Çϴµ¥, 2003³â 10¿ù ÀÌÀüºÎÅÍ 2004³â 8¿ù ÀÌÈıîÁö 12°³ÀÇ ÆÄƼ¼ÇÀ¸·Î ³ª´©¾î¼ ¸¸µç´Ù. ´ÙÀ½Àº ÁÖ¿ä ÄÚµå Áß¿¡ ÇϳªÀÌ´Ù.
-- Range partition table TransactionHistory
CREATE PARTITION FUNCTION TransactionRangePF1 (datetime)
AS RANGE RIGHT FOR VALUES ('10/01/2003', '11/01/2003', '12/01/2003',
'1/01/2004', '2/01/2004', '3/01/2004', '4/01/2004',
'5/01/2004', '6/01/2004', '7/01/2004', '8/01/2004');
GO
ÆÄƼ¼Ç ÇÔ¼ö¸¦ ¸¸µå´Âµ¥ ÀÖ¾î ¿ùº°·Î ÃÑ 12°³ÀÇ ÆÄƼ¼ÇÀ¸·Î ³ª´©°í ÀÖ´Ù.
CREATE PARTITION SCHEME TransactionsPS1
AS PARTITION TransactionRangePF1
TO ([PRIMARY], [PRIMARY], [PRIMARY]
, [PRIMARY], [PRIMARY], [PRIMARY]
, [PRIMARY], [PRIMARY], [PRIMARY]
, [PRIMARY], [PRIMARY], [PRIMARY]
, [PRIMARY]);
¿©±â¿¡¼ ¸¸µç ÇÔ¼ö¸¦ ½ºÅ°¸¶¸¦ ÀÌ¿ëÇÏ¿© ¹°¸®ÀûÀÎ °ø°£¿¡ ¸ÊÇÎÇÏ´Â µ¥ ÀÖ¾î ÇϳªÀÇ ÆÄÀÏ ±×·ì¿¡ ¸ÊÇÎÇϰí ÀÖ´Ù.
CREATE TABLE [Production].[TransactionHistory](
[TransactionID] [int] IDENTITY (1, 1) NOT NULL,
[ProductID] [int] NOT NULL,
[ReferenceOrderID] [int] NOT NULL,
[ReferenceOrderLineNumber] [smallint] NOT NULL ,
[TransactionDate] [datetime] NOT NULL ,
[TransactionType] [nchar](1) NOT NULL,
[Quantity] [int] NOT NULL,
[ActualCost] [money] NOT NULL,
[ModifiedDate] [datetime] NOT NULL
) ON TransactionsPS1 (TransactionDate);
Å×À̺íÀ» »ý¼ºÇÒ ¶§ ¾Õ¿¡¼ ¸¸µç ½ºÅ°¸¶ À§¿¡ ¸¸µé°í ÀÖ´Ù. ´Ù ¸¸µé¾úÀ¸¸é Àß ¸¸µé¾ú´ÂÁö ¿¹Á¦ Äõ¸®¸¦ ½ÇÇàÇØº¸ÀÚ.
SELECT * FROM Production.TransactionHistory
WHERE TransactionDate between '2003-09-01' and '2003-10-31';
-------------------------------------------------------------------
(20494 row(s) affected)
Table 'TransactionHistory'. Scan count 2, logical reads 162, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Å×À̺íÀÌ ÇϳªÀ̹ǷΠÇϳªÀÇ Å×ÀÌºí¿¡¼ µÎ ¹øÀÇ ½ºÄµÀÌ ÀϾ´Ù. ÀÌÁ¦ ½ÇÇà °èȹÀ» º¸ÀÚ.
 |
| <ȸé 2> Å×ÀÌºí ÆÄÆ¼¼Å´×À» ÀÌ¿ëÇÑ ½ÇÇà °èȹ |
½ÇÇà °èȹÀ» º¸¸é ¡®Nested Loops Join¡¯À» ÀÌ¿ëÇÏ¿© ÇØ´ç Å×À̺íÀ» ¡®Index Seek¡¯ÇÏ¿© µ¥ÀÌÅ͸¦ °¡Á®¿À°í ÀÖ´Ù. ÀÌ Äõ¸®¿¡¼´Â µÎ ´Þ Ä¡ÀÇ µ¥ÀÌÅ͸¦ ÀÐÀ¸¹Ç·Î µÎ ¹øÀÇ ½ºÄµÀÌ ÀϾÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
½½¶óÀ̵ù À©µµ¿ì ±¸Çö
ÆÄƼ¼ÇµÈ Å×À̺íÀ» °ü¸®ÇÏ´Ù º¸¸é ¿À·¡µÈ µ¥ÀÌÅÍ´Â °ÅÀÇ »ç¿ëÀ» ÇÏÁö ¾Ê°Ô µÈ´Ù. ¾î¼´Ù ÇÑ ¹ø¾¿ Åë°è ÀÚ·á¿ëÀ¸·Î »ç¿ëÇÏ´Â °æ¿ì°¡ ´ëºÎºÐÀÌ´Ù. ÀÌ·¯ÇÑ µ¥ÀÌÅ͸¦ °è¼Ó °í¼º´ÉÀÇ I/O ÀåÄ¡¿¡ ´ã¾Æ µÎ´Â °ÍÀº ºñÈ¿À²ÀûÀÌ´Ù. µû¶ó¼ ¿À·¡µÈ µ¥ÀÌÅÍ´Â ´õ ÀÌ»óÀÇ Æ®·£Àè¼ÇÀÌ ÀϾÁö ¾ÊÀ¸¹Ç·Î ºñ±³Àû ³·Àº ¼º´ÉÀÇ Àú·ÅÇÑ I/O ÀåÄ¡·Î À̽ÄÇÏ´Â °ÍÀÌ È¿À²ÀûÀÌ´Ù.
ÀÌ·¯ÇÑ °úÁ¤À» ¡®½½¶óÀ̵ù À©µµ¿ì(ÆÄƼ¼Ç ½ºÀ§Äª)¡¯¶ó°í ÇÑ´Ù. ½½¶óÀ̵ù À©µµ¿ìÀÇ ¿ì¸®¸» ¶æÀº ¡®¹Ì´ÝÀÌ⡯ÀÌ´Ù. Áï ¹Ð¾î¼ ¿©´Ý´Â âÀ̶ó´Â ¶æÀε¥, ¿À·¡µÈ µ¥ÀÌÅÍ´Â ¹Ð¾î¼ ³»º¸³»°í ´ë½Å »õ µ¥ÀÌÅ͸¦ ¹Þ¾ÆµéÀδٴ Àǹ̷Πº¸¸é µÉ °ÍÀÌ´Ù.
½½¶óÀ̵ù À©µµ¿ì¸¦ ±¸ÇöÇϴµ¥ ÀÖ¾î ´ë·®ÀÇ µ¥ÀÌÅͰ¡ À̵¿ÇϹǷΠ´À¸± °ÍÀ̶ó°í »ý°¢ ÇÒ ¼ö ÀÖÀ¸³ª, ½ÇÁ¦·Î´Â ¸ÞŸ µ¥ÀÌÅ͸¸ À̵¿ÇϹǷΠ»ó´çÈ÷ ºü¸£°Ô ÀÛ¾÷ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦ ¿ª½Ã SQL ¼¹ö 2005¸¦ ¼³Ä¡ÇÑ ´ÙÀ½ Æú´õ¿¡ °¡¸é ½½¶óÀ̵ù À©µµ¿ì ¿¹Á¦°¡ ÀÖ´Ù.
C:\Program Files\Microsoft SQL Server\90\Tools\Samples\1033\Engine\Administration\SlidingWindow\Scripts
\sliding.sql
À̹ø ¿¹Á¦¿¡¼´Â 2003³âµµ 9¿ùÀÇ µ¥ÀÌÅ͸¦ TransactionHistory Å×ÀÌºí¿¡¼ ¶¼¾î ³»¾î TransactionHistoryArchive Å×À̺í·Î ¿Å±â´Â ÀÛ¾÷ÀÌ´Ù. Ãʱ⠻óÅ´ <±×¸² 2>¿Í °°´Ù.
 |
| <±×¸² 2> Ãʱ⠻óÅ |
TransactionHistory¿¡´Â 12°³ÀÇ ÆÄƼ¼ÇÀÌ ÀÖ°í TransactionHistoryArchive¿¡´Â 2°³ÀÇ ÆÄƼ¼ÇÀÌ ÀÖ´Ù. TransactionHistoryArchive´Â ÀÚÁÖ »ç¿ëÇÏÁö ¾Ê´Â µ¥ÀÌÅ͸¦ ¸ð¾Æ µÎ´Â °÷À̹ǷΠµÎ °³ÀÇ ÆÄƼ¼Ç¸¸À» ¸¸µé¾ú´Ù. ¿©±â¿¡¼ TransactionHistory Å×ÀÌºí¿¡¼ 2004³âµµ 9¿ù µ¥ÀÌÅ͸¦ À§ÇÑ »õ·Î¿î µ¥ÀÌÅ͸¦ À§ÇÑ °ø°£À» È®º¸ÇÏÀÚ.
ALTER PARTITION FUNCTION TransactionRangePF1() SPLIT RANGE ('9/01/2004');
 |
| <±×¸² 3> TransactionHistory¿¡ 2004³âµµ 9¿ù 1ÀÏ·Î ºÐÇÒ |
»õ·Î¿î °ø°£À» È®º¸Çϱâ À§ÇÏ¿© ±âÁ¸ °ø°£À» ºÐÇÒÇÏ¿© ÃÑ 13°³ÀÇ ÆÄƼ¼ÇÀ» ¸¸µé¾ú´Ù. ÀÌÁ¦´Â TransactionHistoryArchive¿¡µµ ¿ª½Ã »õ·Î¿î °ø°£À» È®º¸ÇÏÀÚ.
ALTER PARTITION FUNCTION TransactionArchivePF2() SPLIT RANGE ('10/01/2003');
 |
| <±×¸² 4> TransactionHistoryArchive¿¡ 2003³âµµ 10¿ù 1ÀÏ·Î ºÐÇÒ |
°¢°¢ÀÇ Å×ÀÌºí¿¡ »õ·Î¿î °ø°£À» ÇÒ´çÇÏ¿´À¸´Ï ÀÌÁ¦ ÆÄƼ¼ÇÀ» ¿Å°Ü º¸ÀÚ.
ALTER TABLE [Production].[TransactionHistory] SWITCH PARTITION 1 to [Production].[TransactionHistoryArchive] PARTITION 2;
°¢°¢ÀÇ Å×ÀÌºí¿¡ »õ·Î¿î °ø°£À» ÇÒ´çÇÏ¿´À¸´Ï ÀÌÁ¦ ÆÄƼ¼ÇÀ» ¿Å°Ü º¸ÀÚ.
 |
| <±×¸² 5> TransactionHistoryÀÇ ÆÄƼ¼Ç 1À» TransactionHistoryArchiveÀÇ ÆÄƼ¼Ç 2·Î À̵¿ |
¿Å°åÀ¸¸é ÀÌÁ¦ ±âÁ¸ ÆÄƼ¼ÇÀ» º´ÇÕÇÏ¿© Ãʱ⠻óÅ·Π¸¸µé¾îÁà¾ß ÇÑ´Ù. ¸ÕÀú TransactionHistoryºÎÅÍ º´ÇÕÇÏÀÚ. º´ÇÕÇϱâ Àü¿¡ sys.partition_range_values¶ó´Â Å×À̺íÀ» Á¶È¸ÇÏ¿© ÆÄƼ¼Ç Á¤º¸¸¦ Á¶È¸Çغ¸ÀÚ.
| function_id | boundary_id | parameter_id | value |
| ------------- | ------------- | ------------- | |
| 65536 | 1 | 1 | 2003-10-01 00:00:00.000 |
| 65536 | 2 | 1 | 2003-11-01 00:00:00.000 |
| 65536 | 3 | 1 | 2003-12-01 00:00:00.000 |
| 65536 | 4 | 1 | 2004-01-01 00:00:00.000 |
| 65536 | 5 | 1 | 2004-02-01 00:00:00.000 |
| 65536 | 6 | 1 | 2004-03-01 00:00:00.000 |
| 65536 | 7 | 1 | 2004-05-01 00:00:00.000 |
| 65536 | 8 | 1 | 2004-05-01 00:00:00.000 |
| 65536 | 9 | 1 | 2004-06-01 00:00:00.000 |
| 65536 | 10 | 1 | 2004-07-01 00:00:00.000 |
| 65536 | 11 | 1 | 2004-08-01 00:00:00.000 |
| 65536 | 12 | 1 | 2004-09-01 00:00:00.000 |
| 65536 | 1 | 1 | 2003-09-01 00:00:00.000 |
| 65537 | 2 | 1 | 2003-10-01 00:00:00.000 |
| (14 row(s) affected) |
ÀÌÁ¦±îÁö Á¦´ë·Î ÀÛ¾÷À» Çß´Ù¸é ÃÑ 14°³ÀÇ ÇàÀÌ ÀÖÀ» °ÍÀÌ´Ù. ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ º´ÇÕÀ» ÇÏÀÚ.
ALTER PARTITION FUNCTION TransactionRangePF1() MERGE RANGE ('10/01/2003');
 |
| <±×¸² 6> TransactionHistory¿¡¼ 2003³â 10¿ù 1ÀÏ º´ÇÕ |
º´ÇÕÀ» ÇÑ ÈÄ ´Ù½Ã Å×ÀÌºí ÆÄÆ¼¼Ç Á¤º¸¸¦ º¸ÀÚ.
| function_id | boundary_id | parameter_id | value |
| ------------- | ------------- | ------------- | |
| 65536 | 1 | 1 | 2003-11-01 00:00:00.000 |
| 65536 | 2 | 1 | 2003-12-01 00:00:00.000 |
| 65536 | 3 | 1 | 2004-01-01 00:00:00.000 |
| 65536 | 4 | 1 | 2004-02-01 00:00:00.000 |
| 65536 | 5 | 1 | 2004-03-01 00:00:00.000 |
| 65536 | 6 | 1 | 2004-04-01 00:00:00.000 |
| 65536 | 7 | 1 | 2004-05-01 00:00:00.000 |
| 65536 | 8 | 1 | 2004-06-01 00:00:00.000 |
| 65536 | 9 | 1 | 2004-07-01 00:00:00.000 |
| 65536 | 10 | 1 | 2004-08-01 00:00:00.000 |
| 65536 | 11 | 1 | 2004-09-01 00:00:00.000 |
| 65537 | 1 | 1 | 2003-09-01 00:00:00.000 |
| 65537 | 2 | 1 | 2003-10-01 00:00:00.000 |
| (13 row(s) affected) |
º´ÇÕÀ» ÇßÀ¸¹Ç·Î ÃÑ 13°³ÀÇ ÇàÀÌ »ý°å´Ù. ÀÌÁ¦ TransactionHistoryArchiveµµ º´ÇÕÀ» ÇÏÀÚ.
ALTER PARTITION FUNCTION TransactionArchivePF2() MERGE RANGE ('9/01/2003');
 |
| <±×¸² 7> TransactionHistoryArchive¿¡¼ 2003³â 9¿ù 1ÀÏ º´ÇÕ |
ÀÌ·¸°Ô ÇÔÀ¸·Î½á ½½¶óÀ̵ù À©µµ¿ì ÀÛ¾÷À» ¿Ï·áÇÒ ¼ö ÀÖ´Ù. ÀÛ¾÷ÀÌ °£´ÜÇÏÁö´Â ¾ÊÁö¸¸ ÀÌ·± ÀÏ·ÃÀÇ ÀÛ¾÷µéÀÌ ½ÇÁ¦·Î´Â ¸ÞŸ µ¥ÀÌÅ͸¦ °¡Áö°í ÀÛ¾÷À» Çϱ⠶§¹®¿¡ »ó´çÈ÷ ºü¸£°Ô ¼öÇàµÈ´Ù.
 |
| <±×¸² 8> ½½¶óÀ̵ù À©µµ¿ì ±¸ÇöÀÌ ¿Ï·áµÈ »óÅ |
°£ÆíÇÑ ÀÌ·Â °ü¸®¸¦ À§ÇÑ µ¥ÀÌÅͺ£À̽º ½º³À¼¦
SQL ¼¹ö 2005¿¡¼´Â °£´ÜÇÏ°Ô µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ ¹é¾÷º»À» ¸¸µé ¼ö ÀÖ´Ù. º¸Åë °³¹ßÀÚ°¡ ¾î¶² °£´ÜÇÑ ÀÛ¾÷À» ÇÒ ¶§ ½Ç¼ö¸¦ ÇÒ±îºÁ Æ®·£Àè¼ÇÀ» °É°í ÀÛ¾÷À» Á¾Á¾ ÇÑ´Ù. ±×·¯´Ù°¡ ½Ç¼ö¸¦ ÇÏ¸é ·Ñ¹éÇÏ¸é µÇ±â ¶§¹®ÀÌ´Ù. ±×·±µ¥ ÀÌ·¸°Ô ÀÛ¾÷À» Çϸé Àá±ÝÀÌ °É¸®±â ¶§¹®¿¡ ´Ù¸¥ »ç¿ëÀÚµéÀº ´ë±âÇÏ°í ±â´Ù·Á¾ß ÇÏ´Â ºÒÆíÀÌ ÀÖ´Ù. ÇÏÁö¸¸ ÀÌÁ¦´Â µ¥ÀÌÅͺ£À̽º ½º³À¼¦À» »ç¿ëÇϸé ÇöÀç µ¥ÀÌÅͺ£À̽ºÀÇ ³»¿ëÀ» °£´ÜÇÏ°Ô ¹é¾÷À» ÇÒ ¼ö Àֱ⠶§¹®¿¡ Æ®·£Àè¼ÇÀ» °ÉÁö ¾Ê¾Æµµ µÈ´Ù. ¸¸¾à ½Ç¼ö¸¦ ÇÏ°Ô µÇ¸é °£´ÜÇÏ°Ô º¹±¸¸¦ ÇÒ ¼ö ÀÖ´Ù.
½º³À¼¦Àº Àб⸸ ÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅͺ£À̽ºÀÌ´Ù. ¸¸µé ¶§¿¡´Â ½ÇÁ¦ µ¥ÀÌÅÍÀÇ º¹»çº»À» ¸¸µå´Â °ÍÀÌ ¾Æ´Ï°í ¸ÞŸ µ¥ÀÌÅ͸¸À¸·Î ¸¸µé±â ¶§¹®¿¡ »ó´çÈ÷ ºü¸£°í ÀûÀº ¿ë·®À¸·Î ¸¸µé ¼ö ÀÖ´Ù. ½ÇÁ¦ ±¸ÇöÀ» º¸¸é ¸ÕÀú ½º³À¼¦Àº ÇöÀç µ¥ÀÌÅͺ£À̽º¿Í µ¿ÀÏÇÑ ÀúÀå °ø°£À» ¿¹¾àÇÏ°í ¿øº» µ¥ÀÌÅͺ£À̽º¿¡¼ º¯°æÀÌ ÀϾ¸é ¸ÕÀú ½º³À¼¦ µ¥ÀÌÅͺ£À̽º¿¡ º¹»ç¸¦ ÇÑ ÈÄ ¿øº» µ¥ÀÌÅͺ£À̽º¸¦ º¯°æÇÑ´Ù. À̸¦ º¹»ç-¾²±â(copy-on-write) ±â¼úÀ̶ó°í ºÎ¸¥´Ù.
 |
| <±×¸² 9> º¹»ç-¾²±â ±â¼ú |
<±×¸² 9>¸¦ º¸¸é ¿øº» µ¥ÀÌÅͺ£À̽ºÀÇ 2¶ó´Â °ªÀÌ 10À¸·Î ¹Ù²ð ¶§ ¸ÕÀú 2¶ó´Â °ªÀ» ½º³À¼¦ µ¥ÀÌÅͺ£À̽º¿¡ º¹»ç¸¦ Çϰí ÀÚ±â ÀÚ½ÅÀÇ °ªÀ» 10À¸·Î ¹Ù²Ù°í ÀÖ´Ù. ½º³À¼¦ µ¥ÀÌÅͺ£À̽º´Â °á±¹ ¿øº» µ¥ÀÌÅͺ£À̽º¿¡¼ ¹Ù²î±â ÀüÀÇ »óÅ °ª¸¸ °¡Áö°í ÀÖ°í, ³ª¸ÓÁö´Â ¿øº» µ¥ÀÌÅͺ£À̽º¸¦ ÂüÁ¶ÇÑ´Ù. ±×·¡¼ »ý¼º ½Ã°£ÀÌ ºü¸£°í °ø°£µµ Àû°Ô Â÷ÁöÇÏ´Â °ÍÀÌ´Ù. ±×·³ Á÷Á¢ ½Ç½ÀÀ» ÇØº¸ÀÚ.
CREATE DATABASE Test;
USE Test;
CREATE TABLE Dummy
(
Data int
);
INSERT INTO Dummy VALUES (1);
INSERT INTO Dummy VALUES (2);
INSERT INTO Dummy VALUES (3);
INSERT INTO Dummy VALUES (4);
½º³À¼¦ »ý¼º
CREATE DATABASE Test_01 ON
(
NAME = Test,
FILENAME = 'c:\program files\microsoft sql server\mssql.1\mssql\data\Test_01.ss'
)
AS SNAPSHOT OF Test;
Test¶ó´Â µ¥ÀÌÅͺ£À̽º¸¦ ¸¸µé°í Dummy¶ó´Â Å×À̺íÀ» ¸¸µé¾î¼ 1,2,34¶ó´Â °ªÀ» ³Ö°í Test_01À̶ó´Â Test µ¥ÀÌÅͺ£À̽ºÀÇ ½º³À¼¦À» ¸¸µé¾ú´Ù. ¾Õ¿¡¼ ¸¸µç Test_01.ss ¶ó´Â ÆÄÀÏÀÇ ½ÇÁ¦ Å©±â¸¦ º¸¸é ´ÙÀ½°ú °°´Ù.
 |
| <ȸé 3> Test_01.ssÀÇ ÆÄÀÏ Å©±â |
Å©±â´Â 1.56MB¸¦ ÇÒ´çÇßÁö¸¸ ½ÇÁ¦ »ç¿ëÇÏ´Â Å©±â´Â 128KB¹Û¿¡ ¾È µÈ´Ù´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌÁ¦ Test Å×ÀÌºí¿¡¼ 2¶ó´Â °ªÀ» 10À¸·Î ¹Ù²Ù°í ½º³À¼¦¿¡¼ Á¦´ë·Î °ªÀ» º¸Á¸Çϰí ÀÖ´ÂÁö È®ÀÎÇØº¸ÀÚ.
UPDATE Dummy
SET Data = 10
WHERE Data = 2;
SELECT * FROM dummy;
USE Test_01;
SELECT * FROM dummy;
-----------------------
Data
-----------------------
1
10
3
4
(4 row(s) affected)
Data
-----------------------
1
2
3
4
(4 row(s) affected)
½º³À¼¦ Å×À̺íÀÌ ÀÌÀü °ªÀ» Àß °£Á÷Çϰí ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´Ù½Ã Test_01.ssÀÇ ÆÄÀÏ Å©±â¸¦ º¸¸é 384KB·Î ±× Å©±â°¡ Ä¿Á® ÀÖ´Â °ÍÀ» È®ÀÎÇØ º¼ ¼ö ÀÖ´Ù. Áï 2¶ó´Â °ªÀ» ÀúÀåÇϹǷΠ±×¸¸ÅÀÇ °ø°£ÀÌ ´Ã¾î³ °ÍÀÌ´Ù. À̹ø¿¡´Â ¿øº» µ¥ÀÌÅͺ£À̽º¸¦ º¹±¸Çغ¸ÀÚ.
USE master;
RESTORE DATABASE Test
FROM DATABASE_SNAPSHOT = 'Test_01';
USE Test;
SELECT * FROM dummy;
----------------------
Data
----------------------
1
2
3
4
(4 row(s) affected)
Á¦´ë·Î º¹±¸µÈ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
¸ØÃßÁö ¾Ê´Â ½Ã½ºÅÛÀ» À§ÇÑ DB ¹Ì·¯¸µ
SQL ¼¹ö 2000¿¡´Â ¼¹ö°¡ µµÁß¿¡ ´Ù¿îµÇ´õ¶óµµ ´Ù¸¥ ¼¹ö°¡ ´ë½Å ÀÛµ¿ÇÏ°Ô ÇÏ´Â ±â´ÉÀ¸·Î Ŭ·¯½ºÅ͸µÀ» ÀÌ¿ëÇÏ¿´´Ù. ±×·¯³ª Ŭ·¯½ºÅ͸µÀ» ±¸ÃàÇϱâ À§Çؼ´Â °øÀ¯ µð½ºÅ©¿Í °°Àº º°µµÀÇ Çϵå¿þ¾î°¡ ÇÊ¿äÇß´Ù. ¶ÇÇÑ µð½ºÅ© ÀÚü´Â °øÀ¯¸¦ ÇϹǷΠµð½ºÅ©°¡ ±úÁö´Â °æ¿ì¿¡´Â ÁÁÀº ÇØ°áÃ¥ÀÌ ¾Æ´Ï¾ú´Ù. ±×¸®°í ±¤ÄÉÀ̺í·Î ¼·Î ¿¬°áÇØ¾ß ÇϹǷΠ100¸¶ÀÏÀ̶ó´Â °Å¸®ÀÇ Á¦Çѵµ ÀÖ¾ú´Ù. SQL ¼¹ö 2005¿¡¼´Â ¶Ç ´Ù¸¥ ÇØ°áÃ¥À¸·Î ¹Ì·¯¸µÀ̶ó´Â °ÍÀ» Áö¿øÇÑ´Ù. ¹Ì·¯¸µÀº µÎ ´ëÀÇ SQL ¼¹ö¸¦ ¿î¿µÇÏ¸é¼ ¼·Î ·Î±× Á¤º¸¸¦ ÁÖ°í¹ÞÀ¸¸é¼ µ¿ÀÏÇÑ µ¥ÀÌÅ͸¦ À¯ÁöÇÑ´Ù.
µû¶ó¼ º°µµÀÇ °øÀ¯ µð½ºÅ©°¡ ÇÊ¿ä ¾øÀ¸¸ç, µð½ºÅ© ÀÚü°¡ ±úÁö´õ¶óµµ ¼·Î µð½ºÅ© º¹»çº»À» À¯ÁöÇϱ⠶§¹®¿¡ ¹®Á¦°¡ ¾È µÈ´Ù. ¶ÇÇÑ º°µµÀÇ ±¤ÄÉÀ̺íÀÌ ¾Æ´Ñ ÀÏ¹Ý ³×Æ®¿öÅ© ¼±À» »ç¿ëÇϹǷΠ°Å¸® Á¦Çѵµ ¾ø´Ù. ¿©±â¿¡ Ŭ·¯½ºÅ͸µÀº ¼¹ö¿¡ ¹®Á¦°¡ »ý°Ü ±³Ã¼µÇ´Âµ¥ ÀÖ¾î 30ÃÊ ÀÌ»óÀÇ ½Ã°£ÀÌ °É¸®Áö¸¸ ¹Ì·¯¸µÀº 2¢¦3ÃÊ¸é ¼¹ö°¡ ±³Ã¼µÇ¾î ÀÚµ¿À¸·Î ÀÛµ¿ÇÑ´Ù.
±×·¸´Ù°í ¹Ì·¯¸µÀÌ Å¬·¯½ºÅ͸µÀÇ ´ë¾ÈÀº µÉ ¼ö ¾ø´Ù. ¼·Î Àå´ÜÁ¡ÀÌ Àֱ⠶§¹®ÀÌ´Ù. ¹Ì·¯¸µÀº ½Ã½ºÅÛ µ¥ÀÌÅͺ£À̽º¿¡´Â »ç¿ëÇÏÁö ¸øÇÑ´Ù. ´ÜÁö »ç¿ëÀÚ DB¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. µû¶ó¼ Ŭ·¯½ºÅ͸µÀº Àüü ½Ã½ºÅÛÀ» º¸È£ÇÏ´Â ¿ëµµ·Î »ç¿ëÇÏ°í ¹Ì·¯¸µÀº Áß¿äÇÑ »ç¿ëÀÚ µ¥ÀÌÅͺ£À̽º¸¦ º¸È£ÇÏ´Â ¿ëµµ·Î »ç¿ëÇÏ´Â °ÍÀÌ Àû´çÇÒ °ÍÀÌ´Ù. <±×¸² 10>Àº ¹Ì·¯¸µÀÇ µ¿ÀÛ ¹æ¹ýÀÌ´Ù.
 |
| <±×¸² 10> ¹Ì·¯¸µ µ¿ÀÛ ¹æ¹ý |
¹Ì·¯¸µÀº µ¥ÀÌÅÍ ÀÚü¸¦ ¼·Î Àü¼ÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ·Î±×¸¸À» ¼·Î Àü´ÞÇÑ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀ¸·ÎºÎÅÍ µ¥ÀÌÅÍ ¼öÁ¤ ÀÛ¾÷ÀÌ µé¾î¿À¸é À̸¦ ¸ÕÀú ·Î±×¿¡ ±â·ÏÇÑ ´ÙÀ½ ¹Ì·¯ ¼¹ö¿¡°Ôµµ ±× ·Î±× Á¤º¸¸¦ Àü´ÞÇÏ¿© ¹Ì·¯ µ¥ÀÌÅͺ£À̽º¿¡µµ µ¿ÀÏ Á¤º¸¸¦ À¯ÁöÇϵµ·Ï ÇØÁØ´Ù. ÀÌ·¯ÇÑ µ¿ÀÛÀº °¨½Ã ¼¹ö(witness server)°¡ °è¼Ó °¨½ÃÇϰí ÀÖ´Ù°¡ ¸¸¾à ÁÖ ¼¹ö°¡ ´Ù¿îÀÌ µÇ¸é ¹Ù·Î ¹Ì·¯ ¼¹ö¸¦ ÁÖ ¼¹ö·Î ¹Ù²Ù¾î µ¿ÀÛÇÏ°Ô ÇÑ´Ù. ±×µ¿¾È ¾ÖÇø®ÄÉÀ̼ÇÀº º°µµÀÇ ÇÁ·Î±×·¥ ¼öÁ¤ ¾øÀ̵µ ÀÚµ¿À¸·Î ¹Ì·¯ ¼¹ö¸¦ ÁÖ ¼¹ö·Î °£ÁÖÇÏ¿© Á¢¼ÓÀ» À¯ÁöÇÑ´Ù. ±×·³ Á÷Á¢ ½Ç½ÀÀ» ÇØº¸ÀÚ.
¿ø·¡´Â Á¦´ë·Î µÈ ½Ç½ÀÀ» À§Çؼ´Â ÁÖ ¼¹ö(Principal Server), ¹Ì·¯ ¼¹ö(Mirror Server), °¨½Ã ¼¹ö(Witness Server) ÀÌ·¸°Ô 3´ë°¡ ÀÖ¾î¾ß¸¸ ÇÏÁö¸¸, °£´ÜÇÑ ½Ç½ÀÀ» À§ÇÏ¿© ÇÑ ¼¹ö¿¡ ÀÌ ¼¼ °³ÀÇ ¼¹ö¸¦ ÀνºÅϽº À̸§¸¸ ´Þ¸®ÇÏ¿© ¼³Ä¡Çϸé Å×½ºÆ®°¡ °¡´ÉÇÏ´Ù. 3°³ÀÇ ¼¹ö¸¦ ¸ðµÎ ¼³Ä¡ÇÑ ÈÄ ´ÙÀ½ °°ÀÌ Á¾´ÜÁ¡À» ¸¸µéÀÚ.
CREATE ENDPOINT EndPoint_Principal
STATE=STARTED
AS TCP (LISTENER_PORT=5055)
FOR DATABASE_MIRRORING (ROLE=ALL);
Á¾´ÜÁ¡Àº ¿ÜºÎ¿¡¼ ÀÌ ¼¹ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¹®À» ¿¾îÁÖ´Â ÀǹÌÀÌ´Ù. TCP ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© 5055Æ÷Æ®¸¦ ¿¾î ÁÖ¾ú´Ù. ¸¶Âù°¡Áö·Î ´Ù¸¥ ¹Ì·¯ ¼¹ö¿Í °¨½Ã ¼¹öµµ Á¾´ÜÁ¡À» ¸¸µç´Ù. ´Ü ÀÌ ¶§ ÇÑ ¼¹ö¿¡¼ Å×½ºÆ®¸¦ ÇÏ´Â °ÍÀ̹ǷΠ¼·Î ´Ù¸¥ Æ÷Æ® ¹øÈ£¸¦ ºÎ¿©ÇØÁà¾ß ÇÑ´Ù. ¹Ì·¯ ¼¹ö´Â 5056, °¨½Ã ¼¹ö´Â 5057 ÀÌ·± ½ÄÀ¸·Î ´Ù¸¥ Æ÷Æ® ¹øÈ£¸¦ ºÎ¿©ÇÏÀÚ. ±×·± ´ÙÀ½ ¾Õ¼ ½º³À¼¦¿¡¼ ½Ç½ÀÇÑ Test DB¸¦ ÁÖ ¼¹ö¿¡¼ ¹é¾÷ÇÏ¿© ¹Ì·¯ ¼¹ö¿¡ º¹±¸¸¦ ÇÑ´Ù. µû¶ó¼ ÁÖ ¼¹ö¿Í ¹Ì·¯ ¼¹ö´Â µ¿ÀÏÇÑ Test DB¸¦ °¡Áö°Ô µÈ´Ù. ±×·± ´ÙÀ½ ¹Ì·¯¸µÀ» À§ÇÑ ÆÄÆ®³Ê¸¦ ¾Æ·¡¿Í °°ÀÌ ¹Ì·¯ ¼¹ö¿¡¼ºÎÅÍ ÀÛ¾÷À» ÇÑ´Ù.
ALTER DATABASE [Test] SET PARTNER = 'TCP://WIN2003-SQLServer2005:5055'
¸¶Âù°¡Áö·Î ÁÖ ¼¹ö¿¡¼´Â ¹Ì·¯ ¼¹ö¿Í °¨½Ã ¼¹ö¸¦ ¿¬°áÇÑ´Ù.
-- mirrored ¼¹ö ÁöÁ¤
ALTER DATABASE [Test] SET PARTNER = 'TCP://WIN2003-SQLServer2005:5056'
-- witness ¼¹ö ÁöÁ¤
ALTER DATABASE [Test] SET WITNESS = 'TCP://WIN2003-SQLServer2005:5057'
ÀÌÁ¦ ÁÖ ¼¹ö¿¡¼ ´ÙÀ½°ú °°Àº µ¥ÀÌÅÍ ÀÛ¾÷À» ÇØº¸ÀÚ.
INSERT INTO Dummy VALUES (11);
INSERT INTO Dummy VALUES (12);
ÀÌÁ¦ ¹Ì·¯ ¼¹ö¿¡¼ µ¿ÀÏÇÑ µ¥ÀÌÅͰ¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇØ º¸ÀÚ. ÀÌ ¶§ ¹Ì·¯ ¼¹ö´Â Ç×»ó Àбâ Àü¿ëÀÇ º¹±¸ ¸ðµå·Î µ¿ÀÛÀ» Çϱ⠶§¹®¿¡ Á¢±ÙÀ» ÇÒ ¼ö°¡ ¾ø´Ù. Á¢±ÙÀ» ÇÏ¸é ´ÙÀ½°ú °°Àº ¿¡·¯ ¸Þ½ÃÁö°¡ ³ª¿Â´Ù.
Database Test cannot be opened - it is acting as a mirror database.
µû¶ó¼ ¾Õ¼ ½Ç½ÀÇÑ ½º³À¼¦À» ÀÌ¿ëÇÏ¿© Á¢±ÙÀ» ÇØ¾ß ÇÑ´Ù. ¹Ì·¯ ¼¹öÀÇ ½º³À¼¦À» ¸¸µé°í Dummy Å×À̺íÀ» Á¶È¸ÇØ º¸ÀÚ.
SELECT * FROM dummy;
-----------
1
2
3
4
11
12
°ªÀÌ Á¦´ë·Î µé¾î°¡ ÀÖ´Â °ÍÀ» È®ÀÎÇØ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌÁ¦ ÁÖ ¼¹ö¸¦ ÇÑ ¹ø ´Ù¿î½ÃÄÑ º¸ÀÚ. SQL Computer Manager¿¡¼ ÁÖ ¼¹öÀÇ µ¿ÀÛÀ» ¸ØÃá´Ù. ±×·¯¸é ÀÚµ¿À¸·Î ¹Ì·¯ ¼¹ö°¡ ÁÖ ¼¹ö°¡ µÇ°í ±âÁ¸ÀÇ ÁÖ ¼¹ö´Â ¹Ì·¯ ¼¹ö·Î ¼·Î ½ºÀ§Ä¡°¡ µÈ´Ù. »õ·Î¿î ÁÖ ¼¹ö¿¡¼ Dummy Å×À̺íÀ» Á¶È¸ÇØ º¸ÀÚ. ÀÌÀü±îÁö´Â ½º³À¼¦ ¾øÀÌ´Â Á¶È¸°¡ ¾È µÇ´ø °ÍÀÌ ÀÌÁ¦´Â Àß µÉ °ÍÀÌ´Ù.
Á¤½Ä SQL ¼¹ö 2005¸¦ ±â´Ù¸®¸ç
Áö³ 4ȸ µ¿¾È SQL ¼¹ö 2005ÀÇ »õ·Î¿î ¸ð½ÀÀ» »ìÆìº¸¾Ò´Ù. Áö±Ý±îÁö´Â º£Å¸2¸¦ ±âÁ¸À¸·Î »ìÆìº¸¾Ò°í ¾ÕÀ¸·Î´Â º£Å¸3µµ ³ª¿Í¾ß Çϰí Á¤½Ä¹öÀüµµ ³ª¿Í¾ß ÇÑ´Ù. ¾ÕÀ¸·Î »õ·Î¿î ¹öÀüÀÌ ³ª¿À¸é¼ ¶Ç ¾î¶»°Ô ¹Ù²ðÁö´Â ¸ð¸£°Ú´Ù. ÇÏÁö¸¸ º£Å¸2 Á¤µµ¸é ¾î´À Á¤µµ SQL ¼¹ö 2005¿¡¼ ±¸ÇöÇÏ·Á´Â ÇÙ½É ±â´ÉÀº ´ëºÎºÐ µé¾î ÀÖ´Ù°í ºÁµµ µÉ °ÍÀÌ´Ù.
±× ÇÙ½É ±â´ÉÀ» ¿ä¾àÇØ º¸¸é °³¹ßÀÚÀÇ °üÁ¡¿¡¼´Â ´å³Ý°úÀÇ ÅëÇÔÀÌ µÉ ¼ö ÀÖÀ» °ÍÀ̰í, °ü¸®ÀÚÀÇ °üÁ¡¿¡¼´Â Çâ»óµÈ °¡¿ë¼º(availability)À̶ó°í ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌÁ¦ ¿Ã ÇϹݱ⿡ ³ª¿Ã Á¤½Ä SQL ¼¹ö 2005¸¦ ±â´Ù¸®¸é¼ ¶Ç ´Ù¸¥ Ç×ÇØ¸¦ ÁغñÇÏ·Á°í ÇÑ´Ù.@
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.