ORACLE常用定时备份脚本

来源:这里教程网 时间:2026-03-03 16:54:35 作者:

[oracle@rac1 ~]$ crontab  -l0 13 * * * /home/oracle/dumpfile/datapump_exp.sh0 6 * * * /home/oracle/auto_clear_archivelog/auto_clear_archivelog.sh0 */3 * * * /home/oracle/auto_clear_archivelog/ auto_purge_recyclebin.sh30 2 * * * /home/oracle/rman_backup/scripts/backup.sh50 7 * * * /home/oracle/rman_backup/scripts/backup_archivelog.sh 1、数据库全库导出脚本 [oracle@rac1 dumpfile]$ cat datapump_exp.sh

#!/bin/sh
export MYDIR=/home/oracle/dumpfile
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_SID=prod1
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
export DAY_FORMAT=`date +'%Y%m%d%H%M'`
(
cd $MYDIR
echo "###################################################################################"
echo "`date` removing old files..." 2>&1;
find . -mtime +5 -name "prod_*.dmp" -exec rm -rf {} \;
find . -mtime +5 -name "prod_*.log" -exec rm -rf {} \; 
echo "`date` removed" 2>&1
echo "`date` exporting fully ..." 2>&1
expdp \'sys/oracle@prod1 as sysdba\' DIRECTORY=MYDIR DUMPFILE=prod_${DAY_FORMAT}_%U.dmp LOGFILE=budget_${DAY_FORMAT}.log FULL=Y PARALLEL=8 COMPRESSION=ALL CLUSTER=N JOB_NAME=prod_exp_${DAY_FORMAT} 1>/dev/null 2>&1 
echo "`date` export done" 2>&1
)>>$MYDIR/expdp.log

注意前提: 新建逻辑目录,并在操作系统层面oracle用户创建对应的文件夹

[oracle@rac1:/home/oracle]$sqlplus / as sysdba
SQL> create directory MYDIR AS '/home/oracle/dumpfile';
针对sys/oracle@prod1 as sysdba中的prod1
tnsping测试ok
我这里是rac环境,在tnsnames.ora配置了prod1

2、数据库备份脚本[oracle@rac1:/home/oracle/rman_backup/scripts]$cat backup_sh

#!/bin/bash
RMAN_BACKUP_DIR=/home/oracle/rman_backup
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_SID=prod1
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin                                             
export MAXPIECESIZE=32G
export INCR_LEVEL=$((0))
export day=`date +%w`
export DAY_DATE=`date +'%Y%m%d'`
export DAY_FORMAT=`date +'%Y%m%d%H%M%S'`
export TAG_NAME=TAG_Incr${INCR_LEVEL}_${DAY_FORMAT}
echo "-----doing!!-----" >> $RMAN_BACKUP_DIR/rman_backup_log.log
rman log=$RMAN_BACKUP_DIR/rman_backup_log.log <<EOF
connect target /
run {
allocate channel 'ch1' TYPE DISK maxpiecesize=${MAXPIECESIZE};
allocate channel 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};
backup incremental level ${INCR_LEVEL} database tag ${TAG_NAME} format '${RMAN_BACKUP_DIR}/${ORACLE_SID}_${DAY_DATE}_db_%U';
sql 'alter system archive log current';
backup archivelog all format '${RMAN_BACKUP_DIR}/${ORACLE_SID}_${DAY_DATE}_arc_%U';
backup current controlfile format '${RMAN_BACKUP_DIR}/${ORACLE_SID}_${DAY_DATE}_ctl_%U';
release channel ch1;
release channel ch2;
}
exit;
EOF
echo `date '+%Y-%m-%d %H:%M:%S'` >> $RMAN_BACKUP_DIR/rman_backup_log.log
echo "-----done!!-----" >> $RMAN_BACKUP_DIR/rman_backup_log.log
cat $RMAN_BACKUP_DIR/rman_backup_log.log >> $RMAN_BACKUP_DIR/rman_backup_history.log
cd $RMAN_BACKUP_DIR
find . -mtime +7 -name "prod1_*" -exec rm -rf {} \;

3、归档日志备份脚本[oracle@rac1:/home/oracle/auto_clear_archivelog]$cat auto_clear_archivelog.sh

#!/bin/sh
LOG_DIR=/home/oracle/auto_clear_archivelog
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_SID=prod1
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
echo "-----doing!!-----" >> $LOG_DIR/rman_delete_archivelog.log
rman log=$LOG_DIR/rman_delete_archivelog.log target / <<EOF
delete force noprompt archivelog all completed before 'sysdate-2';
crosscheck archivelog all;
delete noprompt expired archivelog all;
exit;
EOF
echo `date '+%Y-%m-%d %H:%M:%S'` >> $LOG_DIR/rman_delete_archivelog.log
echo "-----done!!-----" >> $LOG_DIR/rman_delete_archivelog.log
cat $LOG_DIR/rman_delete_archivelog.log >> $LOG_DIR/delete_history.log

4、归档清理脚本 [oracle@rac1:/home/oracle/auto_clear_archivelog]$cat auto_clear_archivelog.sh

#!/bin/sh
LOG_DIR=/home/oracle/auto_clear_archivelog
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_SID=prod1
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
echo "-----doing!!-----" >> $LOG_DIR/rman_delete_archivelog.log
rman log=$LOG_DIR/rman_delete_archivelog.log target / <<EOF
delete force noprompt archivelog all completed before 'sysdate-2';
crosscheck archivelog all;
delete noprompt expired archivelog all;
exit;
EOF
echo `date '+%Y-%m-%d %H:%M:%S'` >> $LOG_DIR/rman_delete_archivelog.log
echo "-----done!!-----" >> $LOG_DIR/rman_delete_archivelog.log
cat $LOG_DIR/rman_delete_archivelog.log >> $LOG_DIR/delete_history.log

5、 参考脚本,可根据需要更改cat  backup.sh_bak

#!/bin/bash
RMAN_BACKUP_DIR=/home/oracle/rman_backup
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_SID=prod1
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin                                              
export MAXPIECESIZE=32G
export INCR_LEVEL=$((0))
export day=`date +%w`
if [ $day -eq 0 ] ; then
INCR_LEVEL=$((0))
fi
if [ $day -eq 1 ] ; then
INCR_LEVEL=$((2))
fi
if [ $day -eq 2 ] ; then
INCR_LEVEL=$((2))
fi
if [ $day -eq 3 ] ; then
INCR_LEVEL=$((1))
fi
if [ $day -eq 4 ] ; then
INCR_LEVEL=$((2))
fi
if [ $day -eq 5 ] ; then
INCR_LEVEL=$((2))
fi
if [ $day -eq 6 ] ; then
INCR_LEVEL=$((1))
fi
export DAY_DATE=`date +'%Y%m%d'`
export DAY_FORMAT=`date +'%Y%m%d%H%M%S'`
export TAG_NAME=TAG_Incr${INCR_LEVEL}_${DAY_FORMAT}
echo "-----doing!!-----" >> $RMAN_BACKUP_DIR/rman_backup_log.log
rman log=$RMAN_BACKUP_DIR/rman_backup_log.log <<EOF
connect target /
run {
allocate channel 'ch1' TYPE DISK maxpiecesize=${MAXPIECESIZE};
allocate channel 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};
backup incremental level ${INCR_LEVEL} database tag ${TAG_NAME} format '${RMAN_BACKUP_DIR}/${ORACLE_SID}_${DAY_DATE}_db_%U';
sql 'alter system archive log current';
backup archivelog all format '${RMAN_BACKUP_DIR}/${ORACLE_SID}_${DAY_DATE}_arc_%U' delete input;
backup current controlfile format '${RMAN_BACKUP_DIR}/${ORACLE_SID}_${DAY_DATE}_ctl_%U';
release channel ch1;
release channel ch2;
}
exit;
EOF
echo `date '+%Y-%m-%d %H:%M:%S'` >> $RMAN_BACKUP_DIR/rman_backup_log.log
echo "-----done!!-----" >> $RMAN_BACKUP_DIR/rman_backup_log.log
cat $RMAN_BACKUP_DIR/rman_backup_log.log >> $RMAN_BACKUP_DIR/rman_backup_history.log
cd $RMAN_BACKUP_DIR
find . -mtime +7 -name "prod1_*" -exec rm -rf {} \;

6、清空oracle表空间回收站cat auto_purge_recyclebin.sh

#!/bin/bash
source ~/.bash_profile
sqlplus -S /nolog > result.log<<EOF
#set heading off feedback off pagesize 0 verify off echo off
conn / as sysdba
PURGE tablespace tbs_cc user cc;
exit
EOF

相关推荐