BACKRUSH  유닉스명령  다음  자료실  Ascii Table   원격접속  달력,시간   프로세스  
지하철노선   RFC문서   SUN FAQ   SUN FAQ1   C메뉴얼   PHP메뉴얼   너구리   아스키월드 아이피서치

글쓴이: 개라클 오라클 백업스크립트 조회수: 474

http://m.blog.naver.com/xogstar/2217643

Oracle Database 백업 방법

안녕하세요? ORACLE DBA 이태훈입니다.
오늘은 제가 실무에서 사용하고 있는 Oracle 백업 방법을 공유드리려고 해요.

저는 물리/논리 백업을 수행하는 Shell Script를 각각 만든 후에

crontab에 등록해서 자동으로 매일 돌아가게끔 구성을 해놓습니다.

https://m.blog.naver.com/xogstar/221764350268

우선 .bash_profile 내용을 먼저 소개하고

이어서 script, crontab 등록 방법을 설명드릴게요.

궁금하신 사항이 있으시면 댓글 남겨주세요.


$ cat ~/.bash_profile


if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

umask 022




export ORACLE_HOSTNAME=triana

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/19.0.0.1

export ORACLE_SID=triana

export ORACLE_UNQNAME=triana

export ORACLE_SERVICE=triana

export ORACLE_TERM=xterm

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

export DISPLAY=X.X.X.X:0 # 오라클 설치용으로 사용한 Display 환경변수. #

export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin




stty erase ^H




export ADUMP=$ORACLE_BASE/admin/triana/adump

export BDUMP=/u01/app/oracle/diag/rdbms/triana/triana/trace




PS1=oracle@`hostname`:'${PWD}> '




alias oh='cd $ORACLE_HOME'

alias alert='vi $BDUMP/alert_triana.log'

alias alertf='tail -30f $BDUMP/alert_triana.log'

alias bdump='cd $BDUMP'

alias oralog='cd $ORACLE_HOME/oramon/src/event'

alias log='cd $ORACLE_HOME/oramon/log'

alias sd='sqlplus / as sysdba'

alias cl='clear'

alias oradata='cd /u01/app/oracle/oradata/triana'

alias ds='$ORACLE_HOME/oramon/src/event/lth/d.sh'

alias rpt='cd $ORACLE_HOME/oramon/src/event/lth'

export NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949













그 다음은 Shell Script 내용과 Crontab 내용 입니다.







1-1. 물리백업 : RMAN 전체 백업 쉘스크립트(전체백업/주간)







$ cat /data/rman_bck/rman_bck.sh







#!/bin/ksh




. ~/.bash_profile

export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'




LOG=/data/rman_bck/log/rman_`/bin/date +'%Y%m%d'`.log

BCK_PATH=/data/rman_bck/bckdata




#######################################

## delete archive log file

#######################################

/usr/bin/find /archive/ -name "*.arc" -mtime +20 -exec /bin/rm {} \; # 21일 후 아카이브 로그 삭제 #




#######################################

## delete & move backup piece #기본적으로 이 스크립트는 매주 일요일마다 돌아가게 설정됨. #

#######################################

date >> $BCK_PATH/rman_bck.log # 백업 시작 전 지난주 백업 파일을 old 경로로 이동 #

/bin/rm -v /data/rman_bck_old/*.rman >> $BCK_PATH/rman_bck.log # 백업 시작 전 2주 전 백업 삭제 #

/bin/mv -v $BCK_PATH/*.rman /data/rman_bck_old >> $BCK_PATH/rman_bck.log

echo "====================================" >> $BCK_PATH/rman_bck.log




#######################################

## crosscheck, delete expired backup # 물리 파일을 먼저 지우고 Control 파일에 기록된 메타데이터도 #

####################################### # 삭제하기 위해서 crosscheck 수행 #

rman target / nocatalog << EOF >> $LOG 2>&1




run {

allocate channel c1 type disk;

crosscheck backup; # 물리 전체 백업 파일이 없는 논리 기록 식별 #

crosscheck archivelog all COMPLETED before 'sysdate-1/24'; # 아카이브 파일이 없는 논리 기록 식별 #

delete noprompt expired backup; # 식별된 expired backupset 기록 삭제 #

delete noprompt expired archivelog all; # 식별된 expired archivelog 기록 삭제 #

delete noprompt archivelog until time 'sysdate-22'; # 22일 이상 지난 아카이브 로그 삭제 #

backup format '$BCK_PATH/dbf_%U_%T.rman'(database); # 데이터베이스 전체 백업(backupset) 수행 #

sql 'alter system archive log current'; # 백업 수행 후 백업 진행 간 쌓인 redo log 아카이브화 #

release channel c1;

}

exit

EOF




#######################################

## start rman archive log backup

#######################################

rman target / nocatalog << EOF2 >> $LOG 2>&1




run {

allocate channel c1 type disk;

sql 'alter system archive log current';

backup # 25시간 전부터 백업이 수행될 때까지의 모든 아카이브로그 백업 #

(archivelog

from time 'sysdate-(1+1/24)' until time 'sysdate - 3/1440'

format '$BCK_PATH/arc_%U_%T.rman'

);

release channel c1;

}




EOF2




# RMAN 전체 백업 스크립트 내용 끝 #













1-2 물리백업 : RMAN 전체 백업 크론탭 설정




$ crontab -l

##############################

### RMAN Backup ###

##############################



10 20 * * 0 /data/rman_bck/rman_bck.sh > /dev/null 2>&1







# 아래부터는 일일백업(아카이브 로그백업) 내용 #



















1-3 물리백업 : RMAN 아카이브 로그 백업 쉘스크립트(아카이브/일일)







$ cat /data/rman_bck/archive_bck.sh







#!/bin/ksh




. ~/.bash_profile

export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'




LOG=/data/rman_bck/log/rman_`/bin/date +'%Y%m%d'`.log

BCK_PATH=/data/rman_bck/bckdata




#######################################

## delete archive log file # 8일 이상 지난 아카이브 로그 파일 삭제 #

#######################################

/usr/bin/find /archive/ -name "*.arc" -mtime +7 -exec /bin/rm {} \;




#######################################

## crosscheck, delete expired backup # 실제 파일 존재 여부와 Control 파일 내 논리기록 비교 #

#######################################

rman target / nocatalog << EOF >> $LOG 2>&1




run {

allocate channel c1 type disk;

crosscheck backup;

crosscheck archivelog all COMPLETED before 'sysdate-1/24';

delete noprompt expired backup;

delete noprompt expired archivelog all;

delete noprompt archivelog until time 'sysdate-22';

sql 'alter system archive log current';

release channel c1;

}

exit

EOF




#######################################

## start rman backup # 26시간 전부터 현재까지의 아카이브 로그 백업 #

#######################################

rman target / nocatalog << EOF2 >> $LOG 2>&1




run {

allocate channel c1 type disk;

sql 'alter system archive log current';

backup

(archivelog

from time 'sysdate-(1+2/24)' until time 'sysdate - 3/1440'

format '$BCK_PATH/arc_%U_%T.rman'

);

release channel c1;

}

exit

EOF2







# RMAN 아카이브 로그 백업 스크립트 내용 끝 #







1-4. 물리백업 : RMAN 아카이브 백업 크론탭 설정










$ crontab -l

##############################

### RMAN Backup ###

##############################

10 20 * * 1,2,3,4,5,6 /data/rman_bck/archive_bck.sh > /dev/null 2>&1







# 물리백업 RMAN 아카이브 백업 크론탭 내용 끝 #



















2-1. 물리백업 : 수동백업을 이용한 백업 스크립트







&#8203;&#65279;#!/bin/bash




_BCK_DIR=/oracle/app/oracle/product/11.2.0/dbhome_1/oralog/bck

_LOGFILE=$_BCK_DIR/backup_`date +%y%m%d`.log




. ~/.bash_profile




rm $_BCK_DIR/*.tmp

rm $_BCK_DIR/*.sql

rm $_BCK_DIR/*.lst




echo Hot Backup start : `date` > $_LOGFILE




$ORACLE_HOME/bin/sqlplus "/as sysdba" <> $_LOGFILE




set echo off

prompt #######################

prompt ## BEGIN/END Scripts ##

prompt #######################




set lines 132 pages 1000 trims on heading off feedback off time on




select 'alter tablespace ' || tablespace_name || ' begin backup;'

from dba_tablespaces where contents!='TEMPORARY';

spo $_BCK_DIR/bbackup.tmp

/

spo off




select 'alter tablespace ' || tablespace_name || ' end backup;'

from dba_tablespaces where contents!='TEMPORARY';

spo $_BCK_DIR/ebackup.tmp

/

spo off




prompt ###################

prompt ## DATAFILE LIST ##

prompt ###################




col file_name for a50

col dest for a50

col jjj for a100




select

file_name || ' ' || '/home/orabackup/datafile/'||substr(file_name, instr(file_name, '/',-1)+1, length(file_name)) jjj

from dba_data_files

order by 1;

spo $_BCK_DIR/file.tmp

/

spo off

exit

EOF0







cat $_BCK_DIR/bbackup.tmp | grep alter | grep -v SQL > $_BCK_DIR/bbackup.sql

##echo exit >> $_BCK_DIR/bbackup.sql

cat $_BCK_DIR/ebackup.tmp | grep alter | grep -v SQL > $_BCK_DIR/ebackup.sql

##echo exit >> $_BCK_DIR/ebackup.sql

sed -e '1,2d' -e '$d' $_BCK_DIR/file.tmp > $_BCK_DIR/file.lst




tail -v $_BCK_DIR/*up.sql >> $_LOGFILE




$ORACLE_HOME/bin/sqlplus "/as sysdba" <> $_LOGFILE




prompt ##################

prompt ## BEGIN backup ##

prompt ##################




alter system switch logfile;

@$_BCK_DIR/bbackup.sql

exit

EOF1




awk '{print $2}' $_BCK_DIR/file.lst | while read DEL_LIST

do

ftp -n <open X.X.X.X # 원격지 백업 파일 저장용 서버에 접속하여 지난 주 백업을 삭제 #

user [username] *********

passive

del $DEL_LIST

bye

EOF2

done




echo ###################### >> $_LOGFILE

echo ## UPLOAD DATAFILES ## >> $_LOGFILE

echo ###################### >> $_LOGFILE

echo `date` >> $_LOGFILE




cat $_BCK_DIR/file.lst | while read FILE_LIST

do

ftp -n <open X.X.X.X # 원격지 백업 파일 저장용 서버를 열어 이번주 백업 파일 전송 #

user [username] *********

passive

ha

bi

prompt

put $FILE_LIST

bye

EOF3

done




$ORACLE_HOME/bin/sqlplus "/as sysdba" <> $_LOGFILE




prompt ################

prompt ## END backup ##

prompt ################




@$_BCK_DIR/ebackup.sql

alter system switch logfile;

alter database backup controlfile to trace as '$_BCK_DIR/control.trc' reuse;

alter database backup controlfile to '$_BCK_DIR/control_bck.ctl' reuse;

exit

EOF4




ftp -n <open X.X.X.X # 원격지 백업 파일 저장용 서버에 CONTROL에 대한 백업 파일(.trc) 전송 #

user [username] *********

passive

ha

bi

prompt

lcd $_BCK_DIR

cd /home/orabackup

mput control*

bye

EOF5




echo ######################## >> $_LOGFILE

echo ## Archive log backup ## >> $_LOGFILE

echo ######################## >> $_LOGFILE

echo `date` >> $_LOGFILE




find /oraarch/*.dbf -name '1_*_772932672.dbf' -mtime -9 | sort $8 > # DB ID or Archive 파일명 수정 #




$_BCK_DIR/arc_file.lst

tar -cv -T $_BCK_DIR/arc_file.lst -f /oraarch/arclog_`date +%y%m%d`.tar >> $_LOGFILE

gzip /oraarch/arclog_`date +%y%m%d`.tar




ftp -n <open X.X.X.X # 원격지 백업 파일 저장용 서버에 묶은 Archive Log 파일 전송 #

user [username] *********

passive

ha

bi

prompt

lcd /oraarch

cd /home/orabackup/arch

prompt

mdel arclog_*.tar.gz

prompt

put arclog_`date +%y%m%d`.tar.gz

bye

EOF6




find /oraarch -name '1_*_772932672.dbf' -mtime +32 -exec rm -f {} \;




echo Hot Backup end : `date` >> $_LOGFILE







# 물리백업 수동 스크립트 내용 끝 #










2-2 물리백업 : 수동백업을 이용한 백업 크론탭







$ crontab -l

############################

## Oracle On-line Backup #

############################

30 3 * * 0 /oracle/app/oracle/product/11.2.0/dbhome_1/oralog/bck/hot_bck.sh >> /dev/null




# 물리백업 수동 크론탭 내용 끝 #













3-1. 논리백업 : datapump을 이용한 백업 쉘스크립트










$ cat /share/backup/dump/backup.sh




#!/bin/bash




#######################################

### Oracle Data Pump Export Backup ###

#######################################

_DATE=`date '+%Y%m%d%H'`

_BCK=/share/backup/dump

_BCK_OLD=/share/backup/dump_bck




. ~/.bash_profile

find ${_BCK}/ -name 'full_*.tar.gz' -mtime +6 -exec mv {} ${_BCK_OLD} \;

find ${_BCK}/ -name 'full_*.log' -mtime +6 -exec mv {} ${_BCK_OLD} \;

find ${_BCK_OLD}/ -name 'full_*.tar.gz' -mtime +20 -exec rm {} \;

find ${_BCK_OLD}/ -name 'full_*.dmp.gz' -mtime +20 -exec rm {} \;




rm -r ${_BCK}/full_*_f




$ORACLE_HOME/bin/expdp triana/triana directory=everyday schemas=triana parallel=8 dumpfile=full%U.dmp logfile=full_${_DATE}.log # DB 유저 패스워드 입력, Directory Object 설정 필요 #




mkdir -p ${_BCK}/full_${_DATE}_f

mv ${_BCK}/full??.dmp ${_BCK}/full_${_DATE}_f

tar -zcvf ${_BCK}/full_${_DATE}.tar.gz ${_BCK}/full_${_DATE}_f




date >> ${_BCK}/full_${_DATE}.log




# 논리백업 스크립트 내용 끝 #










3-2. 논리백업 : Datapump 백업을 이용한 백업 크론탭







$ crontab -l




#######################################

### Oracle Data Pump Export Backup ###

#######################################

30 12,18 * * * /share/backup/dump/backup.sh > /share/backup/dump/backup.log




# 논리백업 크론탭 내용 끝 #



관련글 : 없음 글쓴시간 : 2021/05/21 23:31 from 122.32.218.68

  오라클 백업 개념 목록보기 새글 쓰기 지우기 응답글 쓰기 글 수정 오라클 silent 설치  
BACKRUSH  유닉스명령  다음  자료실  Ascii Table   원격접속  달력,시간   프로세스  
지하철노선   RFC문서   SUN FAQ   SUN FAQ1   C메뉴얼   PHP메뉴얼   너구리   아스키월드 아이피서치