#!/bin/ksh
#################################################################################
# automatic backup full database everyday using rman for Indonesia Bandung
# by Encle 2007-7-20 15:22:17
#
# $ crontab -e
# 30 20 * * * /opt/backup/rman_backup.sh
#
# recover full database:
# $ rman target /
# rman> shutdown immediate
# rman> startup mount
# rman> run{
# --SET UNTIL TIME = '2007-05-09.11:44:00'; 基于时间点的不完全恢复
# restore database;
# recover database;
# sql "alter database open";
# }
#
#################################################################################
## set env,need modify
ORACLE_HOME=/opt/oracle/db01/app/oracle/product/9.2.0;export ORACLE_HOME
ORACLE_SID=ORCL;export ORACLE_SID
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1; export NLS_LANG
TARGET_LOGIN="target /";export TARGET_LOGIN
CATALOG_LOGIN="nocatalog";export TARGET_LOGIN
BACKUP_BASE="/opt/backup";export BACKUP_BASE
## set env,don't modify
PATH=.:$ORACLE_HOME/bin:/bin:/sbin:/usr/sbin:$PATH;export PATH
NLS_DATE_LANGUAGE=AMERICAN; export NLS_DATE_LANGUAGE
NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';export NLS_DATE_FORMAT;
BACKUP_TARGET="${BACKUP_BASE}/data";export BACKUP_TARGET
BACKUP_LOGDIR="${BACKUP_BASE}/log";export BACKUP_LOGDIR
BACKUP_LOG="log ${BACKUP_LOGDIR}/rman_`date +%Y%m%d`.log";export BACKUP_LOG
RMAN_LOG="${BACKUP_LOGDIR}/rman_backup.log";export RMAN_LOG
## write log
echo "" >> ${RMAN_LOG}
echo "########################Begin at `date +%Y-%m-%d.%H:%M:%S`#############################" >> ${RMAN_LOG}
## whether the responsible directory exist
if ! test -d ${BACKUP_TARGET}
then
mkdir ${BACKUP_TARGET}
fi
if ! test -d ${BACKUP_LOGDIR}
then
mkdir ${BACKUP_LOGDIR}
fi
## write log
echo "TARGET_LOGIN=${TARGET_LOGIN}" >> ${RMAN_LOG}
echo "CATALOG_LOGIN=${CATALOG_LOGIN}" >> ${RMAN_LOG}
echo "BACKUP_TARGET=${BACKUP_TARGET}" >> ${RMAN_LOG}
echo "BACKUP_LOGDIR=${BACKUP_LOGDIR}" >> ${RMAN_LOG}
echo "BACKUP_LOG=${BACKUP_LOG}" >> ${RMAN_LOG}
echo "RMAN_LOG=${RMAN_LOG}" >> ${RMAN_LOG}
## rename old backup
cd ${BACKUP_TARGET}
mv fulldb_backup.bak fulldb_backup.old >> ${RMAN_LOG}
mv arch_backup.bak arch_backup.old >> ${RMAN_LOG}
## backup start
$ORACLE_HOME/bin/rman $TARGET_LOGIN $CATALOG_LOGIN $BACKUP_LOG<<-EOF >> ${RMAN_LOG} 2>&1
## if nocatalog,open controlfile autobackup
CONFIGURE CONTROLFILE AUTOBACKUP ON;
## backup datafile/spfile/controlfile
backup full database include current controlfile format '$BACKUP_TARGET/fulldb_backup.bak';
## backup archivelog
run {
sql 'alter system archive log current';
crosscheck archivelog all;
backup archivelog all delete input format '$BACKUP_TARGET/arch_backup.bak' ;
}
#delete obsolete and expired backup and archivelog
run {
delete noprompt obsolete;
crosscheck archivelog all;
delete noprompt expired archivelog all;
crosscheck backup;
delete noprompt expired backup;
}
exit
EOF
## automatic ftp to another server
echo "" >> ${RMAN_LOG}
echo "begin ftp at `date +%Y-%m-%d.%H:%M:%S`" >> ${RMAN_LOG}
cd ${BACKUP_TARGET}
ftp -n <open 10.249.1.70
user root nec
prompt off
cd /backup
mput *.bak
close
bye
!
echo "end ftp at `date +%Y-%m-%d.%H:%M:%S`" >> ${RMAN_LOG}
echo "##########################End at `date +%Y-%m-%d.%H:%M:%S`#############################" >> ${RMAN_LOG}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10881/viewspace-178086/ ,如需转载,请注明出处,否则将追究法律责任。