AWS Export 수행 절차
- 절차 : Directory 생성 → AWS export 수행 → Oracle Directory to S3 Upload
포스팅에 들어가며
Step 1. Directory 생성
-- Directory 생성
call rdsadmin.rdsadmin_util.create_directory(p_directory_name=>'DATAPUMP_DIR');
-- Directory 생성 확인 및 Export 완료 시 Directory에서 Dump 파일 확인
select *
from table(rdsadmin.rds_file_util.listdir('DATAPUMP_DIR'))
order by mtime;
Step 2. Export 수행
DBMS_DATAPUMP 패키지를 이용한 Export의 경우 expdp와 마찬가지로 FULL, SCHEMA, TABLESPACE, 특정 Object 등 다양한 방식으로 export가 가능하다.
그 중 가장 많이 사용되는 방식의 Full, Schema 단위 Export 예시를 알아본다.
-- Full Export
DECLARE
w1 NUMBER;
BEGIN
w1 := DBMS_DATAPUMP.OPEN(operation=>'EXPORT', job_mode=>'FULL', job_name=>'expdp_full');
DBMS_DATAPUMP.ADD_FILE(handle=>w1, filename=>'exp_full_%U.dmp', directory=>'DATAPUMP_DIR', filesize=>'48G', filetype=>dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.ADD_FILE(handle=>w1, filename=>'exp_full.log', directory=>'DATAPUMP_DIR', filetype=>dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.START_JOB(w1);
END;
/
Full export의 경우 특별할 것 없으나, 파일 사이즈의 조정을 위해 filesize 옵션을 적용하였으며, 이에 따라 dump file의 파일명 뒤에는 _%U 옵션을 적용해 주어야 한다. (그렇지 않을 경우 계속하여 덮어쓰기함.)
특정 schema 단위 export 예시의 경우 아래와 같으며, Full과 크게 다르지 않으나, metadata_filter 패키지를 호출하여 사용한다. filesize 옵션의 경우 위에서도 잠깐 설명 했지만, 하나의 dump 파일이 아닌 지정한 사이즈의 파일로 분한되어 추출된다. 기본 bytes 단위이며, 'K','G'를 붙여 killo, giga bytes 단위로도 표기가 가능하다.
-- EX1) SCOTT Export
DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.OPEN(operation=>'EXPORT', job_mode=>'TABLE', job_name=>'expdp_scott');
DBMS_DATAPUMP.ADD_FILE(handle=>hdnl, filename=>'exp_scott.dmp', directory=>'DATAPUMP_DIR', filetype=>dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.ADD_FILE(handle=>hdnl, filename=>'exp_scott.log', directory=>'DATAPUMP_DIR', filetype=>dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(handle=>hdnl, name=> 'SCHEMA_EXPR', value=>'IN (''SCOTT'')');
DBMS_DATAPUMP.START_JOB(hdnl);
END;
/
-- EX2) SCOTT Export / File Size 조정
DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.OPEN(operation=>'EXPORT', job_mode=>'TABLE', job_name=>'expdp_scott');
DBMS_DATAPUMP.ADD_FILE(handle=>hdnl, filename=>'exp_scott_%U.dmp', directory=>'DATAPUMP_DIR', filesize=>'1024000000', filetype=>dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.ADD_FILE(handle=>hdnl, filename=>'exp_scott.log', directory=>'DATAPUMP_DIR', filetype=>dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(handle=>hdnl, name=> 'SCHEMA_EXPR', value=>'IN (''SCOTT'')');
DBMS_DATAPUMP.START_JOB(hdnl);
END;
/
SELECT OWNNER_NAME, JOB_NAME, OPERATION, JOB_MODE, DEGREE, STATE
FROM DBA_DATAPUMP_JOBS
WHERE STATE = 'EXECUTING';
👍 JOB이 중간에 멈췄어요.. 어떻게 삭제하나요?
Datapump를 통해 Job이 수행되는 상황(Execute, Not running 등)은 DBA_DATAPUMP_JOBS Dictionary에서 확인할 수 있다.
또한, 이와 동시에 임시 테이블이 생성이 되며, Job을 Clear하고 싶을 경우 생성된 임시 테이블을 Drop하면 Clear 된다. 아래 쿼리를 이용하여 생성된 임시 테이블을 확인 후 Drop 하도록 하자. 그러면 DBA_DATAPUMP_JOBS에 Job이 사라진 것을 확인할 수 있다.
SELECT a.status, a.object_id, a.object_type, a.owner||'."'||object_name||'"' "OWNER.OBJECT"
FROM dba_objects a, dba_datapump_jobs b
WHERE a.owner=b.owner_name
AND a.object_name=b.job_name
AND b.job_name NOT LIKE 'BIN$%';
Step 3. S3 버킷 업로드
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(
p_bucket_name => 'bucket_name',
p_prefix => 'upload_file_name',
p_s3_prefix => 'oxford_language',
p_directory_name=> 'oracle_directory_name')
AS TASK_ID FROM DUAL;
exec utl_file.fremove('DIRECTORY_NAME','FILE_NAME');
exec utl_file.fremove('DATAPUMP_DIR','exp_full.log');
참고 URL
포스팅을 마치며
CLI를 통한 exp / imp, expdp / impdp는 수 없이 진행해오며 상황에 맞는 데이터 이관을 진행했음에도 새로 접하는 AWS 환경에서는 처음 진행하는 작업이라 어려움이 꽤 있었다. 누군가에게는 도움이되는 자료가 되었으면 한다.
여러분의 공감과 댓글이 아잇티에게 큰 힘이됩니다 :)
▼▼▼▼▼▼▼▼▼▼▼
'Run? Learn! > Oracle - Admin' 카테고리의 다른 글
Oracle Cloud Wallet으로 SQL Developer 접속 (0) | 2023.03.21 |
---|---|
12c GRID PATCH 시 fuser 오류 해결방법 (0) | 2018.07.05 |
Oracle 12c R2 Pluggable Database 생성, 접속, 삭제 (0) | 2017.12.22 |
아카이브 로그 관리 방법 (0) | 2017.11.28 |
ORACLE COLUMN 추가, 삭제, 변경 (0) | 2017.11.14 |