프로그래밍_Programing/Linux

SQL select로 Insert문 자동 생성하기

NineTIN 2017. 7. 27. 13:48

대용량 테이블 몇개 다른 환경으로 옴겨서 테스트 해야 하는 일이 생겼다.

사내 DB팀을 찾아가니 Batch 돌고 있어서 덤프는 없고, Export 지금은 안된단다

'그럼 어쩔 없지 ' 하고 마냥 수도 없는 노릇...


뭔가 좋은 방법 없을까 하다가 쿼리 검색 결과를 CSV로 저장 하는 방법을 알아냈다.

예를들어 Oracle 기준으로 아래와 같이 결과를 spool하면 지정한 경로에 csv파일로 만들어 준다.


SQL> set echo off

SQL> set linesize 1000

SQL> set pagesize 0


SQL> set trimspool on


SQL> set feedback off


SQL> set colsep ','


SQL> spool /home/ninetin/emp.csv


SQL> select * from emp;


E01,D01,성1  ,명1  , 10


E02,D01,성2  ,명2  , 50


E03,D02,성3  ,명3  , 100


SQL> spool off



이제 이걸가지고 Excel에 Import 한 다음

콤마',' 별로 Insert문으로 만들어 주면  해피엔딩~!! 집에 빨리 갈 수 있어! ㅎ

.

.

.

.

.

....는 일이 느는 짓이니 집에 갈 수 없다. -_-;

내가 하려는건 데이터 건수  몇천만건이 넘어가는 대용량이다.

손으로는 불가능 하거니와 간단하게 코딩으로 할 수도 있지만


이왕이면 한번에! 간단하게! 할 수 있는 방법을 생각해보았고

서버에 JDK가 설치되어 있지 않아서

팔자에도 없는 PHP로 다음과 같은 스크립트를 만들었다.



https://github.com/NineTIN/insertSQLGen/blob/master/insertSQLGen.php


단, 다음과 같은 조건이 필요하다


1.테이블의 전체 건수를 설정할 필요가 있다.

2. 데이터를 조회할 테이블을 설정할 필요가 있다.

3. 시간이 너무 오래 걸리면 나눠서 할 필요가 있다.


vim으로 작성이 완료되면 서버에서


php test.php > insert_table.sql


이라고 치면 깔끔하게 insert문을 생성 할 수 있다!.

남은건 insert_table.sql을 Oracle에서 insert하면 끝~!