2008년 1월 17일 목요일

DB 테이블 복사 유틸

간단하게 어떤 DB에 있는 테이블 내용을 다른 DB에 있는 테이블로 그대로 복사하는 유틸입니다.

일단은 오라클만 되게 만들었는데, 테이블의 스키마, 데이터타입, 컬럼길이만 맞는다면 다른 DB도 가능할 것 같네요. 아직 미확인 ^^;

컴파일한 클래스파일과 실행스크립트를 첨부할까 하다가, 간단히 이클립스에서 돌리시라고 그냥 소스를 올립니다.

뭐, 오류 생기면 알아서 고쳐 쓰시라는 의미도 되겠네요. 일단 이건 잘 돌아갔던 소스입니다.

정 못 고치시겠으면 저한테 메일이나 쪽지 남겨 주시면 해결해 드리겠습니다. 이건 유료일지도.. ㅋㅋ

 

 

장점

 

1. 데이터 내용에 작은따옴표(')가 있어도 옮길 수 있다.

   어떤 방법이든 export 받아서 insert문 만들면 작은따옴표 때문에 안 되더군요. 제가 아는 한도 내에서는... ^^

   그런데, 이건 JDBC 방식에 PreparedStatement로 처리해서 insert문을 안 만드니까 문제가 없어요.

   -> 이건 방법이 있었네요. ^^; 작은따옴표를 연속 2개 사용하면 하나인 걸로 인식해서 DB에 들어가네요.

       예를 들어, sometable 테이블의 somecol 컬럼에 123'456 이라는 값을 넣으려면 아래와 같이 하면 돼요.

       insert into sometable(somecol) values ('123''456');

 

2. LONG 타입도 옮길 수 있다.

   LONG 타입은 덤프 뜰 때 안 된다고 하더군요. 이것도 역시 그냥 들은 내용 ^^

   이 프로그램엔 LONG 타입도 옮길 수 있도록 처리해 놨습니다.

   INTEGER와 LONG 타입 외에는 모두 STRING으로 처리하게 만들었으니까 혹시 에러나면 다른 타입 처리코드를 추가해서 사용하세요.

 

3. DB연결정보만 알면 빠르게 옮길 수 있다.

   아래에 설명할 세팅정보만 넣고 실행하면 export, import 과정없이 즉석에서 옮길 수 있어요.

 

 

환경세팅

 

사용자 삽입 이미지

 

1. allColumns : 테이블의 모든 컬럼을 복사할지 설정한다.

true로 하면 모든 컬럼을, false로 하면 아래의 colArray에 설정한 컬럼만 복사한다.

 

2. colArray : 모든 컬럼을 복사하지 않을 경우, 복사할 컬럼을 정의하는 배열

이 값을 적용시키려면 allColumns를 false로 해야 한다.

 

3. source 테이블 연결정보

source로 시작하는 변수들에는 원본 데이터가 있는 테이블에 관한 정보를 입력한다.

 

4. target 테이블 연결정보

target로 시작하는 변수들에는 복사한 데이터를 insert할 테이블에 관한 정보를 입력한다.

 

 

※ 주의사항

source 테이블과 target 테이블의 스키마, 데이타타입, 컬럼길이는 호환가능해야 합니다.

target에는 무조건 insert를 하기 때문에, 원래 있던 데이터는 전혀 건드리지 않습니다.

JDBC 사용하니까 실행할 때 클래스패스에 DB JDBC 드라이버는 당근 포함되어 있어야겠죠.

예전에 VARCHAR2에 2,000 바이트 넘는 데이터 읽고 쓸 때 getString, setString으로 안 됐는데 지금은 되나 모르겠네요.

혹시 이런 케이스로 안 되는 분 있으시면 알려 주세요.

 

마지막으로,

마음껏 배포 가능합니다. 단, 소스 맨위의 주석은 건드리지 말아 주세요.

 

 

편리하게 이용하시길...