본문 바로가기
시스템 & 트랜잭션

[SAP ABAP] CBO 테이블 시스템 간 이관 5가지 방법 — TR(TABU)·SCC1·Excel·Custom Z·LSMW

by Song.sh 2026. 5. 18.

SAP 운영을 하다 보면 한 시스템(또는 클라이언트) 의 CBO 테이블 데이터를 다른 시스템(클라이언트) 으로 옮겨야 하는 상황이 자주 발생합니다. 신규 시스템 오픈 시 마스터 데이터 이관, 운영기 데이터를 개발기로 복제, S/4HANA 전환, 또는 분기마다 운영자 마스터 갱신 같은 케이스가 대표적입니다.

 

테이블 구조(R3TR TABL) 는 일반 트랜스포트로 자연스럽게 이관되지만, 데이터(R3TR TABU) 이관은 별도 절차 가 필요합니다. 잘못 선택하면 데이터 정합성이 깨지거나, 운영기 이관 후 사용자에게 보이지 않거나, 보안 권한이 우회되는 사고가 납니다.

 

이 글은 CBO 테이블의 시스템 간 데이터 이관 방법 5가지(TR(TABU) · SCC1 · Excel UP/Download · Custom Z 프로그램 · LSMW/RFC) 의 차이와 선택 기준, 그리고 실무에서 자주 만나는 함정을 정리한 메모입니다.


핵심 — 데이터 이관 5가지 방법 비교

먼저 상황별 최적 방법을 한눈에 정리합니다. 데이터 량과 검토 필요 여부에 따라 선택이 달라집니다.

방법 동작 적합한 상황
1. TR (TABU) 트랜스포트 요청에 데이터까지 함께 묶어 이관 소~중량 운영자 마스터 · DEV → QAS → PRD 표준 흐름
2. SCC1 같은 시스템의 다른 클라이언트로 TR 적용 DEV 100 → DEV 200 같은 동일 시스템 내 클라이언트 복사
3. Excel UP/Download SE16N · Z 프로그램으로 엑셀 파일 추출 후 다른 시스템에 업로드 중량 · 사용자가 직접 검토 후 변경 필요
4. Custom Z 프로그램 GUI_DOWNLOAD/GUI_UPLOAD 또는 Application Server 파일 대용량 · 반복 작업 · 비즈니스 변환 로직 필요
5. LSMW / RFC LSMW(엑셀 → SM30 자동 입력) 또는 RFC 직접 호출 표준 화면 통해 입력 필요(검증 거치고 싶을 때) · 실시간 동기화

1단계 — TR(TABU) 방식: 트랜스포트에 데이터 함께 묶기

가장 표준적이고 안전한 방법입니다. 트랜스포트 요청(SE10 · SE09) 안에 테이블 데이터를 R3TR TABU 형태로 등록해서 STMS 로 이관합니다.

SE10 → Create Request → Workbench 또는 Customizing
  → Request 번호 받기 (예: DEVK900123)
  → Object List 에 수기 추가:
       PgmID    Object   Object Name
       R3TR    TABU      ZTXX0123
  → 더블클릭 → Key 입력 (전체 or 키 범위 지정)
       *                 (전체 행)
       100*              (MANDT=100 인 모든 행)
       1000A*            (회사코드 1000 + 자재 A로 시작)
  → 저장 → Release → STMS 로 이관

 

TR 종류 차이

PgmID Object 의미 사용 시점
R3TR TABL 테이블 구조 정의 (DDIC) 신규 테이블 생성 · 필드 추가 시
R3TR TABU 테이블 데이터(행) 운영자 마스터 이관 · 기준 정보 동기화

자동 vs 수동 TR 등록

방식 조건 / 설정
자동 (SM30 사용 시) 테이블의 Delivery Class 가 C(Customizing) 또는 G · 유지보수뷰 설정 시 트랜스포트 옵션 켜져 있으면 SM30 입력값이 자동으로 TR 에 묶임
수동 (SE09 직접) Delivery Class 가 A(Application) 인 테이블 또는 자동 등록 안 되는 경우 · SE09 에서 직접 R3TR TABU 추가

2단계 — SCC1: 같은 시스템 클라이언트 간 복사

같은 SAP 시스템의 다른 클라이언트(예: DEV 100 → DEV 200) 로 데이터를 옮길 때 사용합니다. 별도 STMS 이관 없이 클라이언트 간 TR 적용 으로 동작합니다.

대상 클라이언트(예: DEV 200) 에 로그인
  → SCC1 진입
  → Source Client : 100             (데이터를 가져올 클라이언트)
  → Transport Request : DEVK900123  (적용할 TR 번호)
  → Including tasks/sub-tasks ☑
  → Including client-specific Customizing ☑
  → Execute (Test Run 권장 — 먼저 시뮬레이션)

 

SCC1 vs STMS 차이

항목 SCC1 STMS
이관 범위 같은 시스템의 다른 클라이언트 다른 시스템(DEV → QAS → PRD)
실행 위치 대상 클라이언트에서 대상 시스템 STMS Import Queue 에서
TR Release 필요 불필요 (수정 가능 상태 TR 도 OK) 필수 (Release 된 TR 만 이관)

3단계 — Excel UP/Download: 사용자가 검토하며 이관

데이터를 한 번 검토하고 일부 수정해서 이관해야 하는 경우 가장 흔히 쓰는 방법입니다. SE16(또는 SE16N) 의 표준 다운로드 + SM30 의 업로드 메뉴, 또는 LSMW · 자체 Z 프로그램을 활용합니다.

Download 절차

SE16 → 테이블명 ZTXX0123 → Execute
  → 데이터 조회 결과 화면
  → List → Save → Local File → Spreadsheet (XLSX)
  → 파일 저장

Upload 절차 (두 가지)

방법 A — SM30 (자동 유지보수뷰 사용 시)
  SM30 → ZTXX0123 → Maintain
  → 메뉴: Table View → Upload (있는 경우)

방법 B — LSMW 또는 Custom Z 프로그램
  엑셀 파일 → LSMW Recording → 자동 등록 (별도 글: "LSMW 사용법 — 14단계 대량 이관")
  또는 Custom Z 프로그램으로 GUI_UPLOAD + INSERT/MODIFY

 

엑셀 방식의 장점은 데이터를 사람이 직접 검토하고 일부 수정 후 이관 할 수 있다는 점입니다. 다만 트랜스포트 추적이 안 되므로 운영기 변경 이력 관리에 불리합니다.


4단계 — Custom Z 프로그램: 가장 유연

대용량이거나 비즈니스 변환 로직이 필요하면 자체 Z 프로그램이 가장 안전합니다. 보통 두 가지 패턴이 있습니다.

패턴 A — Application Server 파일 경유

1. DEV 시스템에서 Z_DOWNLOAD 프로그램 실행
   → 테이블 데이터를 AL11 의 응용 서버 파일로 저장
        예: /usr/sap/trans/data/ZTXX0123.csv

2. 베이시스에서 PRD 응용 서버로 파일 복사 (SCP / FTP)

3. PRD 시스템에서 Z_UPLOAD 프로그램 실행
   → 응용 서버 파일 읽어서 INSERT/MODIFY

패턴 B — GUI Download/Upload (PC 경유)

1. DEV → Z_DOWNLOAD → GUI_DOWNLOAD 로 PC 파일 저장
2. PC 파일을 PRD 사용자에게 전달
3. PRD → Z_UPLOAD → GUI_UPLOAD 로 읽어서 INSERT/MODIFY

PC 경유는 간편하지만 수십 MB 이상의 대용량에서는 응용 서버 경유 방식 이 권장됩니다. 네트워크 부하와 PC 메모리 한계 때문입니다.

 


5단계 — LSMW · RFC · 표준 인터페이스 (간단 소개)

특수 상황에서 사용하는 보조 방법입니다.

방법 언제 사용
LSMW 엑셀 파일을 표준 SM30 화면에 자동 입력해 검증까지 한 번에 — 표준 화면 권한·검증을 그대로 활용 (별도 글: LSMW 사용법 — 14단계 대량 이관)
RFC (실시간 송수신) 상시 동기화가 필요한 경우 · 양방향 인터페이스 구성 (별도 글: RFC vs DB LINK — 시스템 연동 방식 차이)
IDoc / ALE SAP 간 분산 시스템 · 정기 배치 송수신
R3trans · DB-level Export 베이시스 도구 · 시스템 마이그레이션 같은 대규모 이관 시

흔히 빠뜨리는 함정

TABL 만 이관하고 TABU 누락

테이블 구조(R3TR TABL) 만 이관하고 데이터(R3TR TABU) 를 빼놓으면 운영기에는 빈 테이블이 가게 됩니다. 신규 운영자 마스터 테이블은 두 가지를 같은 TR 에 묶거나, 별도 TR 로 함께 Release 합니다.

Delivery Class 가 A 인데 자동 TR 등록 기대

Delivery Class 가 A(Application) 인 테이블은 SM30 입력해도 자동으로 TR 에 안 묶입니다. C(Customizing) 로 정의된 운영자 마스터만 자동 등록 대상입니다.

TR Key 범위 지정 실수

*(전체) 로 등록하면 운영기의 기존 데이터까지 삭제·덮어쓰기 될 수 있습니다. 특정 키 범위(100* 등) 로 제한하거나 사전에 운영기 백업을 권장합니다.

Cluster Table 이관 차이

표준 cluster table(BSEG 등) 은 일반 TABU 로 이관 안 됩니다. 다행히 CBO 테이블은 거의 transparent 라 이슈가 적지만, 클러스터/풀 테이블을 다룬다면 R3trans 같은 베이시스 도구가 필요합니다.

SCC1 시 Source Client 누락

SCC1 은 반드시 대상(받을) 클라이언트에 로그인 한 상태에서 실행하고, Source Client 에 데이터를 갖고 있는 클라이언트를 지정합니다. 반대로 실행하면 대상의 데이터가 source 로 이동(또는 누락) 합니다.

Excel Upload 시 인코딩/포맷 문제

UTF-8 / ANSI 인코딩 차이로 한글이 깨지거나, 날짜 포맷(YYYYMMDD vs DD.MM.YYYY) 이 자동 변환돼 잘못 들어가는 경우가 흔합니다. 파일을 메모장으로 열어 인코딩 확인, 엑셀 셀 서식을 텍스트로 강제 후 다시 저장하는 패턴이 안전합니다.

Custom Z 프로그램에서 COMMIT WORK 누락

INSERT · MODIFYCOMMIT WORK 가 빠지면 DB 반영이 안 됩니다. 또는 너무 자주 COMMIT 하면 성능이 떨어지므로, 보통 1,000 ~ 5,000 행 단위로 묶어 COMMIT 하는 것이 일반적입니다.

운영기 변경 이력 관리 누락

엑셀 업로드·Z 프로그램 직접 INSERT 는 트랜스포트 추적이 안 됩니다. 운영기에서 누가·언제·무엇을 변경했는지 추적하려면 SE13 의 Log Data Changes 또는 별도 변경이력 테이블이 필요합니다.

MANDT 컬럼 처리

CBO 테이블의 첫 번째 키가 MANDT 라면 이관 시 대상 시스템의 클라이언트 번호로 자동 변환되어야 합니다. Z 프로그램에서 sy-mandt 를 항상 사용하고, 엑셀 다운로드 시에는 MANDT 컬럼을 굳이 포함시킬 필요 없습니다.


전체 코드 — 복사용 통합본

Z 테이블 데이터를 응용 서버 CSV 로 다운로드하고, 다른 시스템에서 그 CSV 를 읽어 INSERT/MODIFY 하는 표준 Z 프로그램 한 쌍입니다. SE38 에 그대로 붙여 실행 가능합니다.

REPORT z_ztxx0123_export.

* ★ Z 테이블 데이터 → 응용 서버 CSV 다운로드 (Source 시스템에서)
PARAMETERS: p_file TYPE string
              DEFAULT '/usr/sap/trans/data/ZTXX0123.csv'.

DATA: lt_data TYPE STANDARD TABLE OF ztxx0123.

SELECT * FROM ztxx0123
  INTO TABLE @lt_data.

" 1) 응용 서버 파일 OPEN (UTF-8)
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE
                              ENCODING UTF-8
                              WITH BYTE-ORDER MARK.
IF sy-subrc <> 0.
  WRITE: / '파일 열기 실패:', p_file.
  RETURN.
ENDIF.

" 2) 헤더 작성
TRANSFER 'DOCID;APPSTA;INITIATOR;INIDAT;...' TO p_file.

" 3) 데이터 라인별 작성 (필드 구분자 = 세미콜론)
DATA: lv_line TYPE string.
LOOP AT lt_data INTO DATA(ls).
  lv_line = |{ ls-docid };{ ls-appsta };{ ls-initiator };{ ls-inidat }|.
  TRANSFER lv_line TO p_file.
ENDLOOP.

CLOSE DATASET p_file.

WRITE: / '다운로드 완료:', p_file,
       / '건수:', lines( lt_data ).
REPORT z_ztxx0123_import.

* ★ 응용 서버 CSV → Z 테이블 INSERT/MODIFY (Target 시스템에서)
PARAMETERS: p_file  TYPE string
              DEFAULT '/usr/sap/trans/data/ZTXX0123.csv',
            p_mode  RADIOBUTTON GROUP m1 DEFAULT 'X',  " MODIFY (Upsert)
            p_ins   RADIOBUTTON GROUP m1.               " INSERT (신규만)

DATA: lv_line  TYPE string,
      ls_row   TYPE ztxx0123,
      lt_data  TYPE STANDARD TABLE OF ztxx0123,
      lv_cnt   TYPE i.

" 1) 응용 서버 파일 OPEN
OPEN DATASET p_file FOR INPUT IN TEXT MODE
                             ENCODING UTF-8
                             SKIPPING BYTE-ORDER MARK.
IF sy-subrc <> 0.
  WRITE: / '파일 열기 실패:', p_file.
  RETURN.
ENDIF.

" 2) 헤더 줄 스킵
READ DATASET p_file INTO lv_line.

" 3) 라인별 읽어서 구조에 매핑
DO.
  READ DATASET p_file INTO lv_line.
  IF sy-subrc <> 0. EXIT. ENDIF.

  SPLIT lv_line AT ';' INTO ls_row-docid
                            ls_row-appsta
                            ls_row-initiator
                            ls_row-inidat.

  ls_row-mandt = sy-mandt.    " ★ 대상 시스템 클라이언트로 자동
  APPEND ls_row TO lt_data.

  " 4) 1000행마다 묶어 COMMIT
  IF lines( lt_data ) >= 1000.
    IF p_mode = 'X'.
      MODIFY ztxx0123 FROM TABLE lt_data.
    ELSE.
      INSERT ztxx0123 FROM TABLE lt_data.
    ENDIF.
    COMMIT WORK.
    ADD lines( lt_data ) TO lv_cnt.
    CLEAR lt_data.
  ENDIF.
ENDDO.

" 5) 남은 데이터 처리
IF lines( lt_data ) > 0.
  IF p_mode = 'X'.
    MODIFY ztxx0123 FROM TABLE lt_data.
  ELSE.
    INSERT ztxx0123 FROM TABLE lt_data.
  ENDIF.
  COMMIT WORK.
  ADD lines( lt_data ) TO lv_cnt.
ENDIF.

CLOSE DATASET p_file.

WRITE: / '업로드 완료. 처리 건수:', lv_cnt.

요약

단계 방법 핵심
1 TR (TABU) SE09/SE10 → R3TR TABU 추가 → STMS 이관
2 SCC1 같은 시스템 다른 클라이언트 — Source Client + TR 번호
3 Excel UP/Download SE16N 다운로드 + SM30 / LSMW / Z 프로그램 업로드
4 Custom Z 프로그램 응용 서버 파일 또는 GUI Download/Upload + INSERT/MODIFY
5 LSMW · RFC · IDoc 특수 상황 — 표준 검증 활용 · 실시간 동기화 · 분산 시스템

CBO 테이블의 시스템 간 데이터 이관은 데이터 량 · 검토 필요성 · 트랜스포트 추적 여부 세 가지로 방법이 결정됩니다. 작은 운영자 마스터는 TR(TABU) 로 안전하게 STMS 흐름을 타고, 같은 시스템 내 클라이언트 간이면 SCC1, 중량 데이터에 검토가 필요하면 엑셀, 대용량이거나 비즈니스 변환이 필요하면 Custom Z 프로그램이 적합합니다. 어느 방법을 선택하든 운영기 백업 → 테스트 클라이언트에서 검증 → 운영기 적용 순서를 지키고, MANDT 처리·Delivery Class·트랜스포트 추적 가능 여부를 사전 확인하는 것이 안전합니다.


Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다.

SE09 · SE10 · STMS · SCC1 · SE16N · AL11 트랜잭션과 R3TR TABL · R3TR TABU 트랜스포트 객체 유형은 SAP NetWeaver 표준 기능으로 시스템 버전 의존 없이 동작합니다. OPEN DATASET · GUI_DOWNLOAD · GUI_UPLOAD ABAP 명령은 표준 기능이며, 응용 서버 파일 경로(/usr/sap/trans/data) 와 권한은 시스템·OS · 베이시스 정책에 따라 다르므로 사전에 확인이 필요합니다. 운영기 데이터 이관 시에는 베이시스 협의·사전 백업·테스트 클라이언트 검증을 권장하며, 운영기 라이브 데이터에 직접 영향을 줄 수 있으므로 트랜스포트 추적이 어려운 직접 INSERT 방식보다는 TR 기반 이관이 정합성 관점에서 더 안전합니다.