1、数据库全备到硬盘
[oracle@centos7 scripts]$ cat rman_backup.sh
source /home/oracle/.bash_profile
rman target / log=/home/oracle/backup/backupall_rman.log<<EOF
run
{
allocate channel ch2 device type disk; #分配通道
allocate channel ch3 device type disk;
sql 'alter system archive log current'; #归档当前日志
backup database format '/home/oracle/backup/db_%d_%T_%U'; #备份数据文件
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/backup/arch_%t_%s' delete all input; #备份归档文件
backup format '/home/oracle/backup/con_%s_%p' current controlfile; #备份控制文件
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt backup of database completed before 'sysdate -15'; #删除15天之前的数据库备份集
delete noprompt archivelog all;
delete noprompt backup of archivelog all completed before 'sysdate -15'; #删除15天之前的归档备份集
release channel ch2;
release channel ch3;
}
EOF
2、增量备份脚本
0级增量
[oracle@centos7 scripts]$ cat rman_backup_level0.sh
source /home/oracle/.bash_profile
rman target / log=/home/oracle/backup/backupall_rman.log<<EOF
run
{
allocate channel ch2 device type disk; #分配通道
allocate channel ch3 device type disk;
sql 'alter system archive log current'; #归档当前日志
backup incremental level 0 database format '/home/oracle/backup/db_level0_%d_%T_%U'; #备份数据文件
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/backup/arch_level0_%t_%s' delete all input; #备份归档文件
backup format '/home/oracle/backup/con_level0_%s_%p' current controlfile; #备份控制文件
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt backup of database completed before 'sysdate -15'; #删除15天之前的数据库备份集
delete noprompt archivelog all;
delete noprompt backup of archivelog all completed before 'sysdate -15'; #删除15天之前的归档备份集
release channel ch2;
release channel ch3;
}
EOF
1级增量
[oracle@centos7 scripts]$ cat rman_backup_level1.sh
source /home/oracle/.bash_profile
rman target / log=/home/oracle/backup/backupall_rman.log<<EOF
run
{
allocate channel ch2 device type disk; #分配通道
allocate channel ch3 device type disk;
sql 'alter system archive log current'; #归档当前日志
backup incremental level 1 database format '/home/oracle/backup/db_level1_%d_%T_%U'; #备份数据文件
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/backup/arch_level1_%t_%s' delete all input; #备份归档文件
backup format '/home/oracle/backup/con_level1_%s_%p' current controlfile; #备份控制文件
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt backup of database completed before 'sysdate -15'; #删除15天之前的数据库备份集
delete noprompt archivelog all;
delete noprompt backup of archivelog all completed before 'sysdate -15'; #删除15天之前的归档备份集
release channel ch2;
release channel ch3;
}
EOF
注意:1级备份需要在0级备份的基础上执行。
3、支持全备和增量备份
[oracle@centos7 scripts]$ cat db_back_rman.sh
##===========================================================
## db_bak_rman.sh
## created by Robinson
## 2017/12/15
## usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>
## BACKUP_LEVEL:
## F: full backup
## 0: level 0
## 1: level 1
##============================================================
#!/bin/bash
# User specific environment and startup programs
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
ORACLE_SID=${1}; export ORACLE_SID
RMAN_LEVEL=${2}; export RMAN_LEVEL
TIMESTAMP=`date +%Y%m%d%H%M`; export TIMESTAMP
DATE=`date +%Y%m%d`; export DATE
RMAN_DIR=/u02/database/${ORACLE_SID}/backup/rman; export RMAN_DIR
RMAN_DATA=${RMAN_DIR}/${DATE}; export RMAN_DATA
#RMAN_LOG=$RMAN_DATA/log; export RMAN_LOG
RMAN_LOG=/u02/database/${ORACLE_SID}/backup/rman/log export RMAN_LOG
# Check rman level
#======================================================================
if [ "$RMAN_LEVEL" == "F" ];
then unset INCR_LVL
BACKUP_TYPE=full
else
INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}"
BACKUP_TYPE=lev${RMAN_LEVEL}
fi
RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}; export RMAN_FILE
SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log; export SSH_LOG
MAXPIECESIZE=4G; export MAXPIECESIZE
#Check RMAN Backup Path
#=========================================================================
if ! test -d ${RMAN_DATA}
then
mkdir -p ${RMAN_DATA}
fi
echo "---------------------------------" >>${SSH_LOG}
echo " " >>${SSH_LOG}
echo "Rman Begin to Working ........." >>${SSH_LOG}
echo "Begin time at:" `date` --`date +%Y%m%d%H%M` >>${SSH_LOG}
#Startup rman to backup
#=============================================================================
$ORACLE_HOME/bin/rman log=${RMAN_FILE}.log <<EOF
connect target /
run {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${RMAN_FILE}_%F';
ALLOCATE CHANNEL 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};
ALLOCATE CHANNEL 'ch3' TYPE DISK maxpiecesize=${MAXPIECESIZE};
set limit channel ch2 readrate=10240;
set limit channel ch2 kbytes=4096000;
set limit channel ch3 readrate=10240;
set limit channel ch3 kbytes=4096000;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
BACKUP
#AS COMPRESSED BACKUPSET
${INCR_LVL}
DATABASE FORMAT '${RMAN_FILE}_%U' TAG '${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL FORMAT '${RMAN_FILE}_arc_%U' TAG '${ORACLE_SID}_arc_${TIMESTAMP}'
DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL ch2;
RELEASE CHANNEL ch3;
}
sql "alter database backup controlfile to ''${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak''";
exit;
EOF
RC=$?
cat ${RMAN_FILE}.log >>${SSH_LOG}
echo "Rman Stop working @ time:"`date` `date +%Y%m%d%H%M` >>${SSH_LOG}
echo >>${SSH_LOG}
echo "------------------------" >>${SSH_LOG}
echo "------ Disk Space ------" >>${SSH_LOG}
df -h >>${SSH_LOG}
echo >>${SSH_LOG}
if [ $RC -ne "0" ]; then
echo "------ error ------" >>${SSH_LOG}
else
echo "------ no error found during RMAN backup peroid------" >>${SSH_LOG}
rm -rf ${RMAN_FILE}.log
fi
#Remove old backup than 3 days
#============================================================================
RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d "3 days ago"`; export RMDIR
echo >>${SSH_LOG}
echo -e "------Remove old backup than 3 days ------\n" >>${SSH_LOG}
if test -d ${RMDIR}
then
rm -rf ${RMDIR}
RC=$?
fi
echo >>${SSH_LOG}
if [ $RC -ne "0" ]; then
echo -e "------ Remove old backup exception------ \n" >>${SSH_LOG}
else
echo -e "------ no error found during remove old backup set peroid------ \n" >>${SSH_LOG}
fi
exit
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。