oracle 11.2.0.3 rac集群rman周备份策略

  1 1.1备份策略
  2 周日执行0级的增量备份
  3 
  4 周一执行2级的增量备份
  5 
  6 周二执行2级的增量备份
  7 
  8 周三执行1级的增量备份
  9 
 10 周四执行2级的增量备份
 11 
 12 周五执行2级的增量备份
 13 
 14 周六执行2级的增量备份
 15 周日进行一次零级备份,周一、周二、进行二级备份;周三进行一级备份;周四、周五、周六进行二级备份。在执行备份的时候,我们考 虑将数据文件的全备和归档日志备份分开执行,避免造成一些不必要的麻烦。在进行全备的时候,由于RAC的两个节点是共享的所有数据文件,控制文件,所以我 们只连接其中的一个节点rac1来进行备份。在进行归档日志的备份的时候,由于归档日志并非共享,而是在每个节点本地存储的,所以我们需要分别连接到两个节 点进行归档日志的备份。为节省存储空间,将对备份后归档日志做定期删除。
 16 
 17 2.数据库备份脚本
 18 2.1 零级备份脚步(即全备)
 19 0级脚本如下: 
 20 
 21 cat >> /home/oracle/fullbackup/backup_lv0.sql <
 22 
 23 run{ 
 24 
 25 allocate channel c1 type disk maxpiecesize=3500m; 
 26 
 27 allocate channel c2 type disk maxpiecesize=3500m; 
 28 
 29 backup incremental level 0 database include current controlfile format '+DATA/frxdb/backupset/frxdb_%T_%s_%p.lv0' plus archivelog delete all input format '+DATA/frxdb/backupset/arch_%T_%s_%p.arc'; 
 30 
 31 release channel c1; 
 32 
 33 release channel c2; 
 34 
 35 }
 36 
 37  EOF  
 38 
 39 2.2 一级脚本如下: 
 40 cat >> /home/oracle/fullbackup/backup_lv1.sql <
 41 
 42 run {
 43 
 44 allocate channel c1 type disk maxpiecesize=3500m; 
 45 
 46 backup incremental level 1 database include current controlfile format '+DATA/frxdb/backupset/frxdb_%T_%s_%p.lv1'; 
 47 
 48 release channel c1; 
 49 
 50 } 
 51 
 52 EOF  
 53 
 54 2.3 二级脚本如下: 
 55 cat >> /home/oracle/fullbackup/backup_lv2.sql <
 56 
 57 run{
 58 
 59 allocate channel c1 type disk maxpiecesize=3500m; 
 60 
 61 backup incremental level 2 database include current controlfile format '+DATA/frxdb/backupset/frxdb_%T_%s_%p.lv2'; 
 62 
 63 release channel c1; 
 64 
 65 } 
 66 
 67 EOF
 68 
 69 3 自动备份
 70 3.1 自动备份脚本
 71 ########################################################################
 72 
 73 ##   rac__backup.sh      ##
 74 
 75 ##   created by ZHONGYI TECH   ##
 76 
 77 ##        2014-6-23                 ##
 78 
 79 #########################################################################
 80 
 81  
 82 
 83 #!/bin/sh 
 84 
 85 export LANG=en_US
 86 
 87 BACKUP_DATE=`date +%d`
 88 
 89 RMAN_LOG_FILE=${0).out
 90 
 91 TODAY=`date`
 92 
 93 CUSER=`id|cut -d "(" -f2|cut -d ")" -f1`
 94 
 95 echo "-----------------$TODAY-------------------">$RMAN_LOG_FILE
 96 
 97 ORACLE_HOME=/u01/app/oracle/product/11.2.0.3/db_1
 98 
 99 export ORACLE_HOME
100 
101 RMAN=$ORACLE_HOME/bin/rman
102 
103 export RMAN
104 
105 ORACLE_SID=frxdb
106 
107 export ORACLE_SID
108 
109 ORACLE_USER=oracle
110 
111 export ORACLE_USER
112 
113  
114 
115 echo "ORACLE_SID: $ORACLE_SID">>$RMAN_LOG_FILE
116 
117 echo "ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE
118 
119 echo "ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE
120 
121 echo "==========================================">>$RMAN_LOG_FILE
122 
123 echo "BACKUP DATABASE BEGIN......">>$RMAN_LOG_FILE
124 
125 echo "                   ">>$RMAN_LOG_FILE
126 
127 chmod 666 $RMAN_LOG_FILE
128 
129  
130 
131 WEEK_DAILY=`date +%a`
132 
133  
134 
135 case  "$WEEK_DAILY" in
136 
137        "Mon")
138 
139             BAK_LEVEL=2
140 
141             ;;
142 
143        "Tue")
144 
145             BAK_LEVEL=2
146 
147             ;;
148 
149        "Wed")
150 
151             BAK_LEVEL=1
152 
153             ;;
154 
155        "Thu")
156 
157             BAK_LEVEL=2
158 
159             ;;
160 
161        "Fri")
162 
163             BAK_LEVEL=2
164 
165             ;;
166 
167        "Sat")
168 
169             BAK_LEVEL=2
170 
171             ;;
172 
173        "Sun")
174 
175             BAK_LEVEL=0
176 
177             ;;
178 
179        "*")
180 
181             BAK_LEVEL=error
182 
183 esac
184 
185 export  BAK_LEVEL=$BAK_LEVEL 
186 
187 echo "Today is : $WEEK_DAILY  incremental level= $BAK_LEVEL">>$RMAN_LOG_FILE
188 
189  
190 
191 RUN_STR="
192 
193 BAK_LEVEL=$BAK_LEVEL
194 
195 export BAK_LEVEL
196 
197 ORACLE_HOME=$ORACLE_HOME
198 
199 export ORACLE_HOME
200 
201 ORACLE_SID=$ORACLE_SID
202 
203 export ORACLE_SID
204 
205 $RMAN  nocatalog TARGET sys/system@rac1   msglog $RMAN_LOG_FILE append <
206 
207 run
208 
209 {
210 
211 allocate channel c1  type disk connect  'sys/system@rac1';
212 
213 allocate channel c2  type disk connect  'sys/system@rac2';
214 
215  
216 
217 backup  incremental level= $BAK_LEVEL Database format='+DATA/frxdb/backupset/frxdb_lev"$BAK_LEVEL"_%U_%T'  tag='frxdb_lev"$BAK_LEVEL"' ;
218 
219  
220 
221 sql 'alter system archive log current';
222 
223  
224 
225 backup archivelog all tag='arc_bak' format='+DATA/frxdb/backupset/arch_%U_%T'  not  backed up 1 times  delete input;
226 
227  
228 
229 backup current controlfile tag='bak_ctlfile' format='+DATA/frxdb/backupset/ctl_file_%U_%T';
230 
231 backup spfile tag='spfile' format='+DATA/frxdb/backupset/frxdb_spfile_%U_%T';
232 
233 release channel c1;
234 
235 release channel c2;
236 
237 }
238 
239 allocate channel for maintenance device type disk connect  'sys/system@rac1';
240 
241 allocate channel for maintenance device type disk connect  'sys/system@rac2';
242 
243  
244 
245 report obsolete; 
246 
247 delete noprompt obsolete; 
248 
249 crosscheck backup; 
250 
251 delete noprompt expired backup;
252 
253 Release channel;
254 
255 list backup summary; 
256 
257  
258 
259 EOF
260 
261 "
262 
263  # Initiate the command string 
264 
265  
266 
267 if [ "$CUSER" = "root" ] 
268 
269 then 
270 
271     echo "Root Command String: $RUN_STR" >> $RMAN_LOG_FILE     
272 
273     su - $ORACLE_USER -c "$RUN_STR" >> $RMAN_LOG_FILE 
274 
275     RSTAT=$? 
276 
277 else 
278 
279     echo "User Command String: $RUN_STR" >> $RMAN_LOG_FILE     
280 
281     /bin/sh -c "$RUN_STR" >> $RMAN_LOG_FILE 
282 
283     RSTAT=$? 
284 
285 fi 
286 
287  
288 
289 # --------------------------------------------------------------------------- 
290 
291 # Log the completion of this script. 
292 
293 # --------------------------------------------------------------------------- 
294 
295 if [ "$RSTAT" = "0" ] 
296 
297 then 
298 
299     LOGMSG="backup finished successfully" 
300 
301 else 
302 
303     LOGMSG="backup ended in error" 
304 
305 fi 
306 
307  
308 
309 echo >> $RMAN_LOG_FILE 
310 
311 echo Script $0 >> $RMAN_LOG_FILE 
312 
313 echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE 
314 
315 echo >> $RMAN_LOG_FILE 
316 
317 echo $LOGMSG | mailx -v -s "oracle backup info" [email protected] < $RMAN_LOG_FILE 
318 
319  
320 
321 exit $RSTAT 
322 
323  
324 
325 3.2加入备份计划任务
326 用cron创建定时执行任务 ,要使用cron必须启动crond服务,最好还设置cron为开机启动(非本主题内容) 执行crontab –e 添加以下语句 
327 
328 00 03 * * * sh /home/oracle/fullbackup/rac_backup.sh
329 
330 计划任务实现每天凌晨3点实施备份工作。
331 
332 4 恢复策略
333 针对一周内任意一天出现数据库故障需要恢复可遵循如下恢复策略:
334 
335 周一恢复:使用周日全备份
336 
337 周二恢复:周日全备+周一增备
338 
339 周三恢复:周日全备+周一、二增备
340 
341 周四恢复:周日全备+周三增备
342 
343 周五恢复:周日+周三、四备
344 
345 周六恢复:周日+周三、周四、周五增备
346 
347 周日恢复:周日+周三、四、五、六增备
348 
349 更低粒度恢复选择使用闪回功能(数据误删除、误操作等)基于时间点、scn等做数据恢复。
350 
351 本处将结束简单的恢复操作,即没有归档丢失,同时存在完整可用的备份下进行的恢复操作。在恢复之前,需要将数据库关闭,通过rman启动实例并准备恢复。
352 
353 $ srvctl stop database -d frxdb
354 
355 因为备份放在共享磁盘上,所以可在单个节点进行恢复,在任一节点:
356 
357 rman target /
358 
359 rman >startup mount
360 
361 rman>restore database;
362 
363 rman>recover database;
364 
365 如归档连续,操作将成功,可直接执行以下命令打开数据库:
366 
367 rman>sql ‘alter database open’; 
368 
369 注:恢复完成后立即执行备份操作。

猜你喜欢

转载自www.cnblogs.com/vmsysjack/p/12323101.html