dmfldr 데이터 적재 도구 활용: 콘솔에서 JNI 프로그래밍까지 (Windows/Linux)

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;
    }
}

태그: DamengDB dmfldr 데이터적재 JNI java

5월 30일 09:12에 게시됨