1. 사전 준비
dmfldr 실행 전 다음 사항을 확인하세요:
- dmfldr 실행 파일이 bin 디렉터리에 위치
- 대상 데이터베이스 테이블 생성 완료
- 제어 파일 준비 완료
- 데이터 파일의 개행 문자 체계 확인(Windows: CRLF, Linux: LF)
제어 파일 예시:
LOAD DATA
INFILE '/path/to/datafile.txt'
INTO TABLE SCHEMA.TABLE_NAME
FIELDS '|'
2. 콘솔 명령어
필수 매개변수:
- USERID: 사용자/비밀번호@서버:포트#SSL_경로@SSL_비밀번호
- CONTROL: 제어 파일 경로
Windows 실행 예시:
dmfldr.exe SYSDBA/SYSDBA@localhost:5236 control='C:\control.ctl'
Linux 실행 예시:
./dmfldr userId=SYSDBA/SYSDBA@localhost:5238 control='/home/control.ctl'
3. Java 통합 방법
방법 1: Process 클래스 활용
import java.util.concurrent.*;
public class DataLoader {
private static final String LOADER_PATH = "dmfldr.exe userId=SYSDBA/SYSDBA@host:port";
static class LoadTask implements Callable<String> {
private String targetTable;
public String call() {
try {
Process loaderProcess = Runtime.getRuntime().exec(
LOADER_PATH + " control='control.ctl'"
);
new Thread(() ->
new BufferedReader(
new InputStreamReader(loaderProcess.getInputStream())
).lines().forEach(System.out::println)
).start();
return loaderProcess.waitFor() == 0 ? "성공" : "실패";
} catch (Exception e) {
return "오류: " + e.getMessage();
}
}
}
public static void main(String[] args) {
ExecutorService threadPool = Executors.newFixedThreadPool(3);
Future<String> result = threadPool.submit(new LoadTask());
// 결과 처리 로직
}
}
방법 2: JNI 인터페이스 활용
import com.dameng.floader.*;
public class JniLoader {
private Instance dmInstance = new Instance();
private boolean initializeLoader(String table) {
dmInstance.allocInstance();
dmInstance.setAttribute(Properties.FLDR_ATTR_SERVER, "host");
dmInstance.setAttribute(Properties.FLDR_ATTR_PORT, "5238");
dmInstance.setAttribute(Properties.FLDR_ATTR_UID, "SYSDBA");
dmInstance.setAttribute(Properties.FLDR_ATTR_PWD, "SYSDBA");
return dmInstance.initializeInstance(null, null, null, "SCHEMA." + table);
}
public long executeLoad(String table) {
if(initializeLoader(table)) {
dmInstance.setControl("LOAD DATA INFILE 'data.txt' INTO TABLE " + table);
dmInstance.finish();
return Long.parseLong(dmInstance.getAttribute(Properties.FLDR_ATTR_COMMIT_ROWS));
}
return 0;
}
}