콘텐츠로 이동

Quick Start

이 문서는 Datatrans를 처음 사용할 때 가장 빠르게 실행해볼 수 있도록 핵심 절차만 정리한 빠른 시작 가이드입니다.

개요

기본 흐름은 아래와 같습니다.

  1. Source와 Target 연결 정보 준비
  2. 전송 범위 선택 (schemas 또는 tables)
  3. 기본 실행 옵션 지정 (degree, table_action, jobname 등)
  4. Datatrans 실행
  5. 필요 시 query, mappings, scrambles 같은 옵션 추가
  6. Interactive 모드에서 상태 확인 및 작업 제어

1. 가장 빠른 실행 절차

1.1 Source / Target 연결 정보 준비

Datatrans는 두 개의 데이터베이스 연결 정보를 사용합니다.

  • source: 데이터를 추출하는 원본 데이터베이스
  • target: 데이터를 적재하는 대상 데이터베이스

연결 문자열은 Oracle EZCONNECT 형식을 사용합니다.

source=username/password@host:port/service_name
target=username/password@host:port/service_name

예시:

source=APP_SOURCE/samplePwd123@192.168.0.10:1521/SOURCEPDB
target=APP_TARGET/samplePwd123@192.168.0.20:1521/TARGETPDB

주의

  • 실제 운영 계정과 비밀번호는 문서에 직접 남기지 않는 것을 권장합니다.
  • 비밀번호에 @, :, / 같은 특수문자가 있으면 URL 인코딩이 필요할 수 있습니다.

1.2 전송 범위 선택

전송 범위는 tables 또는 schemas로 지정합니다.

tables=ORDERS,CUSTOMERS,PRODUCTS
  • 지정한 테이블만 전송합니다.
  • 일부 테이블만 선택 이관할 때 사용합니다.
schemas=SALES,HR
  • 지정한 스키마에 포함된 전체 테이블을 전송합니다.
  • 전체 업무 스키마 이관에 적합합니다.

권장 기준

  • 특정 테이블만 이관: tables
  • 스키마 전체 이관: schemas

1.3 기본 실행 옵션 지정

처음 실행할 때는 아래 옵션부터 지정하는 것을 권장합니다.

degree

병렬 처리 수준(동시 작업 수)을 지정합니다.

degree=8

운영 팁

  • degree는 반드시 CPU 코어 수보다 작아야 하는 값은 아닙니다.
  • 작은 값부터 시작해 처리량과 DB 부하를 보면서 단계적으로 조정하는 것을 권장합니다.

table_action

Target 테이블이 이미 존재할 때 처리 방식을 지정합니다.

table_action=TRUNCATE
옵션 설명
TRUNCATE 기존 데이터 삭제 후 다시 적재
APPEND 기존 데이터 유지 후 추가 적재
REPLACE Source 구조 기준으로 Target 테이블을 다시 생성 후 적재

주의

REPLACE는 테이블명 또는 스키마명 리매핑이 포함된 경우 지원하지 않을 수 있습니다.

jobname

작업 식별자를 지정합니다.

jobname=sales_mig_01
  • 지정하지 않으면 Datatrans가 자동 생성합니다.
  • 로그 파일과 에러 파일 이름의 기준이 됩니다.

1.4 가장 기본적인 실행 예시

datatrans \
  source=APP_SOURCE/samplePwd123@192.168.0.10:1521/SOURCEPDB \
  target=APP_TARGET/samplePwd123@192.168.0.20:1521/TARGETPDB \
  schemas=SALES \
  degree=8 \
  table_action=TRUNCATE \
  jobname=sales_mig_01
datatrans \
  source=APP_SOURCE/samplePwd123@192.168.0.10:1521/SOURCEPDB \
  target=APP_TARGET/samplePwd123@192.168.0.20:1521/TARGETPDB \
  tables=ORDERS,CUSTOMERS \
  degree=4 \
  table_action=APPEND \
  jobname=order_load_01

2. 자주 함께 사용하는 옵션

2.1 query - 조건부 추출

특정 테이블에 대해 조건을 걸어 부분 추출할 수 있습니다.

query=SCHEMA.TABLE:"조건식"

예시:

query=HR.EMPLOYEES:"DEPARTMENT_ID = 90"

주의

  • WHERE 키워드는 쓰지 않습니다.
  • 조건절만 작성해야 합니다.
  • 테이블명과 컬럼명은 반드시 Source 기준으로 작성해야 합니다.

실행 예시:

datatrans \
  source=APP_SOURCE/samplePwd123@192.168.0.10:1521/SOURCEPDB \
  target=APP_TARGET/samplePwd123@192.168.0.20:1521/TARGETPDB \
  tables=EMPLOYEES \
  query=HR.EMPLOYEES:"DEPARTMENT_ID = 90" \
  degree=4 \
  table_action=TRUNCATE \
  jobname=hr_emp_90

2.2 flashback_scn - 추출 시점 제어

추출 시점을 제어하려면 flashback_scn을 사용합니다.

flashback_scn=CURRENT
옵션 설명
CURRENT 전체 테이블을 동일 시점 기준으로 추출
INDIVIDUAL 각 테이블별 추출 시작 시점 기준으로 추출
SCN 숫자 지정한 시점 기준으로 추출

권장 기준

  • 정합성 우선: CURRENT
  • 성능 우선: INDIVIDUAL

2.3 remap_schema / remap_tablespace - 적재 위치 변경

Source와 Target의 스키마 또는 테이블스페이스가 다를 경우 아래 옵션을 사용할 수 있습니다.

remap_schema

remap_schema=HR:HR_NEW,SALES:SALES_MIG

remap_tablespace

remap_tablespace=USERS:DATA_TS

주의

remap_tablespacetable_action=REPLACE일 때만 적용됩니다.


2.4 batcherrors - 오류 행 계속 처리

적재 중 오류가 발생해도 가능한 행은 계속 적재하려면 batcherrors를 사용합니다.

batcherrors=Y
옵션 동작
Y 오류 행만 실패 처리하고 나머지는 계속 적재
N 오류 발생 시 작업 단위 실패 가능

오류 데이터는 {jobname}.err 파일로 기록됩니다.


2.5 suffix - 타겟 테이블명에 접미사 추가

주기적 스냅샷이나 테스트 이관 시 Target 테이블명 뒤에 접미사를 붙일 수 있습니다.

suffix=_20260227

예:

  • Source: HR.EMPLOYEES
  • Target: HR.EMPLOYEES_20260227

3. 매핑 적용 빠른 시작

컬럼 이름이 다르거나 값 변환이 필요하면 매핑 YAML을 작성하고 mappings 파라미터로 적용합니다.

3.1 기본 구조

mappings:
  USR_TARGET_MINI.MAPPING_CONV:
    target:
      owner: USR_TARGET_MINI
      table_name: MAPPING_CONV
    source:
      owner: USR_SOURCE_MINI
      table_name: EMP_01
    columns:
      - target_column: DATATA1
        source_column: OWNER
      - target_column: CONV1
        conversion_rule: "ROUND(DATA_LENGTH + 3.5)"

3.2 적용 방식

mappings=/home/user/dt_parfiles/mapping_rule.yaml

여러 파일을 함께 적용할 때는 ,로 구분합니다.

mappings=/home/user/dt_parfiles/map_hr.yaml,/home/user/dt_parfiles/map_sales.yaml

주의

  • conversion_rule은 큰따옴표로 감싸는 것을 권장합니다.
  • 하나의 target_column에는 source_column 또는 conversion_rule 중 하나만 사용합니다.
  • 매핑은 단일 소스 테이블과 단일 타겟 테이블 간 1:1 규칙만 지원합니다.

실행 예시:

datatrans \
  source=APP_SOURCE/samplePwd123@192.168.0.10:1521/SOURCEPDB \
  target=APP_TARGET/samplePwd123@192.168.0.20:1521/TARGETPDB \
  schemas=USR_SOURCE_MINI \
  mappings=/home/user/dt_parfiles/mapping_rule.yaml \
  degree=4 \
  table_action=TRUNCATE \
  jobname=mapping_test_01

4. 스크램블링 적용 빠른 시작

민감정보를 마스킹하거나 가명처리하려면 스크램블링 규칙을 적용합니다.

기본 흐름은 아래와 같습니다.

  1. 파이썬 함수 작성
  2. 함수를 도메인으로 등록
  3. YAML에 테이블/컬럼 규칙 작성
  4. 실행 시 scrambles 파라미터 지정

4.1 함수 작성 예시

# $DATATRANS_HOME/rule/rules.py
import random

def get_name(*_):
    names = ["KIM", "LEE", "PARK", "CHOI", "JUNG"]
    return random.choice(names)

4.2 도메인 등록 예시

SC_NAME > $DATATRANS_HOME/rule/rules.py get_name

4.3 YAML 예시

USR_TARGET.EMP:
  - columns: EMP_NAME
    rules: SC_NAME

4.4 실행 예시

datatrans \
  source=APP_SOURCE/samplePwd123@192.168.0.10:1521/SOURCEPDB \
  target=APP_TARGET/samplePwd123@192.168.0.20:1521/TARGETPDB \
  schemas=USR_SOURCE_MINI \
  scrambles=/path/to/scramble_rule.yaml \
  degree=4 \
  table_action=TRUNCATE \
  jobname=scramble_test_01

운영 팁

  • YAML의 rules:에는 함수명이 아니라 도메인명을 작성합니다.
  • UNIQUECONSISTENT는 동시에 사용하지 않는 것을 권장합니다.
  • args를 지정하면 스크램블 함수의 입력값을 다른 컬럼에서 가져올 수 있습니다.

5. 상태 확인 및 작업 제어

Datatrans를 실행 인자 없이 시작하면 Interactive 모드로 진입합니다.

datatrans

기본 프롬프트:

DATATRANS>

자주 사용하는 명령:

JOB_LIST
STATUS=JOBNAME
CONTINUE_JOB=JOBNAME
STOP_JOB=JOBNAME
KILL_JOB=JOBNAME

중단된 작업을 다시 시작하려면 먼저 작업에 연결한 뒤 START_JOB를 실행합니다.

CONTINUE_JOB=SALES_MIG_01
START_JOB

주의

  • STATUS 단독 명령은 현재 연결된 작업이 있을 때 사용합니다.
  • START_JOB=JOBNAME 형식은 지원하지 않습니다.
  • 작업을 안전하게 멈출 때는 STOP_JOB를 우선 검토하고, 즉시 종료가 필요할 때만 KILL_JOB를 사용합니다.

6. 상태 기반 전송 빠른 시작

Repository DB의 상태 정보를 기준으로 전송 대상을 자동 선택하려면 Status-Driven Transfer를 사용합니다.

이 경우 source, target 외에 repository 연결이 추가로 필요합니다.

6.1 필수 개념

repository

상태를 관리하는 Repository DB 접속 정보입니다.

repository=HOST:PORT/SERVICE

completed_target_query

감시 대상 테이블 목록을 가져오는 쿼리입니다.

SELECT OWNER, TABLE_NAME
FROM DT_REPO_TABLE_STATUS
WHERE MONITOR_YN='Y';

working_target_query

지금 전송 가능한 테이블을 가져오는 쿼리입니다.

SELECT OWNER, TABLE_NAME
FROM DT_REPO_TABLE_STATUS
WHERE STATUS='READY';

polling_frequency

Repository 조회 주기(초)입니다.

polling_frequency=3

운영 팁

  • 일반적으로 3에서 10초 사이로 조정하는 것을 권장합니다.
  • 실제 전송 대상은 schemas 또는 tables로 지정한 범위와 completed_target_query 결과의 교집합만 포함됩니다.

7. 첫 실행 체크리스트

처음 실행하기 전에는 아래 항목을 확인하는 것을 권장합니다.

  • Source / Target 연결 정보가 정확한지 확인합니다.
  • 전송 범위를 schemas 또는 tables로 명확히 지정합니다.
  • Target 테이블 처리 방식(TRUNCATE, APPEND, REPLACE)을 결정합니다.
  • jobname을 지정해 로그와 에러 파일을 구분하기 쉽게 만듭니다.
  • 부분 추출이 필요하면 query를 Source 기준으로 작성합니다.
  • 컬럼 구조가 다르면 mappings를 준비합니다.
  • 민감정보가 있으면 scrambles 적용 여부를 검토합니다.
  • 대용량 작업은 작은 degree부터 시작해 점진적으로 올립니다.
  • 실행 후에는 Interactive 모드에서 STATUS=JOBNAME으로 상태를 확인합니다.

8. 추천 시작 예시

가장 무난한 첫 실행 예시는 아래와 같습니다.

datatrans \
  source=APP_SOURCE/samplePwd123@192.168.0.10:1521/SOURCEPDB \
  target=APP_TARGET/samplePwd123@192.168.0.20:1521/TARGETPDB \
  schemas=SALES \
  degree=4 \
  table_action=TRUNCATE \
  batcherrors=Y \
  flashback_scn=CURRENT \
  jobname=sales_first_run

이 설정은 다음 목적에 적합합니다.

  • 스키마 단위로 빠르게 전송 시작
  • 전체 시점 정합성 확보
  • 오류 행은 별도 분리
  • 로그 및 상태 관리 용이