rman脚本备份数据库:

第一步:写三个脚本,分别0 级,1级,2级备份

1. vi .bakl0.sh

# user env
source /home/oracle/.bash_profile
export ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1
export ORACLE_SID=E812
export BACK_DATE=`date +%Y%m%d`
export BACKUP_DATE_PATH=/OraBack
mkdir -p ${BACKUP_DATE_PATH}/${BACK_DATE}
mkdir -p ${BACKUP_DATE_PATH}/archivelogbak/${BACK_DATE}
echo "-----Database path OK----"
rman target / nocatalog msglog=/u01/orabak_log/bakl0_$BACK_DATE.log<<EOF
run{
allocate channel d1 type disk maxpiecesize 50G;
allocate channel d2 type disk maxpiecesize 50G;
allocate channel d3 type disk maxpiecesize 50G;
backup  format '$BACKUP_DATE_PATH/${BACK_DATE}/level0_%d_%U.bak' incremental level 0 tag level0_backup database;
sql 'alter system archive log current';
backup archivelog all format '$BACKUP_DATE_PATH/archivelogbak/${BACK_DATE}/log_%d_%U.bak' delete all input;
release channel d3;
release channel d2;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
crosscheck archivelog all;
delete noprompt expired archivelog all;
exit
EOF
# end

2.vi bak1.sh

# user env
source /home/oracle/.bash_profile
export ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1
export ORACLE_SID=E812
export BACK_DATE=`date +%Y%m%d`
export BACKUP_DATE_PATH=/OraBack
mkdir -p ${BACKUP_DATE_PATH}/${BACK_DATE}
mkdir -p ${BACKUP_DATE_PATH}/archivelogbak/${BACK_DATE}
echo "-----Database path OK----"
rman target / nocatalog msglog=/u01/orabak_log/bakl1_$BACK_DATE.log<<EOF
run{
allocate channel d1 type disk maxpiecesize 50G;
allocate channel d2 type disk maxpiecesize 50G;
allocate channel d3 type disk maxpiecesize 50G;
backup  format '$BACKUP_DATE_PATH/${BACK_DATE}/level1_%d_%U.bak' incremental level 1 tag level1_backup database;
sql 'alter system archive log current';
backup archivelog all format '$BACKUP_DATE_PATH/archivelogbak/${BACK_DATE}/log_%d_%U.bak' delete all input;
release channel d3;
release channel d2;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
crosscheck archivelog all;
delete noprompt expired archivelog all;
exit
EOF
# end

3.vi bakl2.sh

# user env
source /home/oracle/.bash_profile
export ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1
export ORACLE_SID=E812
export BACK_DATE=`date +%Y%m%d`
export BACKUP_DATE_PATH=/OraBack
mkdir -p ${BACKUP_DATE_PATH}/${BACK_DATE}
mkdir -p ${BACKUP_DATE_PATH}/archivelogbak/${BACK_DATE}
echo "-----Database path OK----"
rman target / nocatalog msglog=/u01/orabak_log/bakl2_$BACK_DATE.log<<EOF
run{
allocate channel d1 type disk maxpiecesize 50G;
allocate channel d2 type disk maxpiecesize 50G;
allocate channel d3 type disk maxpiecesize 50G;
backup  format '$BACKUP_DATE_PATH/${BACK_DATE}/level2_%d_%U.bak' incremental level 2 tag level2_backup database;
sql 'alter system archive log current';
backup archivelog all format '$BACKUP_DATE_PATH/archivelogbak/${BACK_DATE}/log_%d_%U.bak' delete all input;
release channel d3;
release channel d2;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
crosscheck archivelog all;
delete noprompt expired archivelog all;
exit
EOF
# end

第二步,修改用户组别和权限

chown oracle:oinstall bakl0.sh

chown oracle:oinstall bakl1.sh

chown oracle:oinstall bakl1.sh

chmod 755 bakl0.sh

chmod 755 bakl1.sh

chmod  755 bak2.sh

第三步,添加计划任务

su - oracle

crontab -e

如下添加内容:

30 0 * * 0 /u01/orabak_script/bakl0.sh
30 0 * * 3 /u01/orabak_script/bakl1.sh
30 0 * * 1 /u01/orabak_script/bakl2.sh
30 0 * * 2 /u01/orabak_script/bakl2.sh
30 0 * * 4 /u01/orabak_script/bakl2.sh
30 0 * * 5 /u01/orabak_script/bakl2.sh
30 0 * * 6 /u01/orabak_script/bakl2.sh
30 23 * * * /usr/bin/find /OraBack/ ! -name 'temp*' -mtime +14 -exec rm -rf {} \;