목적 :
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 후 나온 결과와 맞는지 확인이 필요하기 때문입니다.
행을 카운트 하는 사유는 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 |