linux rman 备份脚本,rman备份脚本

#!/bin/bash

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

# Usage:

# backup_rman_v1.1.sh [all|repeat|sync]

# all: list all backup file.

# repeat: repeat level-1 increment backup.

# sync:    sync backup file to target database.

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

export ORACLE_HOME=/u01/app/11.2.0

export ORACLE_SID=health

export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${ORACLE_HOME}/ctx/lib

export PATH=$PATH:${ORACLE_HOME}/bin

#export NLS_LANG="American_america.zhs16gbk"

export NLS_LANG="American_america.al32utf8"

export ORACLE_OWNER=oracle

export backup_dir=/sda/backup

export log=/sda/backup/log

rsync_dir=$backup_dir #sync dir

controlfile_dir=$backup_dir/controlfile

username=oracle #target OS ,oracle user

password=go2north #target oracle user password

target_host=61.158.131.94

today_backup=`date +'%Y-%m-%d'`

mail_to_admin="zhaorupeng@yeah.net"

########set display color#########

white=$(echo -e "\e[39;40m")

green=$(echo -e "\e[36;40m")

red=$(echo -e "\e[31;40m")

purple=$(echo -e "\e[35;40m")

yellow=$(echo -e "\e[33;40m")

blue=$(echo -e "\e[34;40m")

########color set end ############

# data backup status.

# 0: backup failed.

# 2: default

# 9: success

backup_status=2

#database status check ,If it's not turn on,the value is 0,or else 1

ora_stat=`ps -ef | grep -i 'ora_smon_*' |grep -v grep| wc -l`

#database mode check,If it's archive mode,that value is 1,or else 0;

arch=`ps -ef | grep -i 'ora_arc_*' | grep -v grep | wc -l`

function open_database()

{

if [ "$ora_stat" = 0 ]; then

cat << EOF | $ORACLE_HOME/bin/sqlplus '/as sysdba'

shutdown immediate;

startup;

quit;

EOF

backup_status=2

if [ "$?" = 1 ]; then

echo "database unable strtup!"

backup_status=0

exit 1

fi

fi

}

function open_archive_mode()

{

if [ "$arch" = 0 ]; then #if arch=1,nothing,because it was already on archive mode

echo "****************open archive mode*************"

cat << EOF | $ORACLE_HOME/bin/sqlplus '/as sysdba'

shutdown immediate;

startup mount;

alter database archivelog;

alter database open;

quit;

EOF

fi

}

function return_initaliztion_mode()

{

if [ "$arch" = 0 -a "$backup_status" > 0 ]; then

#if arch=1,nothing,because initialization mode is archive mode

echo "********* return initialization database mode**********"

cat << EOF | $ORACLE_HOME/bin/sqlplus '/as sysdba'

shutdown immediate;

startup mount;

alter database noarchivelog;

alter database open;

quit;

EOF

fi

if [ "$?" = 0 ]; then

echo "return initalization database successfully."

fi

echo "************return initialization database mode *********" ;

}

function increment_backup_level_1() # incremental level-1 backup

{

#open_database

#open_archive_mode

echo "******** `date +'%Y%m%d'` Do level-1 increment backup....*********************" 2>&1;

cat << EOF | $ORACLE_HOME/bin/rman target / |tee $log/rman_increment_db_`date +'%y%m%d%H%M'`.log

configure maxsetsize to 20g;

configure controlfile autobackup on;

configure controlfile autobackup format for device type disk to '$controlfile_dir/%F';

run {

allocate channel c01 type disk;

backup incremental level 1 database format '$backup_dir/increment_db_%d_%s_%t_%p' tag="increment_db_`date +'%y%m%d%H%M'`";

release channel c01;

}

configure controlfile autobackup off;

crosscheck backup of database;

crosscheck archivelog all;

delete noprompt obsolete ;

delete noprompt expired backup;

delete noprompt backup completed before 'sysdate-30';

delete noprompt archivelog until time 'sysdate-14';

EOF

if [ "$?" = 0 ];then

echo "*******************level-1 backup completed!************************"

backup_status=9

else

echo "*****************level-1 backup databae failed,please contact oracle dba*******"

backup_status=0

fi

return $backup_status

#return_initaliztion_mode

}

function level_0_backup_database()

{

#open_database

#open_archive_mode

echo "************* Do level-0 backup ****************"

cat << EOF | $ORACLE_HOME/bin/rman target / |tee $log/rman_full_db_`date +'%y%m%d%H%M'`.log

configure retention policy to redundancy 7;

configure maxsetsize to 20g;

configure controlfile autobackup on;

configure controlfile autobackup format for device type disk to '$controlfile_dir/%F';

crosscheck backup of database;

crosscheck archivelog all;

delete noprompt obsolete ;

delete noprompt expired backup;

delete noprompt backup completed before 'sysdate-7';

delete noprompt archivelog until time 'sysdate-7';

run {

allocate channel c1 type disk;

backup incremental level 0 database format '$backup_dir/full_db_%d_%s_%t_%p' tag="full_db_`date +'%y%m%d%H%M'`";

release channel c1 ;

}

configure controlfile autobackup off;

quit;

EOF

if [ "$?" = 0 ];then

echo "*******************level-0 backup completed!************************"

backup_status=9

else

echo "******************level-0 backup databae failed,please contact oracle dba*******"

backup_status=0

fi

return $backup_status

#return_initaliztion_mode

}

function repeat_increment_backup()

{

if [ "$#" = 0 ]; then

exit 0

else

if [ "$1" = "repeat" ]; then

echo "************do database increment backup again**************"

increment_backup_level_1 $ORACLE_HOME $log $backup_dir

echo "************repeat increment backup completed!**************"

else

echo "command error,please use parameter 'repeat'"

exit 0

fi

fi

}

# sync target database backup files #

function sync()

{

ping $target_host -c 1 > /dev/null # test network link #

if [ $? != 0 ] ; then

echo "sync host:$red $target_host $white link failed!,please check network."

exit 1

fi

if [ -f /usr/bin/rsync ]; then

#check resync command #

cat << EOF > sync

#!/usr/bin/expect

spawn /usr/bin/rsync -avzu $rsync_dir/ $username@$target_host:$rsync_dir

expect "password:"

send "$password\n";

send "quit\n";

interact

EOF

echo "********copy backup files to target database********"

if [ -f sync -a -f /usr/bin/expect ]; then

chmod +x sync

./sync

rm -rf ./sync

#list sync files

backup_file=`ls -ltR --full-time $backup_dir/ | egrep -i "increment_|c-" | grep -i $today_backup | awk '{print $6 " " substr($7,1,8) " " $9}'`

echo "sync files:"

echo "$blue"

j=0

for i in $backup_file

do

((j++))

a[$j]=$i

if [ $j = 3 ]; then

echo "${a[`expr $j - 2`]} ${a[`expr $j - 1`]} ${a[$j]}"

j=0

fi

done

echo "$white"

echo " transtion has succeed.please check the backup files on target database."

exit 0

else

echo "command expect not found, please install Tcl/expect"

exit 1

fi

else

echo "command rsync not found,please install!"

exit 1

fi

}

if [ -f $log/autobak_`date +'%Y%m%d'`.log ]; then

rm -rf $log/autobak_`date +'%Y%m%d'`.log

fi

(

##### backup level #####

level_0_backup_status=`find $backup_dir/ -name 'full_db_*'| grep -i full_db |grep -v grep | wc -l` 2>&1

level_1_backup_status=`ls -l --full-time $backup_dir/ |grep -i 'increment_db_*'| grep -i $today_backup|grep -v grep | wc -l` 2>&1

#Always perform 0 backup

level_0_backup_status=0

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

if [ $level_0_backup_status = 0 -a $backup_status = 2 ]; then

level_0_backup_database

backup_status=$?

fi

if [ $level_1_backup_status = 0 -a $backup_status = 2 ]; then

increment_backup_level_1

backup_status=$?

fi

##### backup level end ######

# ############Today's database backup information##########

# check today's backup status #

check_backup=`ls -l --full-time $backup_dir/ | egrep -i "increment_db_|full_db_" | awk '{print $6}' | grep -i $today_backup | wc -l`

# check today's controlfile backup information #

control_file=`ls -lt --full-time $controlfile_dir/ | grep -i "c-*" | grep -i $today_backup | awk '{print $6 " " substr($7,1,8) " " $9}'`

# check today's increment backup information #

backup_file_info=`ls -lt --full-time $backup_dir/ | egrep -i "increment_db_|full_db_" | grep -i $today_backup | awk '{print $6 " " substr($7,1,8) " " $9}'`

log_file_info=`ls -lt --full-time $log/ | egrep -i "increment_db_|full_db_" | grep -i $today_backup | awk '{print $6 " " substr($7,1,8) " " $9}'`

if [ "$1" = "all" ] ; then

backup_file_info=`ls -lt --full-time $backup_dir/ | egrep -i "increment_db_|full_db" | awk '{print $6 " " substr($7,1,8) " " $9}'`

control_file=`ls -lt --full-time $controlfile_dir/ | grep -i "c-*"| awk '{print $6 " " substr($7,1,8) " " $9}'`

fi

# print today's backup information including controlfile and log information #

if [ $check_backup -ge 0 ]; then

if [ "$1" = "repeat" ] ; then

repeat_increment_backup $1

else

echo " ############Today's database backup information########## "

if [ "$1" = "all" ]; then

today_backup=`ls -l --full-time $backup_dir/ | grep -i full_db_* | awk '{print $6}'`

echo "List date $purple ${today_backup[0]} $white level-0 backup database after file information"

else

echo "Date $purple $today_backup $white database backup is completed."

fi

echo "backup file directory: $backup_dir"

echo "backup file information: $green"

echo ""

j=0

for i in $backup_file_info

do

((j++))

a[$j]=$i

if [ $j = 3 ]; then

echo "${a[`expr $j - 2`]} ${a[`expr $j - 1`]} $backup_dir/${a[$j]}"

j=0

fi

done

echo "$white"

echo "Controlfile information:$yellow"

echo ""

j=0

for p in $control_file;do

((j++))

a[$j]=$p

if [ $j = 3 ] ; then

echo "${a[`expr $j - 2`]} ${a[`expr $j - 1`]} $controlfile_dir/${a[$j]}"

j=0

fi

done

echo "$white"

echo "log information:$blue"

echo ""

j=0

for p in $log_file_info;do

((j++))

a[$j]=$p

if [ $j = 3 ] ; then

echo "${a[`expr $j - 2`]} ${a[`expr $j - 1`]} $log/${a[$j]}"

j=0

fi

done

echo "$white"

echo "If you want increment backup database again,please use \"repeat\" parameter"

echo " ############Today database backup information the end ########## "

fi

fi

# end print backup information #

# copy backup file #

# if [ "$1" = "sync" ] ; then

#    backup_status=9

# fi

# if [ "$backup_status" = 9 ]; then

#    sync

# else

# echo "Today's Backup file is synced. please check whether it's in the target database."

# echo "If you want to sync again,please use \"sync\" parameter."

# exit 0

# fi

echo "If you want to view all backup information,Please use \"all\" parameter."

) | tee -a $log/autobak_`date +'%Y%m%d'`.log

mail -s "`date +'%Y%m%d'` database backup information" $mail_to_admin < $log/autobak_`date +'%Y%m%d'`.log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值