Welcome 微信登录

首页 / 数据库 / MySQL / Catalog下的RMAN增量备份SHELL脚本

在执行脚本之前,先修改几个参数值:修改控制文件的保存时间,从默认的7天改成14天SQL> show parameter controlSQL> alter system set control_file_record_keep_time=14 scope=both; 开启控制文件的自动备份,开启之后在数据库备份或者数据文件(比如添加数据文件)有修改的时候都会自动备份控制文件和spfile文件。configure controlfile autobackup on;当数据库兼容性设置为大于等于10.0.0时,尽管在没有0级备份情况做1级的增量备份实际上是一个全备,但是这个全备也是1级的,不能用作1级积累增量备份的基础备份,这个是在设计备份策略的时候要注意的问题。 在存放catalog的实例上创建catalog 目录:1.创建Catalog所需要的表空间SQL>create tablespace ts_catalog datafile  "/u01/app/Oracle/oradata/orcl/catalog_ts.dbf" size 1024M;2.创建RMAN用户并授权SQL>create user catalog identified by catalog default tablespace  ts_atalog;SQL>grant recovery_catalog_owner to catalog; 查看角色所拥有的权限: select * from dba_sys_privs where grantee="RECOVERY_CATALOG_OWNER";3.创建恢复目录$ rman target / catalog catalog/catalog@catalog1;Recovery Manager: Release 10.2.0.1.0 - Production on Thu Jul 15 12:03:16 2010Copyright (c) 1982, 2005, Oracle.  All rights reserved.connected to target database: ORCL (DBID=1248423599)connected to recovery catalog databaseRMAN> create catalog tablespace ts_catalog;recovery catalog created如果此处报错:ORACLE error from recovery catalog database: ORA-00955: name is already used by an existing object可以用命令删除catalog,再创建:RMAN> drop catalog;recovery catalog owner is CATALOGenter DROP CATALOG command again to confirm catalog removalRMAN> drop catalogrecovery catalog droppedRMAN> register database;database registered in recovery catalogstarting full resync of recovery catalogfull resync completeRMAN>差异增量备份有3个级别: 0级:相当于全备,不同的是0级可用于增量备份,全备不行。1级:备份自上次0级备份以来的数据。2级:备份自上次备份以来的数据。脚本的增量备份策略: 周日0级备份,周四1级备份,其他2级备份。Shell 脚本:#+--------------------------------------------------------------+#|(C) 2011 LEISHIFEI All Right Reserved.#+--------------------------------------------------------------+#|File        :incremental_hot_database_backup.sh                      #|Source      :$Source$#|Description :Rman nocatalog full backup for Oracle 10g #|             linux or aix.#+--------------------------------------------------------------+#|Authors     :leishifei                                  #+--------------------------------------------------------------+#|Date        :$Date$#|Version     :$Revision$#+--------------------------------------------------------------+#!/bin/ksh export LANG=en_USBACKUP_DATE=`date +%d`RMAN_LOG_FILE=${0}.outTODAY=`date`USER=`id|cut -d "(" -f2|cut -d ")" -f1`echo "-----------------$TODAY-------------------">$RMAN_LOG_FILEORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1export ORACLE_HOMERMAN=$ORACLE_HOME/bin/rmanexport RMANORACLE_SID=orclexport ORACLE_SIDORACLE_USER=oracleexport ORACLE_USERecho "ORACLE_SID: $ORACLE_SID">>$RMAN_LOG_FILEecho "ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILEecho "ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILEecho "------------------------------------------------">>$RMAN_LOG_FILEecho "BACKUP DATABASE BEGIN......">>$RMAN_LOG_FILEecho "                   ">>$RMAN_LOG_FILEchmod 666 $RMAN_LOG_FILEWEEK_DAILY=`date +%a`case  "$WEEK_DAILY" in       "Mon")            BAK_LEVEL=2            ;;       "Tue")            BAK_LEVEL=2            ;;       "Wed")            BAK_LEVEL=2            ;;       "Thu")            BAK_LEVEL=1            ;;       "Fri")            BAK_LEVEL=2            ;;       "Sat")            BAK_LEVEL=2            ;;       "Sun")            BAK_LEVEL=0            ;;       "*")            BAK_LEVEL=erroresacexport BAK_LEVEL=$BAK_LEVEL echo "Today is : $WEEK_DAILY  incremental level= $BAK_LEVEL">>$RMAN_LOG_FILERUN_STR="BAK_LEVEL=$BAK_LEVELexport BAK_LEVELORACLE_HOME=$ORACLE_HOMEexport ORACLE_HOMEORACLE_SID=$ORACLE_SIDexport ORACLE_SID$RMAN TARGET sys/oracle CATALOG catalog/catalog@catalog1  msglog $RMAN_LOG_FILE append <<EOFrun{allocate channel c1 type disk;allocate channel c2 type disk;backup  incremental level= $BAK_LEVEL  skip inaccessible filesperset 5 Database format="/u01/backup/orcl_lev"$BAK_LEVEL"_%U_%T"  tag="orcl_lev"$BAK_LEVEL"" ;sql "alter system archive log current";backup archivelog all tag="arc_bak" format="/u01/backup/arch_%U_%T" skip inaccessible  filesperset 5 not  backed up 1 times  delete input;backup current controlfile tag="bak_ctlfile" format="/u01/backup/ctl_file_%U_%T";backup spfile tag="spfile" format="/u01/backup/ORCL_spfile_%U_%T";release channel c2;release channel c1;}report obsolete; delete noprompt obsolete; crosscheck backup; delete noprompt expired backup;list backup summary; resync catalog;EOF"#+--------------------------------------------------------------+#| Initiate the command string #+--------------------------------------------------------------+if [ "$CUSER" = "root" ] then     echo "Root Command String: $RUN_STR" >> $RMAN_LOG_FILE         su - $ORACLE_USER -c "$RUN_STR" >> $RMAN_LOG_FILE     RSTAT=$? else     echo "User Command String: $RUN_STR" >> $RMAN_LOG_FILE         /bin/sh -c "$RUN_STR" >> $RMAN_LOG_FILE     RSTAT=$? fi #+--------------------------------------------------------------+#| Log the completion of this script.#+--------------------------------------------------------------+if [ "$RSTAT" = "0" ] then     LOGMSG="ended successfully" else     LOGMSG="ended in error" fi echo >> $RMAN_LOG_FILE echo Script $0 >> $RMAN_LOG_FILE echo -------- $LOGMSG on `date` -------- >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE exit $RSTAT #+--------------------------------------------------------------+#| The end.#+--------------------------------------------------------------+将该备份脚本添加到crontab,定时执行:$ crontab -l00 23 * * * /usr/local/admin/scripts/incremental_hotbackup.sh这个脚本,备份集可以通过设定保存策略定期删除,但是备份的归档文件无法删除。 所以还需要定期的删除备份的归档文件,一般保存15天。 shell 脚本如下,添加到crontab 里定时执行就可以了。#+--------------------------------------------------------------+#|(C) 2011 LEISHIFEI All Right Reserved.#+--------------------------------------------------------------+#|File        :del_archive_backup.sh                      #|Source      :$Source$#|Description :Rman nocatalog full backup for Oracle 10g #|             linux or aix.#+--------------------------------------------------------------+#|Authors     :leishifei                                  #+--------------------------------------------------------------+#|Date        :$Date$#|Version     :$Revision$#+--------------------------------------------------------------+#!/bin/kshPATH=/usr/bin:/usr/ucb:/etc:.:/usr/X/bin:/binexport PATHfind /u02/rman_cata_backup -mtime +15 -name "arch_*" -exec rm {} ;#+--------------------------------------------------------------+#| The end.#+--------------------------------------------------------------+这里的路径需要根据自己的情况做相应修改。 将该备份脚本添加到crontab,定时执行:$ crontab -l00 03 * * * /usr/local/admin/scripts/del_archive_backup.shOracle数据库服务器 初始用户名密码Oracle 10g Data Guard 环境缺少log_archive_config 参数导致归档路径被禁用相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数