Oracle Database 실습 5

Oracle Database 실습 5입니다. Data Pump directory object, expdp export, impdp remap_schema 복구, row count 검증과 백업 보관 기준을 정리했습니다.

Oracle Database 실습 5: Data Pump Export/Import 백업 검증

Oracle Database 실습 계정의 데이터를 Data Pump로 export하고, 다른 schema로 import해서 백업 파일이 실제 복구 가능한지 확인하는 절차다. 단순히 dump 파일을 생성하는 것만으로는 백업이 끝났다고 볼 수 없다. dump 파일, log 파일, directory object, 권한, import 검증까지 확인해야 한다.

Oracle Data Pump는 expdpimpdp 명령을 사용한다. 파일은 DB 서버의 OS 디렉터리에 생성되며, Oracle 내부에서는 그 경로를 DIRECTORY object로 참조한다.

전제 조건

  • Oracle XE가 설치되어 있고 XEPDB1이 open 상태다.
  • APPUSER 계정과 실습 테이블이 존재한다.
  • DB 서버의 OS에서 oracle 사용자가 dump 디렉터리에 쓸 수 있다.
  • 실제 계정 비밀번호는 문서나 shell history에 남기지 않는다.

1. OS dump 디렉터리 생성

sudo mkdir -p /u02/dpump
sudo chown oracle:oinstall /u02/dpump
sudo chmod 750 /u02/dpump

ls -ld /u02/dpump

2. Oracle DIRECTORY object 생성

SYSDBA로 접속한 뒤 XEPDB1 컨테이너에서 directory object를 만든다.

su - oracle
source /etc/profile.d/oracle-xe.sh
sqlplus / as sysdba
alter session set container = XEPDB1;

create or replace directory DUMP_DIR as '/u02/dpump';
grant read, write on directory DUMP_DIR to appuser;

select directory_name, directory_path
from dba_directories
where directory_name = 'DUMP_DIR';

3. export 전 데이터 확인

sqlplus appuser@localhost:1521/XEPDB1
select count(*) as server_count
from server_inventory;

select object_name, object_type
from user_objects
order by object_type, object_name;

exit;

4. expdp 실행

아래 명령은 APPUSER schema 전체를 dump 파일로 내보낸다. 명령 실행 후 비밀번호는 프롬프트에서 입력한다.

source /etc/profile.d/oracle-xe.sh
STAMP="$(date +%Y%m%d_%H%M%S)"

expdp appuser@localhost:1521/XEPDB1 \
 schemas=APPUSER \
 directory=DUMP_DIR \
 dumpfile=appuser_${STAMP}.dmp \
 logfile=appuser_${STAMP}_export.log

export 결과 파일을 확인한다.

ls -lh /u02/dpump
tail -n 80 /u02/dpump/appuser_*_export.log

5. 복구 검증용 사용자 생성

기존 schema에 바로 import하면 검증과 기존 데이터 보호가 섞인다. 실습에서는 APPUSER_RESTORE schema를 따로 만들고 REMAP_SCHEMA로 복구한다.

sqlplus / as sysdba
alter session set container = XEPDB1;

drop user appuser_restore cascade;

create user appuser_restore identified by "Change_This_In_Your_Lab";
alter user appuser_restore quota 100M on users;

grant create session,
 create table,
 create sequence,
 create view
to appuser_restore;

grant read, write on directory DUMP_DIR to appuser_restore;

drop user는 기존 검증 계정을 제거하는 명령이므로 운영 환경에서는 실행 전 반드시 영향 범위를 확인해야 한다. 위 실습은 랩 전용 schema를 대상으로 한다.

6. impdp로 다른 schema에 복구

DUMP_FILE="$(ls -1t /u02/dpump/appuser_*.dmp | head -1 | xargs -n1 basename)"
STAMP="$(date +%Y%m%d_%H%M%S)"

impdp system@localhost:1521/XEPDB1 \
 schemas=APPUSER \
 remap_schema=APPUSER:APPUSER_RESTORE \
 directory=DUMP_DIR \
 dumpfile="${DUMP_FILE}" \
 logfile=appuser_${STAMP}_import.log

import log를 확인한다.

tail -n 120 /u02/dpump/appuser_*_import.log

7. 복구 데이터 검증

sqlplus appuser_restore@localhost:1521/XEPDB1
select count(*) as restored_server_count
from server_inventory;

select server_id, server_name, server_role, ip_address
from server_inventory
order by server_id;

select object_name, object_type, status
from user_objects
order by object_type, object_name;

8. 백업 파일 보관 기준

Data Pump dump는 DB 내부 백업 전략의 일부로 볼 수 있지만, archive log 기반 point-in-time recovery를 대체하지 않는다. 학습 환경에서는 schema export/import 복구 흐름을 익히는 데 집중하고, 운영 환경에서는 RMAN, archive log, storage snapshot, 복구 리허설을 별도로 설계해야 한다.

  • dump 파일과 log 파일을 함께 보관한다.
  • dump 파일을 DB 서버 내부에만 두지 말고 별도 백업 저장소로 복사한다.
  • 정기적으로 import 테스트를 수행한다.
  • 개인정보나 중요 데이터가 포함되면 dump 파일 암호화와 접근 통제가 필요하다.
  • 성공 로그만 보지 말고 row count와 객체 상태를 비교한다.

정리

Data Pump 실습의 목표는 expdp 명령을 한 번 실행하는 것이 아니라, export 파일이 실제로 import 가능한지 검증하는 것이다. DUMP_DIR directory object를 만들고, 기존 schema를 export하고, 별도 restore schema로 import한 뒤 row count와 객체 상태를 비교해야 백업 절차로 의미가 있다.

문서 링크

BGM EVER