시스템

[DB] pump를 사용한 export, import 스크립트

달빛궁전- 2024. 1. 1. 16:05

목적 :
Oracle DBMS에서 Pump (export, import)를 진행할 때 매번 명령어를 입력하는 것이 아닌 스크립트를 통해 실행하기

특이사항 : pump는 시점 복구가 안되기 때문에 백업은 아닙니다.
보통은 백업 솔루션이 있어서, 솔루션을 사용하여 시점별로 백업, 복원 가능합니다. 
그럼 왜? 사용하냐 하시면 대량의 데이터를 이동하는 기본적인 방법이기도 하며, 저 같은 경우에는 실제 고객 데이터를 개발 서버에서 테스트 하는 용도로 많이 사용하였습니다.
그리고 DB UNDO 작업할때..

쉘스크립트에 #, sql에 /* */ 로 되어있는 것은 주석처리 입니다. 주석에는 해당 항목이 무엇인지 설명을 달았습니다.

Shell Script

  • Full export 스크립트
expdp \"/ as sysdba\" directory=PUMPDIR schemas=schema명

/* 디렉토리 지정(여기에서는 Alias에 등록된 것으로 작성), 스키마 지정 */
dumpfile=expdp_`hostname`_uobst003_`date +%Y%m%d`.dmp \
/*  덤프파일명 지정 date를 사용하여 자동시간 입력 */
logfile=expdp_`hostname`_uobst003_`date +%Y%m%d`.log job_name=uobst003_expdp_1 status=3
/* 로그파일, 오라클내Job 이름, status값(백업 진행시 진행률과 내용 보여주기) */

일부 테이블 export 스크립트
expdp \"/ as sysdba\" directory=SEUDEV01_PUMPDIR dumpfile=sample_msg.dmp 
/* 디렉토리 지정, 덤프파일 지정  */
logfile=sample.log job_name=oracle_job_msg \
/*  로그파일, 오라클내 job이름  */
tables=테이블명 query=테이블:'"WHERE send_time > sysdate -100"' status=3
/* 테이블명 지정, 쿼리문 (앞에 select절 생략가능) 유저ID.table명 where절
where절을 send_time > sysdate 이런 식으로 생성가능  */

 

  • Import 스크립트
echo "log trucate & index drop"

/* Log trucat(clear) 후 index drop  */
sqlplus << EOF
/as sysdba
@/dump/log_truc_index_drop.sql

/* SQL문의 내용은 log truncate, index drop로 이루어져 있습니다.  */
exit
EOF

echo "table data import"
impdp \"/ as sysdba\" directory=PUMPDIR dumpfile=sample_msg.dmp  tables=테이블명 \

/* 디렉토리 지정, 덤프파일 지정  */
TABLE_EXISTS_ACTION=TRUNCATE logfile=impdp_log.log status=5
echo "Waiting Next step is index import"
sleep 15

/* TABLE_EXISTS_ACTION : 특정 테이블이 존재하는 경우 동작옵션 지정, TRUNCATE는 기존테이블 데이터 삭제 후 복원입니다. */

echo "log table index import"
impdp \"/ as sysdba\" directory=PUMPDIR dumpfile=sample_msg.dmp include=index, constraint \
logfile=impdp_index.log STATUS=5

echo "테이블 통계정보 갱신"

/* 테이블 통계정보 갱신을 합니다. 하는 이유는 대량으로 데이터가 추가로 Insert 되었거나, 삭제된 경우이기 때문입니다. 통계 정보가 이상하면 옵티마이저 동작이... */
sqlplus << EOF
/as sysdba
exec dbms_stats.gather_table_stats(ownname=>'UOBST003',tabname =>'BIZ_LOG', estimate_percent=>10, degree=>2);

/* degree는 병렬 처리 수를 지정합니다. 병렬로 처리하면 성능 향상을 기대할 수 있지만, 무작정 크게하면 시스템에 부하 위험이 있으므로 적절히 조절이 필요합니다 */
exit
EOF

 

table row count하는 스크립트
행을 카운트 하는 사유는 export 후 나온 결과와 맞는지 확인이 필요하기 때문입니다.
#!/bin/sh
sqlplus -s /nolog << EOF
spool  /result.log
/* 화면 갈무리하여 파일 저장*/ 
whenever sqlerror exit 1
conn /as sysdba
select 'table' || count(*)
  from id.table
 where cust_no in (
                   select cust_no from id.table_UPDATE
                   );
exit
EOF

'시스템' 카테고리의 다른 글

업무에 도움이 되는 사이트 정리  (0) 2024.01.11
HP server DIsk 증설 정리  (0) 2021.03.28
Mysql Table 체크  (0) 2020.10.25
HP-UX 시스템  (0) 2018.01.25
UNIX - HP-UX 기본 디렉토리 정리  (0) 2018.01.08
시스템 로그인 관련 기록보기  (0) 2017.12.26
windows host 파일 수정 경로 (windows7 기준)  (0) 2013.12.13