rman备份脚本shell版

1、数据库全备到硬盘

[[email protected] scripts]$ cat rman_backup.sh  
source /home/oracle/.bash_profile  
rman target / log=/home/oracle/backup/backupall_rman.log<<EOF  
run  
{  
allocate channel ch1 device type disk;  #分配通道  
allocate channel ch2 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 ch1;  
release channel ch2;  
}  
EOF

2、增量备份脚本

0级增量

[[email protected] scripts]$ cat rman_backup_level0.sh  
source /home/oracle/.bash_profile  
rman target / log=/home/oracle/backup/backupall_rman.log<<EOF  
run  
{  
allocate channel ch1 device type disk;  #分配通道  
allocate channel ch2 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 ch1;  
release channel ch2;  
}  
EOF

     1级增量

[[email protected] scripts]$ cat rman_backup_level1.sh  
source /home/oracle/.bash_profile  
rman target / log=/home/oracle/backup/backupall_rman.log<<EOF  
run  
{  
allocate channel ch1 device type disk;  #分配通道  
allocate channel ch2 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 ch1;  
release channel ch2;  
}  
EOF

注意:1级备份需要在0级备份的基础上执行。

3、支持全备和增量备份

[[email protected] 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 'ch1' TYPE DISK maxpiecesize=${MAXPIECESIZE};  
ALLOCATE CHANNEL 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};  
set limit channel ch1 readrate=10240;  
set limit channel ch1 kbytes=4096000;  
set limit channel ch2 readrate=10240;  
set limit channel ch2 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 ch1;  
RELEASE CHANNEL ch2;  
}  
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
时间: 2024-11-08 21:59:13

rman备份脚本shell版的相关文章

rman备份脚本

在数据库中启用块跟踪 alter database enable block change tracking: alter database enable block change tracking using file '/u01/app/oracle/track/blockchange.trc': 取消块跟踪 alter database disable block change tracking 查看是否启动块跟踪 SQL> select * from v$block_change_tra

Oracle 11g R2 RAC RMAN备份脚本示例

一.将RAC切换成归档模式 1. 修改数据库的归档模式,通常在安装RAC的时候都会配置归档并且使用闪回区,已经配置过归档下面的方式可以略过. SQL> alter system set cluster_database=false scope=spfile sid='*'; 2. 关闭所有实例(两边都要shutdown) SQL> shutdown immediate 或直接关闭所有实例   $ srvctl stop database -d orcl 3. 在任意一个实例上将数据库启动到mo

RMAN备份脚本执行遇到RMAN-03002,06091问题处理

一 问题描述 客户说RMAN备份脚本执行有的时候报错,有的时候正常!!! 远程登陆客户环境,查询最后一次备份的日志报错信息,得到 RMAN-03002: failure of delete command at xxx   RMAN-06091: no channel allocated for maintenance (of an appropriate type) 二 参考链接 https://www.linuxidc.com/Linux/2013-01/78144.htm Encounte

ORCLE RMAN备份脚本

1.Linux下oracle备份脚本 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export PATH=$PATH:$ORACLE_HOME/bin: export NLS_LANG=AMERICAN_AMERICA.zhs16gbk export ORACLE_SID=orcl rman target / nocatalog log=/tmp/rman_fu

Oracle Rman备份脚本与自动删除重复备份文件

#!/bin/sh source /home/oracle/.bash_profile if [ -z $1 ] then echo "Please Input a number,Usage: 0|1|2" exit else RMAN_LEVEL=$1 fi export ORACLE_SID=xxxx export TODAY=`date '+%Y%m%d'` export RMAN_DIR=/backup/archivelog/rman/$ORACLE_SID/$TODAY-$R

oracle数据库中rman备份脚本非常实用

查询字符集 SQL> select * from nls_database_parameters; NLS_CHARACTERSETAL32UTF8 备份时字符集很重要,不然会出乱码 一.0级备份(全备)红色是要修改的,根据个人的存放位置. [[email protected] script]$ cat db_bak0.rman run{    configure retention policy to recovery window of 8 days;    configure contro

rman 备份脚本

[[email protected] ~]$ ls Desktop oracle_backup.rman oracle_backup.sh [[email protected] ~]$ cat oracle_backup.rman run{ CONFIGURE BACKUP OPTIMIZATION ON; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; C

一周RMAN备份脚本

#! /bin/bash#crontab---->00 20 * * 0 su - oracle -c '/scripts/oracle_full_backup.sh'#crontab---->00 20 * * 1-6 su - oracle -c '/scripts/oracle_inc_backup.sh'export BACKUP_DIR=/backupexport ORACLE_HOME=/oracle/oracle/product/11.2.0/db_1#exec >>

xtrabackup一键自动化备份脚本 V2 版【原创】

备份文件路径        backdir=/ASSET.innobackupex mysql用来备份用户   user=用户名 mysql用户的密码     pass=密码 输出的信息保存路径   logfile=/var/www/html/index.html [[email protected] ~]# cat innobackupex.v2.sh #!/bin/bash backdir=/ASSET.innobackupex user=用户名 pass=密码 logfile=/var/w