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" shiyuan@1pay1.com < $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 注:恢复完成后立即执行备份操作。