ÃֽŠ°Ô½Ã±Û(DB)
2022.12.26 / 13:21

mysql(mariadb 5.5)¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ oracle(oracle 12c)·Î migration

XMaLL°ü¸®ÀÚ
Ãßõ ¼ö 108

mysql¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ oracle·Î migrationÇϱâ À§Çؼ­´Â ÀÌ¹Ì Ãâ½ÃµÇ¾î ÀÖ´Â ÅøÀ» »ç¿ëÇÏ´Â °ÍÀÌ °¡Àå ºü¸£°í È¿À²ÀûÀÌ´Ù.

±×·¯³ª, ¼±ÃµÀûÀ¸·Î ÀÌ·¯ÇÑ Åø ¶Ç´Â À¯Æ¿¸®Æ¼¿¡ °ÅºÎ°¨ÀÌ Àְųª Æ®¶óÀ̾ó ¹öÀüÀÇ ¼³Ä¡°¡ ¹ø°Å·Ó°Å³ª µÎ·Á¿òÀÌ ´À²¸Áö´Â °æ¿ì Á÷Á¢ µ¥ÀÌÅ͸¦ ¿Å±â´Â ÀÛ¾÷À» ¼±ÅÃÇÑ´Ù.

Á÷Á¢ µ¥ÀÌÅ͸¦ ¿Å±â´Â ¹æ¹ýÀº 1. phytonÀ̳ª php µîÀ¸·Î ÇÁ·Î±×·¥À» Á÷Á¢ Â¥¼­ mysql¿¡¼­ Àо oracle·Î insert ÇÏ´Â ¹æ¹ý°ú 2. mysqldump·Î µ¥ÀÌÅ͸¦ ´Ù¿î·Îµå ¹Þ¾Æ oracle¿¡¼­ insert¸¦ ÇÏ´Â ¹æ¹ýÀÌ ÀÖ°Ú´Ù.

1. phyton, php µîÀ¸·Î Á÷Á¢ ÇÁ·Î±×·¥À» Â¥´Â ¹æ¹ý

ÀڱⰡ Àß ¾Æ´Â ¹æ¹ýÀ¸·Î ±×³É ÇÁ·Î±×·¥À» Â¥¼­ µ¹¸°´Ù.

ÀÌ ¶§ ÁÖÀÇÇÒ Á¡ÀÌ Àִµ¥ DDL, Áï oracleÀÇ tablespace³ª table, view, index, primary key Á¤ÀÇ µîÀº mysql°ú Â÷ÀÌ°¡ Àֱ⠶§¹®¿¡ ¹Ì¸® º°µµÀÇ ½ºÅ©¸³Æ®·Î ´Ù ¸¸µé¾î µÎ¾î¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ÇÁ·Î±×·¥À¸·Î tablespace, table, index µîµîÀ» ¸¸µé¾îÁÖ´Â ÇÁ·Î±×·¥À» Á÷Á¢ ´Ù ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

µ¥ÀÌÅÍÀÇ insert ½Ã¿¡µµ ÇÑ±Û º¯È¯¹®Á¦, ÀÚ¸´¼ö ¹®Á¦, NULL ¹®Á¦ µîÀ» »ý°¢ÇÏ°í ó¸®ÇؾßÇÑ´Ù. mysql¿¡¼­´Â ¡±À» NULL·Î ÀνÄÇÏÁö ¾ÊÁö¸¸ oracle¿¡¼­´Â NULL·Î ÀνÄÇÑ´Ù.

2. mysqldump¸¦ »ç¿ëÇÏ´Â ¹æ¹ý

mysqldump -p -u userid database tablename > table1.sql  µîÀÇ ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.

ÀÌ ¶§ mysqldump·Î dumpµÈ ³»¿ëÀº

INSERT INTO `tablename` VALUES (value1, value2, value3, .. ), (value1, value2, value3, ... ), (value1, value2, value3, ... ), ...

¿Í °°ÀÌ µÇ¾î ÀÖ´Ù.

À̸¦ º¯È¯ÇÏ¿©

INSERT INTO `tablename` VALUES (value1, value2, value3, ... ) ;
INSERT INTO `tablename` VALUES (value1, value2, value3,... );
...

¿Í °°Àº Çü½ÄÀ¸·Î º¯È¯ÇÏ´Â °ÍÀº ±ÍÂúÀº ÀÛ¾÷À̹ǷΠ´ÙÀ½ÀÇ ¿É¼ÇÀ» ÁØ´Ù.

mysqldump --skip-opt --quick -p -u userid database tablename > table1.sql .

skip-opt ¿É¼Ç ( –skip-opt )´Â –add-drop-table, –add-locks, –create-options, –disable-keys, –extended-insert, –lock-tables, –quick, –set-charset µîÀÇ ¿É¼ÇÀ» Ãë¼Ò½ÃÅ°´Â ¿É¼ÇÀ¸·Î ±× Áß extended-insert ¿É¼ÇÀ» ƯÈ÷ disable ½ÃÅ´À¸·Î ½á INSERT ¹®ÀåÀÌ °³º° ¹®Àå(ÇÑÁÙ¾¿)À¸·Î »ý¼ºµÇµµ·Ï ÇÏ°í drop-table ¹®Àå°ú create table ¹®ÀåÀ» Æ÷ÇÔ½ÃÅ°Áö ¾Êµµ·Ï ÇÑ´Ù. (½ÇÁ¦·Î´Â °è¼Ó create table ¹®ÀåÀÌ Æ÷ÇԵȴÙ)

±×¸®°í –quick ¿É¼ÇÀº ¹öÆÛ¸¦ ÇÏÁö ¾Ê°í ¹Ù·Î disk¿¡ ¾²°Ô ÇÔÀ¸·Î½á ´ë¿ë·® Å×À̺íÀÇ °æ¿ì ¸Þ¸ð¸® ¿À¹öÇ÷ο찡 ¹ß»ýÇÏ´Â °ÍÀ» ¸·¾ÆÁØ´Ù.

±×·¸°Ô »ý¼ºµÈ table1.sqlÀ» oracle sqlplus¿¡¼­ @ ¸í·ÉÀ¸·Î ½ÇÇà½ÃÄÑ ÁÖ¸é Å×ÀÌºí ¸í¿¡ `table_name`°ú °°Àº ` ¹®ÀÚ°¡ Æ÷ÇԵǾî À־ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.

±×·¡¼­

sed -i 's/`//g' table1.sql

¸í·ÉÀ¸·Î `¹®ÀÚ¸¦ ´Ù Á¦°ÅÇØ ÁØ ´ÙÀ½ sqlplus¿¡¼­ @·Î ½ÇÇà½ÃÄÑ ÁØ´Ù.

 

sqlplus·Î oracle¿¡ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÒ ¶§ & ¹®ÀÚ´Â oracleÀÇ ¿¹¾à¾î·Î º¯¼ö¸¦ ¼±¾ðÇÏ´Â ¿¹¾à¾îÀÌ´Ù.

¸¸¾à µ¥ÀÌÅÍ ³»¿¡ & ¹®ÀÚ°¡ Æ÷ÇԵǾî ÀÖ´Ù¸é (¿¹¸¦ µé¾î ¡®School & Campus ¿Í °°ÀÌ ) insert¸¦ ÇÏ´Ù°¡ °©Àڱ⠺¯¼ö°ªÀ» ÀÔ·ÂÀ» ¹Þ±â À§ÇÑ ÇÁ·ÒÇÁÆ® »óÅ°¡ µÇ¾î ¹ö¸°´Ù.

ÀÌ·± »óŸ¦ ¹æÁöÇϱâ À§Çؼ­´Â table1.sql ÆÄÀÏ Ã¹ ¸Ó¸®¿¡

SET DEFINE OFF; 
SET AUTOCOMMIT 1000;

¸¦ Ãß°¡ÇØ ÁÖ¾î¾ß ÇÑ´Ù.

SET AUTOCOMMIT 1000;Àº 1000 line ¸¶´Ù commitÀ» ÇØ ÁÖµµ·Ï ÇÑ´Ù. ¸¸¾à AUTOCOMMITÀÌ ¾ÈµÇ¸é ¸ðµç INSERT ¹®Àº rollback °¡´ÉÇÑ »óÅ·Πundo tablespace¿¡ ÀúÀåµÇ°í ¼Óµµ°¡ Á¡Á¡ ´À·ÁÁø´Ù.

ÇÑ±Û ¹®Á¦

µ¥ÀÌÅÍ ÀÌÀü½Ã ÇÑ±Û ¹®Á¦´Â ¿©·¯¸ð·Î °ñÄ¡¸¦ ½âÈ÷´Â ÀÏÀÌ´Ù. ƯÈ÷ mysqlÀ» ÆÐÅ°Áö·Î ¼³Ä¡ÇÏ°í ±×³É ¾²´Â °æ¿ì tableÀÇ ¹®ÀÚ¼ÂÀ» latin1À¸·Î ±×³É µÐ °æ¿ì default-char-setÀ» latin1À¸·Î ÁöÁ¤ÇØ¾ß ÇѱÛÀÌ Á¤»óÀûÀ¸·Î ÃßÃâµÇ°í oracle ÇÑ±Û ÀԷµµ ´Ù¾çÇÑ ÆĶó¹ÌÅÍ( LANG, NLS_LANG, NLS_CHARACTER µîµî)¸¦ ¼³Á¤ÇØ¾ß ÇϹǷΠÅ×½ºÆ®¸¦ ÃæºÐÈ÷ ÇØ º¸°í migrationÇØ¾ß ÇÒ °ÍÀÌ´Ù.