oracle > mysql migration(load data)

2019-12-10

2016년에 작업했던 기록 저장용
oracle > mysql 과 같이 이기종간 마이그레이션은 지원하는 몇가지 툴이 있는것으로 알고있다.
사실 아는건 이것 뿐이지만…
test를 해보니까 생각보다 너무느렸다.
서비스하는 회사에서 보통 주어지는 시간은 6시간 남짓이다. (이것도 내경험상 00시 ~ 06시)

예전에 oracle DBA로 일했었는데.
그 때 동기종 migration는 꽤 자주 했다.
물론 거의 대부분 export / import를 이용해서 했는데.
sqlldr을 이용해서 해봤는데 속도가 괜찮아서 mysql 에 동일한 명령어가 있는지 찾아봤다.

mysql LOAD DATA 를 사용하기로 했다.

LOAD DATA

https://dev.mysql.com/doc/refman/8.0/en/load-data.html

Oracle에서의 작업

LOAD DATA는 특정 구분자로 되어있는 file을 insert를 반복하는 작업이다.
그러기 위해선 Table을 먼저 만들어야 했다.

Table 생성

쿼리생성

생성한 쿼리로 데이터 추출

1
2
3
4
5
SQL> set line 200
SQL> set pagesize 0
SQL> spool treserve.txt
SQL> select column_a||'|'||column_b||'|'||column_c||'|'||...
from table_name;

추출된 데이터 전송

scp를 통해서 전송했었다.
참고로 나는 IDC경로가 달라서 로컬에 받은 후 이관하려는 서버로 scp전송했다.

mysql에서의 작업

위 oracle 에서의 작업에서 table 생성 스크립트로 mysql에 table 생성이 되어있어야한다.

Character Set 변경

테스트 해보니 한글이 깨지는 경우가 있어서 변경 해줘야 하는 것 같다.

1
iconv -c -f euc-kr -t utf-8 test.txt > test-utf8.txt

데이터 import

1
2
3
4
5
6
mysql>use theater;

mysql> LOAD DATA LOCAL INFILE '/oradata/migration/test_utf8.txt'
INTO TABLE table_name
FIELDS TERMINATED BY '|'
IGNORE 1 LINES;