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 注:恢复完成后立即执行备份操作。