Catalog下的RMAN增量备份SHELL脚本

在执行脚本之前,先修改几个参数值:

修改控制文件的保存时间,从默认的7天改成14天

SQL> show parameter control

SQL> 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 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: ORCL (DBID=1248423599)

connected to recovery catalog database

RMAN> 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 CATALOG

enter DROP CATALOG command again to confirm catalog removal

RMAN> drop catalog

recovery catalog dropped

RMAN> register database;

database registered in recovery catalog

starting full resync of recovery catalog

full resync complete

RMAN>

差异增量备份有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_US

BACKUP_DATE=`date +%d`

RMAN_LOG_FILE=${0}.out

TODAY=`date`

USER=`id|cut -d "(" -f2|cut -d ")" -f1`

echo "-----------------$TODAY-------------------">$RMAN_LOG_FILE

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

export ORACLE_HOME

RMAN=$ORACLE_HOME/bin/rman

export RMAN

ORACLE_SID=orcl

export ORACLE_SID

ORACLE_USER=oracle

export ORACLE_USER

echo "ORACLE_SID: $ORACLE_SID">>$RMAN_LOG_FILE

echo "ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE

echo "ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE

echo "------------------------------------------------">>$RMAN_LOG_FILE

echo "BACKUP DATABASE BEGIN......">>$RMAN_LOG_FILE

echo "                   ">>$RMAN_LOG_FILE

chmod 666 $RMAN_LOG_FILE

WEEK_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=error

esac

export BAK_LEVEL=$BAK_LEVEL 

echo "Today is : $WEEK_DAILY  incremental level= $BAK_LEVEL">>$RMAN_LOG_FILE

RUN_STR="

BAK_LEVEL=$BAK_LEVEL

export BAK_LEVEL

ORACLE_HOME=$ORACLE_HOME

export ORACLE_HOME

ORACLE_SID=$ORACLE_SID

export ORACLE_SID

$RMAN TARGET sys/oracle CATALOG catalog/catalog@catalog1  msglog $RMAN_LOG_FILE append <<EOF

run

{

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 -l

00 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/ksh

PATH=/usr/bin:/usr/ucb:/etc:.:/usr/X/bin:/bin

export PATH

find /u02/rman_cata_backup -mtime +15 -name "arch_*" -exec rm {} /;

#+--------------------------------------------------------------+

#| The end.

#+--------------------------------------------------------------+

这里的路径需要根据自己的情况做相应修改。 

将该备份脚本添加到crontab,定时执行:

$ crontab -l

00 03 * * * /usr/local/admin/scripts/del_archive_backup.sh

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值