博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

oracle11gRAC环境使用RMAN增量备份方案

Posted on 2015-10-15 15:40  徐正柱-  阅读(3383)  评论(0编辑  收藏  举报

转摘:http://blog.itpub.net/29819001/viewspace-1320977/

[oracle@zx ~]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Thu Oct 16 18:20:57 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: zx (DBID=2731354802)

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name zx are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_zx1.f'; # default
show all


开始设置备份策略
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/controlfile/%F';

修改后的
RMAN> show all;

RMAN configuration parameters for database with db_unique_name zx are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/controlfile/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_zx1.f'; # default
show all


开启块跟踪
[oracle@zx ~]$ sqlplus / as sysdba
SQL> alter database enable block change tracking using file '+RCY1' ;
查看
SQL> col filename for a50
SQL> select * from v$block_change_tracking;
STATUS     FILENAME                                         BYTES
---------- -------------------------------------------------- ----------
ENABLED    +RCY1/zx/changetracking/ctf.298.861133721        11599872


*****************************************************************************
增量备份
只备份从上次备份发生变化的块。
1)增量备份首先做全备:
0,1,2,3,4,5
2)增量备份的好处是加快备份时间。
3)oracle增量备份有两种:1.差异增量备份 2.累计增量备份
4)0级备份就是全被,做其他级别的备份前必须有0级,否则系统会做0级备份。
5)差异增量备份:backup incremental level 0 format
        只要等于或小于自己的级别,前面的备份就可以作为备份的起点。
日  一  二  三  四  五  六  日
0   2   2   1   2   2    2   0
全  一  一  三  一  一  一  全
周一周二只备份一天就行了,但周三需要把周一二三的都备一遍,因为它级别比前面的备份低,周四就只备一天就行了,周日又要做全备了。
比如周三早晨挂了,需要周日周一周二才能恢复到周三早晨,但如果周四早晨就只需要周日,周三就能恢复。周六挂需要周日,周三,周四,周五四个备份集。
6)累计增量备份:backup incremental level 0 cumulative format
只看备份级别比自己低的。
日  一  二  三  四  五  六  日
0   2   2   1   2   2   2   0
全  一  二  三  一  二  三  全
周日全备,周一备份一天的,周二备份2天的。周三备份周一二三的。
周四只备份一天的,周五备份两天的,周六备份3天的。周日全备。
假如周三恢复,需要0级别和一个到周二 的备份就行了。恢复更快。
周六挂需要周日,周三,周五三个备份集。
*************************************************************************
zx数据库使用差异增量备份
日  一  二  三  四  五  六  日
0   2   2   1   2   2   2   0
全  一  一  三  一  一  一  全
周日全备,周一周二只备份一天就行了,但周三需要把周一二三的都备一遍,因为它级别比前面的备份低,周四周五周六就只备一天就行了,周日又要做全备了。
编辑备份脚本  
脚本存放位置/home/oracle/scripts/rman/bin/    
日志存放位置/home/oracle/scripts/rman/log/
备份存放位置+rcy1/backup/hrman_bak/

  • 热备0级脚本

[oracle@zx bin]$ cat hrman0.sh 

#!/bin/bash
export ORACLE_SID=zx1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$ORACLE_HOME/bin
rman target / <<eof 
run{
sql'alter system switch logfile';
allocate channel c1 type disk;
allocate channel c2 type disk;
crosscheck archivelog all;
backup as compressed backupset incremental level 0 format '+rcy1/backup/hrman_bak/%d_%T_%U_0.bak' database plus archivelog;
delete noprompt obsolete;
}
quit;
EOF
hrman0.sh

 

#!/bin/bash
current_day=`date +%Y%m%d`
incr_day=incr$current_day
mkdir /data2/backup/$incr_day
export ORACLE_SID=assedb
export ORACLE_BASE=/oracode/oracle
export ORACLE_HOME=/oracode/oracle/ora11g
export PATH=$ORACLE_HOME/bin
rman target / <<EOF
run{
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data2/backup/$incr_day/PID-%F.ctl';
sql'alter system switch logfile';
allocate channel c1 type disk;
allocate channel c2 type disk;
crosscheck archivelog all;
backup as compressed backupset incremental level 0 format '/data2/backup/$incr_day/%d_%T_%U_0.bak' database;
sql 'alter system archive log current';
backup archivelog all format '/data2/backup/$incr_day/arc_%n_%T_%U.arg';
delete noprompt obsolete;
release channel c1;
release channel c2;
}
quit;
EOF
hrman00.sh样例

 

  • 热备1级脚本

[oracle@zx bin]$ cat hrman1.sh 

#!/bin/bash
export ORACLE_SID=zx1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$ORACLE_HOME/bin
rman target / <<eof 
run{
sql'alter system switch logfile';
allocate channel c1 type disk;
allocate channel c2 type disk;
crosscheck archivelog all;
backup as compressed backupset incremental level 1 format '+rcy1/backup/hrman_bak/%d_%T_%U_1.bak' database plus archivelog;
delete noprompt obsolete;
}
quit;
EOF
hrman1.sh
#!/bin/bash
current_day=`date +%Y%m%d`
incr_day=incr$current_day
mkdir /data2/backup/$incr_day
export ORACLE_SID=assedb
export ORACLE_BASE=/oracode/oracle
export ORACLE_HOME=/oracode/oracle/ora11g
export PATH=$ORACLE_HOME/bin
rman target / <<EOF
run{
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data2/backup/$incr_day/PID-%F.ctl';
sql'alter system switch logfile';
allocate channel c1 type disk;
allocate channel c2 type disk;
crosscheck archivelog all;
backup as compressed backupset incremental level 1 format '/data2/backup/$incr_day/%d_%T_%U_1.bak' database;
sql 'alter system archive log current';
backup archivelog all format '/data2/backup/$incr_day/arc_%n_%T_%U.arg';
delete noprompt obsolete;
release channel c1;
release channel c2;
}
quit;
EOF
hrman11.sh样例

 

  • 热备2级脚本

[oracle@zx bin]$ cat hrman2.sh

#!/bin/bash
export ORACLE_SID=zx1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$ORACLE_HOME/bin
rman target / <<eof 
run{
sql'alter system switch logfile';
allocate channel c1 type disk;
allocate channel c2 type disk;
crosscheck archivelog all;
backup as compressed backupset incremental level 2 format '+rcy1/backup/hrman_bak/%d_%T_%U_2.bak' database plus archivelog;
delete noprompt obsolete;
}
quit;
EOF
hrman.2sh

 

#!/bin/bash
current_day=`date +%Y%m%d`
incr_day=incr$current_day
mkdir /data2/backup/$incr_day
export ORACLE_SID=assedb
export ORACLE_BASE=/oracode/oracle
export ORACLE_HOME=/oracode/oracle/ora11g
export PATH=$ORACLE_HOME/bin
rman target / <<EOF
run{
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data2/backup/$incr_day/PID-%F.ctl';
sql'alter system switch logfile';
allocate channel c1 type disk;
allocate channel c2 type disk;
crosscheck archivelog all;
backup as compressed backupset incremental level 2 format '/data2/backup/$incr_day/%d_%T_%U_2.bak' database ;
sql 'alter system archive log current';
backup archivelog all format '/data2/backup/$incr_day/arc_%n_%T_%U.arg';
delete noprompt obsolete;
release channel c1;
release channel c2;
}
quit;
EOF
hrman22.sh样例


设置权限
[oracle@zx bin]$ chmod -R 777 hrman0.sh
[oracle@zx bin]$ chmod -R 777 hrman1.sh
[oracle@zx bin]$ chmod -R 777 hrman2.sh
[oracle@zx bin]$ ll
total 12
-rwxrwxrwx 1 oracle oinstall 468 Oct 21 17:03 hrman0.sh
-rwxrwxrwx 1 oracle oinstall 468 Oct 21 17:05 hrman1.sh
-rwxrwxrwx 1 oracle oinstall 468 Oct 21 17:06 hrman2.sh
配置作业
一个crontab文件中包含有六个字段: 
分钟 0-59 
小时 0-23 
月中的第几天 1-31 
月份 1 - 12 
星期几 0 - 6, with 0 = Sunday 


配置
[oracle@zx ~]$ crontab -e
查看
[oracle@zx ~]$ crontab -l
0 2 * * 0 sh /home/oracle/scripts/rman/bin/hrman0.sh  >> /home/oracle/scripts/rman/log/backup0.log 2>&1  
0 2 * * 3 sh /home/oracle/scripts/rman/bin/hrman1.sh  >>  /home/oracle/scripts/rman/log/backup1.log 2>&1 
0 2 * * 1,2,4,5,6 sh /home/oracle/scripts/rman/bin/hrman2.sh  >>  /home/oracle/scripts/rman/log/backup2.log 2>&1
日志变大可清空
[oracle@zx ~]$ cat /dev/null > /home/oracle/scripts/rman/log/backup0.log 
[oracle@zx ~]$ cat /dev/null > /home/oracle/scripts/rman/log/backup1.log 
[oracle@zx ~]$ cat /dev/null > /home/oracle/scripts/rman/log/backup2.log
[oracle@zx ~]$ ll /home/oracle/scripts/rman/log
total 432
-rwxrwxrwx    1 oracle   dba               0 Jul 15 16:12 backup0.log
-rwxrwxrwx    1 oracle   dba               0 Jul 15 16:12 backup1.log
-rwxrwxrwx    1 oracle   dba               0 Jul 15 16:12 backup2.log
 

在rman增量备份中,有差异增量和累积增量的概念

    1、概念

    差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式
    累积增量:是备份上级备份以来所有变化的块

    因为累积增量是备份上级备份以来所有变化的数据块,所以累积增量需要更多的备份时间,同时需要较小的恢复时间;而差异增量正好相反,它可以备份同级备份以来变化的数据块。所以会减少备份时间,但需要更多的恢复时间.在oracle 9中增量备份需要通过扫描整个数据库的数据块才能知道哪些数据块发生了变化,这是一个代价很大,时间很长的过程,而且由于增量备份形成多个不同的备份集,使恢复变得更加不可靠,所以增量备份在版本9中仍然不被推荐使用;在10g中,增量备份作了很大的改进,不需要再扫描所有数据块就能得知哪些数据块发生变化,从而大大提升备份效率。但这些却以牺牲磁盘i/o为代价,所以在oltp事务系统中还得衡量是否愿意以i/o为代价来保证安全及高可用性。10g还支持增量合并,增量备份可支持7级增量。

    2、备份策略及恢复

    以rman多级增量备份来作为备份策略例子:

    增量备份都需要一个0级备份来作为基础,0级备份与全备份的区别在于0级可以用来增量恢复,而全备份则不可以。

    备份策略:

    eg:我们对一星期做如下备份策略  ,那么差异增量只需要使用星期天的0级,星期三的一级,星期四、五的二级就可以恢复,累积增量则需要星期天的0级、星期三的1级,星期五的二级即可进行恢复。以上是一个星期的备份策略,如果做长期的备份策略则只需要把备份的时间延长即可得到新的备份策略,具体需要看自己备份及恢复能够接受的程度而顶,见最后的备份策略典型案例。

星期                 差异增量                累积增量
 
星期天              0级                          0级
 
星期一              2级                          2级
 
星期二              2级                          2级
 
星期三              1级                          1级
 
星期四              2级                          2级
 
星期五              2级                          2级
 
星期六              2级                          2级
 
星期天              0级                          0级
 

 

    备份命令如下:

    零级备份
    backup incremental level 0 database;
    一级差异增量
    backup incremental level 1 database;
    一级累计增量
    backup incremental level 1 cumulative database;

    备份策略典型案例:

    每半年做一个数据库的全备份(包括所有的数据和只读表空间)
    每一个月做一次零级备份(不包含只读表空间)
    每个星期做一次一级备份
    每天做一次二级备份

    任何数据库的更改需要重新同步CATALOG目录并重新备份(如添加数据文件)或重新备份(如修改表空间为只读)
    建议备份一段时间归档日志和定期备份归档到到磁带上

    全库备份脚本  

 run{
    allocate channel c1 type disk;
    allocate channel c2 type disk;
    allocate channel c3 type disk;
    backup full tag 'dbfull' format '/u01/oradata/backup/full%u_%s_%p' database
    include current controlfile;
    sql 'alter system archive log current';
    backup filesperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
    archivelog all delete input; #备份归档可选,可以单独定期备份
    release channel c1;
    release channel c2;
    release channel c3;
    }
 
    零级备份脚本   run{
    allocate channel c1 type disk;
    allocate channel c2 type disk;
    allocate channel c3 type disk;
    backup incremental level 0 tag 'db0' format '/u01/oradata/backup/db0%u_%s_%p'
    database skip readonly;
    sql 'alter system archive log current';
    backup filesperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
    archivelog all delete input; #备份归档可选,可以单独定期备份
    release channel c1;
    release channel c2;
    release channel c3;
    }
 

    一级备份脚本      run{
    allocate channel c1 type disk;
    allocate channel c2 type disk;
    allocate channel c3 type disk;
    backup incremental level 1 tag 'db1' format '/u01/oradata/backup/db1%u_%s_%p'
    database skip readonly;
    sql 'alter system archive log current';
    backup filesperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
    archivelog all delete input; #备份归档可选,可以单独定期备份
    release channel c1;
    release channel c2;
    release channel c3;
    }
 
  
    如果按照以上备份策略,则每天的所需要备份的数据量只有一天的改变量。而做恢复时最多要恢复当月的一个零级备份+三个一级备份+6个二级备份+当天的归档文件。                                     
增量备份说明