DBAtlas · 데이터베이스 운영 아틀라스

Oracle Data Pump: export / import, 이관, 스키마 리프레시 및 transportable

Oracle난이도: 중급소요 시간: 30–90분(데이터 크기에 따라 다름)

expdp/impdp를 사용한 테이블, 스키마, 테이블스페이스 또는 전체(full) 범위의 export와 import, 두 데이터베이스 간 이관(덤프 파일 + scp + checksum 또는 NETWORK_LINK), 덤프에서 DDL 추출(SQLFILE). 디렉터리, 사용자 및 parfile 준비, 일관성, 병렬 처리, remap, 모니터링, 중단된 job 정리를 포함합니다. RAC에서는 SCAN + 서비스 접속, 공유 디렉터리를 사용하는 CLUSTER=YES 또는 로컬 디스크를 사용하는 CLUSTER=NO를 다루며, 선택적으로 wallet 기반 스크립트와 /etc/cron.d로 export를 스케줄링합니다. 시나리오: 운영에서 테스트로 스키마 리프레시(DROP USER … CASCADE 또는 TABLE_EXISTS_ACTION=REPLACE, 패스워드/프로파일 및 권한 보존), transportable tablespace(동일/다른 플랫폼 및 endian, RMAN CONVERT), full transportable(11g/12c → 19c PDB), 덤프 암호화 및 압축, 대용량 이관 성능, ATTACH/START_JOB/KILL_JOB으로 중단된 job 관리.

구성: 데이터베이스 1개(단일 인스턴스, Oracle Restart 또는 RAC), 이관 시 소스 + 타깃

시나리오

  • Export: 데이터베이스에서 덤프 파일 생성 — 테이블, 스키마, 테이블스페이스 또는 데이터베이스 전체를 덤프 파일에 기록합니다(expdp). 데이터베이스는 오픈 상태를 유지하고 애플리케이션도 계속 동작합니다. 논리적 복사본이므로 RMAN 백업을 대체하지 않습니다(시점 복구와 완전 복구에는 RMAN이 필요합니다).
  • Import: 덤프 파일을 데이터베이스에 적재 — 이전에 받은 덤프 파일을 impdp로 적재합니다. 스키마/테이블스페이스/테이블 이름을 바꿀 수 있습니다. 타깃은 오픈 상태를 유지하며, 적재되는 객체를 사용하는 애플리케이션은 중지해야 합니다.
  • 이관: 소스 데이터베이스에서 타깃으로 이동 — Export → 파일 복사 → import, 또는 NETWORK_LINK로 덤프 파일 없이 직접 이관합니다. 타깃에 스키마가 아직 없으면(초기 적재) 이 카드를 선택하고, 타깃에 같은 스키마가 이미 있어 운영 데이터로 교체해야 하면 "스키마 리프레시" 카드를 선택합니다. 소스는 오픈 상태를 유지합니다.
  • 덤프 파일에서 DDL만 추출(SQLFILE) — 아무것도 적재하지 않으며, 객체의 CREATE 문을 .sql 파일에 기록합니다. 데이터베이스는 변경되지 않습니다.
  • 운영에서 테스트로 스키마 리프레시(refresh) — 테스트/UAT에 이미 있는 스키마를 운영의 최신 상태로 교체합니다: 타깃 스키마 백업, 세션 종료, DROP USER … CASCADE 또는 TABLE_EXISTS_ACTION=REPLACE, 패스워드/프로파일 및 권한 보존. 소스는 오픈 상태를 유지하며, 타깃 스키마는 작업 동안 사용할 수 없습니다.
  • 데이터 파일 복사로 테이블스페이스 이동(transportable tablespace) — 대용량 테이블스페이스(수백 GB 이상)는 행 단위가 아니라 데이터 파일을 복사하여 이동합니다. 동일하거나 다른 플랫폼/endian(RMAN CONVERT) 모두 가능합니다. 문자 집합은 양쪽이 같아야 합니다. 작업 동안 소스의 테이블스페이스는 READ ONLY가 됩니다(쓰기 중단).
  • 데이터베이스 전체 이동: full transportable(11g/12c → 19c, non-CDB → PDB) — FULL=Y TRANSPORTABLE=ALWAYS로 사용자 테이블스페이스는 데이터 파일로, 나머지 전부(사용자, PL/SQL, 권한)는 메타데이터로 새 PDB에 이동합니다. 11.2.0.3+ 소스에서는 VERSION=12를 지정합니다. 작업 동안 소스의 모든 사용자 테이블스페이스는 READ ONLY가 됩니다.
  • 중단되었거나 대기 중인 Data Pump job: 모니터링, 재개, 종료 — expdp/impdp job이 대기 상태(resumable wait)이거나 중지되었거나 중간에 끊겼습니다. ATTACH로 접속해 재개하거나, KILL_JOB으로 종료하거나, orphan 마스터 테이블을 정리하려는 경우입니다. 데이터베이스는 오픈 상태를 유지합니다.

시작하기 전에

  • 명령은 데이터베이스 서버에서 oracle 사용자로 실행하며, 이 사용자의 로그인 프로파일이 ORACLE_HOME, ORACLE_SID, PATH 변수를 정의하고 expdp/impdp가 PATH에 있습니다. expdp, impdp, sqlplus는 $ORACLE_HOME/bin 아래에 있으며, PATH에 없으면 bash: expdp: command not found가 발생합니다(. oraenv 또는 전체 경로: $ORACLE_HOME/bin/expdp).… RAC에서는 각 노드의 ORACLE_SID가 해당 노드의 인스턴스 이름입니다(예: 1번 노드에서 ……………).…
  • 데이터베이스는 12.2 이상(19c, 21c, 23ai)입니다. 이 가이드에서 쓰는 LOGTIME, ENCRYPTION_PWD_PROMPT, DISABLE_ARCHIVE_LOGGING 파라미터는 12c에서 도입되었습니다. 10g/11g는 파라미터 목록이 다르며, Oracle 9i 이하의 .dmp 파일은 구형 imp로만 열 수 있습니다.… Full transportable: export는 11.2.0.3부터(11g에서는 VERSION=12 사용), import는 12.1부터 지원됩니다. 11g에는 LOGTIME/METRICS가 없으므로 이 경우 가이드는 이를 사용하지 않습니다.…
  • 리스너가 실행 중이고 … 서비스가 등록되어 있습니다…. 타깃에는 … 서비스가 등록되어 있습니다….
  • 타깃 서버에서 리스너가 실행 중이고 … 서비스가 등록되어 있습니다.
  • ……(소스)와 …(타깃)…에 충분한 여유 공간이 있습니다. export에는 예상 크기만큼(COMPRESSION=ALL이면 보통 3–5배 적음) 필요하고, import에서는 덤프 파일이 이미 이 디렉터리에 있어야 합니다. 디렉터리는 데이터 파일 및 FRA와 같은 디스크에 두지 않습니다.
  • 장시간 실행되는 일관성(FLASHBACK_TIME/SCN) export에서 ORA-01555를 피하려면 UNDO_RETENTION이 export 소요 시간보다 길고(예: 3시간 export면 최소 10800초), undo 테이블스페이스가 그 기간을 감당할 만큼 커야 합니다(autoextend).
  • Import는 redo를 많이 생성합니다. 데이터베이스가 ARCHIVELOG 모드이면 FRA(또는 아카이브 대상)에 공간이 있어야 합니다. DISABLE_ARCHIVE_LOGGING은 FORCE LOGGING이 켜져 있으면(Data Guard) 효과가 없습니다.
  • 타깃 데이터베이스에 최신 RMAN 백업이 있고 원복 방법이 정해져 있습니다(import는 되돌릴 수 없습니다. 잘못된 스키마로 한 import나 TRUNCATE/REPLACE로 한 import는 백업이나 Flashback으로만 되돌릴 수 있습니다). 중요한 환경에서는 import 전에 guaranteed restore point를 만들 수 있습니다(ARCHIVELOG + FRA 필요).
  • 작업 시간(maintenance window)이 계획되어 있습니다: …소스에서 이동하는 테이블스페이스는 export와 데이터 파일 복사 동안 READ ONLY가 되며(쓰기 애플리케이션은 ORA-00372 오류를 받음), 타깃에서는 plug-in 중 새 객체를 사용하지 않아야 합니다…import 동안 타깃 객체를 사용하는 애플리케이션을 중지하거나 영향이 없는지 확인해야 합니다…일관성 옵션을 선택하지 않았으므로 export 동안 애플리케이션 쓰기를 중지해야 합니다….
  • 소스의 oracle 사용자가 타깃으로 패스워드 없이(키 기반) SSH/SCP할 수 있거나, 파일을 다른 방법(공유 디스크, 오브젝트 스토리지)으로 옮깁니다.
  • 타깃 서버가 소스 리스너 포트(…:…)에 접근할 수 있습니다(방화벽 개방).
  • 라이선스 확인: …COMPRESSION=ALL(및 DATA_ONLY)에는 Advanced Compression Option 라이선스가 필요합니다. ……덤프 암호화(ENCRYPTION, ENCRYPTION_PASSWORD/ENCRYPTION_PWD_PROMPT)에는 Enterprise Edition의 Advanced Security Option 라이선스가 필요합니다. …라이선스가 없으면 이 옵션을 끄십시오.

가이드 단계

  • 준비: 환경, 사용자 및 디렉터리 — 환경 및 리스너 서비스 확인 · 환경 및 리스너 서비스 확인(소스) · 환경 및 리스너 서비스 확인(타깃) · SCAN 및 서비스의 인스턴스 확인 · 릴리스, 문자 집합 및 로그 모드 확인 · 릴리스, 문자 집합 및 로그 모드 확인(소스) …
  • 1. 진단: 올바른 타깃인가?(스키마 리프레시) — 타깃 스키마 상태 기록(타깃) · 소스 스키마 상태 기록(소스)
  • 2. 안전장치: 타깃 스키마 백업 및 사용자 정의 — 테스트 사용자의 정의와 권한 저장(타깃) · 타깃 스키마 백업(타깃)
  • 1. 진단: transportable 전제 조건 — 소스의 플랫폼, 문자 집합 및 테이블스페이스 집합 확인(소스) · 타깃의 플랫폼, 문자 집합 및 이름 충돌 확인(타깃)
  • 2. 안전장치 및 준비 — 데이터 파일 목록과 현재 READ ONLY 상태 기록(소스) · 타깃의 데이터 파일 디렉터리 준비(타깃)
  • 3. 실행: 소스에서 READ ONLY, 메타데이터 export 및 복사 — 테이블스페이스를 READ ONLY로 전환(소스) · Transportable export parfile 작성(소스) · 메타데이터 export 실행(소스) · 데이터 파일과 덤프를 타깃으로 복사(소스)
  • 4. 실행: 타깃에서 plug-in — 복사된 파일 검증(타깃) · 데이터 파일을 이 플랫폼용으로 변환: RMAN CONVERT(타깃) · 객체 소유 스키마 생성(타깃) · Plug-in import parfile 생성(타깃) · Plug-in import 실행(타깃) · 테이블스페이스를 쓰기 가능으로 전환(타깃)
  • 5. 검증 및 후속 작업 — 테이블스페이스 밖의 객체 export(소스) · 테이블스페이스 밖의 객체 적재(타깃) · invalid 객체 컴파일 및 검증(타깃) · 소스의 테이블스페이스를 READ WRITE로 되돌림(소스)
  • Export — 대형 객체, LOB 및 파티션 검토 · 크기 추정(ESTIMATE_ONLY) · 크기 추정(ESTIMATE_ONLY)(소스) · Export parfile 작성 · Export parfile 작성(소스) · Export 실행 …
  • 덤프 파일을 타깃으로 이동 — 체크섬 파일 생성 · 덤프 파일을 타깃으로 복사 · 타깃에서 체크섬 검증
  • Database link (NETWORK_LINK) — 타깃에 database link 생성
  • 3. 실행: 타깃 스키마 비우기 — 사용자 잠금 및 세션 종료(타깃) · 스키마 삭제 및 테스트 사용자 재생성(타깃) · REPLACE 모드에서 갱신되지 않을 객체 나열(타깃)
  • Import — 덤프 파일 확인 · 덤프 파일 확인(타깃) · 타깃의 공간 및 기존 스키마 확인 · 타깃의 공간 및 기존 스키마 확인(타깃) · Import parfile 작성 · Import parfile 작성(타깃) …
  • Import 후: 컴파일 및 통계 — invalid 객체 컴파일 · invalid 객체 컴파일(타깃) · 통계 수집 · 통계 수집(타깃)
  • 4. 검증 및 후속 작업(스키마 리프레시) — 운영에서 들어온 scheduler job 비활성화(타깃) · 스키마가 다른 사용자에게 준 권한 재적용(타깃) · 객체, synonym 및 link 확인(타깃) · 사용자 잠금 해제(타깃)
  • SQLFILE: 덤프에서 DDL 추출 — 덤프 파일 확인 · SQLFILE parfile 작성 · DDL 파일 생성 · DDL 파일 검토
  • 스케줄링: export 정기 실행(cron) — 스크립트, 로그 및 TNS 디렉터리 준비…(…)… · Wallet 생성 및 자격 증명 추가 · Wallet을 다른 노드로 복사 · sqlnet.ora 작성(이 작업 전용)…(…)… · tnsnames.ora 작성(이 작업 전용)…(…)… · Export 스크립트 작성…(…)… …
  • 1. 진단: job은 어떤 상태인가? — job의 상태, 세션 및 대기 원인 표시 · 결과 해석 및 조치 선택
  • 2. 실행: job 재개 — 중지 또는 일시 중단 원인 해결 · job에 접속하여 재개(ATTACH, START_JOB) · job 실행 확인
  • 2. 실행: job 종료(KILL_JOB) — job에 접속하여 KILL_JOB으로 종료 · job 제거 확인
  • 2. 실행: orphan 마스터 테이블 정리 — Orphan job의 마스터 테이블 삭제
  • 모니터링 — 실행 중인 job 모니터링 · 실행 중인 job 모니터링(소스) · 실행 중인 job 모니터링(타깃) · job에 접속: ATTACH 및 대화형 명령 · job에 접속: ATTACH 및 대화형 명령(소스) · job에 접속: ATTACH 및 대화형 명령(타깃)
  • 정리 및 보안 — 중단된 job과 마스터 테이블 나열 · 중단된 job과 마스터 테이블 나열(소스) · 중단된 job과 마스터 테이블 나열(타깃) · KILL_JOB으로 job 종료 · KILL_JOB으로 job 종료(소스) · KILL_JOB으로 job 종료(타깃) …
내 환경에 맞춘 단계별 계획 열기 →