대용량 테이블 몇개를 다른 환경으로 옴겨서 테스트 해야 하는 일이 생겼다.
사내 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하면 끝~!
'프로그래밍_Programing > Linux' 카테고리의 다른 글
문자가 포함된 파일 찾기 (0) | 2014.10.10 |
---|---|
특정 날짜 '이전' 파일 삭제 (0) | 2014.10.09 |
Unix/Linux 디스크 용량 확인 (df/du) (0) | 2014.10.09 |
스왑 메모리(swap memory) 를 사용 중인 프로세스 확인 (0) | 2014.09.30 |
Apache에 Basic인증 걸기 (0) | 2014.06.03 |