本文是一个shell脚本。主要用于Oracle 数据库备份。默认情况下,在周一晚上进行全备。其他时间进行累积增量备份。
使用方法:
假如脚本保存名为: oracle_backup.sh
使用方法为 oracle_backup.sh -p $ORACLE_DIRECTORY -L $BACKUP_LEVEL
ORACLE_DIRECTORY 可从dba_directories 里查询所得。
BACKUP_LEVEL: 0(全备) 1 增量。
#!/bin/sh ############################################################### #: This script is used to backup Oracle database with RMAN. # #: A full backup will be taken early moring on Monday . # #: I recomment that the incremental backup should be taken on # #: every day except Monday. # #: Made by Halberd(Asiainfo-PMO) , 20160827 # #: Modify Records: # #: 1. # #: Thu May 419:42:54 CST 2017 # #: halberd # # add getopts . make the scripts more flexible # ############################################################### #: initial environment source ~/.bash_profile #: judge if parameters are offered [ $# == 0 ] && echo -e "Usage :: $0 -[pl]n p --> backup path n l --> backup level with 0(full) or 1(incremental) n examples:: n $0 -p /home/oracle -l 1" && exit 1 #: variables setting #: attach the arguments values to their variables while getopts p:l: option docase"$option"in p) BACK_PATH="$OPTARG" ;; l) if [ "$OPTARG" == 0 ] ; then LEVEL=0elif [ "$OPTARG" == 1 ] ; then LEVEL=1elseecho"Level 0 or 1 is recommended. You should better choose 0 for full backup or 1 for incremental backup" exit 1fi ;; ?) echo"Usage: [-p <PATH>] [-l]"echo"-p : the path in which backup files will be allocated"echo"-l : RMAN backup level" exit 1 ;; esacdone #: initial other basic variables md=`date +%m%d` weekday=`date +%w` if [ -z "$BACK_PATH" ] ; then BACK_PATH="$ORACLE_HOME"/dbs echo -e "WARNING :: The backup piecies will be stored in $ORACLE_HOME/dbs .n "fiif [ -z "$LEVEL" ] ; thenif [ "$weekday" == 1 ] ; then LEVEL=0else LEVEL=1fifi BACK_FORMAT="$BACK_PATH"/db"$LEVEL"‘_%d_%T_%u‘echo"BACKUP_PATH: $BACK_PATH"echo"BACKUP_LEVEL:""$LEVEL"echo"BACKUP_FORMAT: $BACK_FORMAT" #: generate the rman commands back_comm=‘ run{ allocate channel c1 type disk;n allocate channel c2 type disk;n allocate channel c3 type disk;n backup as compressed backupset incremental level ‘"$LEVEL"‘ format ‘‘"$BACK_FORMAT"‘‘ database include current controlfile plus archivelog delete input;n release channel c1;n release channel c2;n release channel c3;n }n crosscheck archivelog all;n delete noprompt expired archivelog all;n report obsolete;n delete noprompt obsolete;n exit ‘ #: execute rman backup echo -e $back_comm| rman target sys/oracle log "$BACK_PATH"/rman_"$md".log exit
原文:http://www.cnblogs.com/halberd-lee/p/7807047.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!