rman备份脚本shell版

  1. 云栖社区>
  2. 博客>
  3. 正文

rman备份脚本shell版

技术小甜 2017-11-23 20:02:00 浏览804
展开阅读全文

1、数据库全备到硬盘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[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 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级增量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[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 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级增量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[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 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、支持全备和增量备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
[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 '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






















本文转自lq201151CTO博客,原文链接:http://blog.51cto.com/liuqun/2051172 ,如需转载请自行联系原作者


网友评论

登录后评论
0/500
评论
技术小甜
+ 关注