RMAN热备份

RMAN热备份

1       概述
Recovery Manager(RMAN)是一种用于备份(backup)、还原(restore)和恢复(recover)数据库 的 Oracle 工具。RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据库或数据库部件,如表空间、数据文件、控制文件、归档文件以 及Spfile参数文件。RMAN也允许您进行增量数据块级别的备份,增量RMAN备份是时间和空间有效的,因为他们只备份自上次备份以来有变化的那些数 据块。而且,通过RMAN提供的接口,第三方的备份与恢复软件如veritas将提供更强大的备份与恢复的管理功能。通过RMAN,也提供了其它更多功 能,如数据库的克隆、采用RMAN建立备用数据库、利用RMAN备份与移动裸设备(RAW)上的文件等工作将变得更方便简单。9i的RMAN通过增强的自 动配置与管理功能,以及特有的块级别的恢复,将使备份与恢复工作变得更加快捷与完美。9i的RMAN有如下特征特性:

·自动的备份与恢复

·方便的备份归档日志

·自动检测新的数据文件

·支持增量备份

·最大限度的减少备份与恢复的错误

·减少恢复的时间

·在热备份中不会产生额外的redo日志

·腐烂数据块的自动检测

·并行的备份与恢复操作

·在线备份时,表空间不用置于备份模式

可以看到,在以上的一些特性中,显示了RMAN强大的功能与好处,以上功能的实现,是因为RMAN是块级别的备份与恢复,备份与恢复发生在数据库块级别,可以通过比较数据块而获得一致性的数据块,可以避免备份没有用过的块,可以检验块是否腐烂等块级别的问题。

2       启动与运行RMAN要求
2.1    进程与内存要求
更多的进程的需要

大池的分配

2.2    基本环境变量需求
ORACLE_SID, ORACLE_HOME, PATH, NLS_LANG, 如果用到了基于时间的备份与    恢复,需要另外设置NLS_DATE_FORMAT

2.3    权限要求
需要SYSDBA系统权限,如果是本地,可以采用OS认证,远程需要采用密码文件认证

2.4    版本要求
·RMAN 工具版本与目标数据库必须是同一个版本,如果使用了恢复目录,还需要注意

·创建RMAN 恢复目录的脚本版本必须等于或大于恢复目录所在数据库的版本

·创建RMAN 恢复目录的脚本版本必须等于或大于目标数据库的版本

3       RMAN的自动配置
Oracle 9i可以配置一些参数如通道,备份保持策略等信息,通过一次设定可以多次使用,

而且,设置中的信息不影响脚本中的重新设置。RMAN 默认的配置参数,通过show all 就

可以看出来。

RMAN> show all;

RMAN configuration parameters are:

CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default

CONFIGURE BACKUP OPTIMIZATION OFF; # default

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/orabackup/rmanbk/%F';

CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

RMAN configuration has no stored or default parameters

RMAN configuration has no stored or default parameters

CONFIGURE MAXSETSIZE TO UNLIMITED; # default

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/product/9.2/dbs/snapcf_gdtel1.f'; # default

3.1    备份策略保持
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;

保持最少3个冗余备份集

3.2    通道配置与自动通道分配
通过CONFIGURE 配置自动分配的通道,而且可以通过数字来指定不同的通道分配情

况。

CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/orabackup/rmanbk/%U‘

CONFIGURE CHANNEL n DEVICE TYPE DISK FORMAT '/orabackup/rmanbk/%U‘

也可以通过手工来进行RMAN通道的配置

allocate channel cq type disk format='/orabackup/rmanbk/%U '

3.3    控制文件自动备份
CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/orabackup/rmanbk/%F';

3.4    设置并行备份
可以设置并行备份的并行数,以加快备份的速度,一般并行数为CPU的个数,因目前数据量不大,暂时不对并行数进行设置

CONFIGURE DEVICE TYPE DISK PARALLELISM 4;

3.5    配置默认IO 设备类型
备份IO 设备类型可以是磁盘或者磁带,在默认的情况下是磁盘,可以通过如下的命令进行重新配置。

CONFIGURE DEFAULT DEVICE TYPE TO DISK;

CONFIGURE DEFAULT DEVICE TYPE TO SBT;

目前将采用磁盘备份,建议加入磁带进行长期备份

3.6    配置多个备份的拷贝数目
如果觉得单个备份集不放心,可以设置多个备份集的拷贝,如

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;

目前主要是在本地备份,同时在异地保存备份来保证备份集的可用性,配置多个备份的拷贝会导致备份性能的降低,故暂时不作多个备份的拷贝

4       用RMAN备份
RMAN可以用来备份主或备用数据库,如表空间、数据文件、归档日志、控制文件、服务

器文件与备份集。

4.1    文件拷贝
原始文件的拷贝,有点类似于OS热备份,可以拷贝整个数据文件到另外一个地点,但是结果仅仅只能写入到硬盘,而且单独的文件是分开的。因本备份方案主要是针对RAC裸设备进行备份,为了保证备份的可靠性,故不采用文件拷贝的方式

4.2    全备份
全备份,对数据库中spfile,controlfile,datafile,archivelogfile

数据库全备份脚本:

run {

backup database include current controlfile format '/orabackup/rmanbk/%U_%s.bak';

sql 'alter system archive log current' ;

ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel1' ;

ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel2' ;

sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';

backup archivelog all delete input format '/orabackup/rmanbk/%U_%s.bak';

}

4.3    多级增量备份
多级增量备份是指第N级的备份只需要备份最后一次同级或N-1级备份以后发生的改变的数据。可以通过下图来说明:


上图是一个增量备份的例子,即在第一个星期天做一个增量的0级备份,然后在星期一,星期二做一个增量的2级备份,在星期三做一个增量的1级备份,然后类 推。假设现在在星期五数据库需要做恢复,则可以先恢复第一个星期天的0级备份,,然后恢复星期三的1级备份,再恢复星期四和星期五的2级备份就可以完成数 据库的恢复。

1、  零级备份脚本

run {

backup database incremental level 0 format '/orabackup/rmanbk/%U_%s.bak';

sql 'alter system archive log current' ;

ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel1' ;

ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel2' ;

sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';

backup archivelog all delete input format '/orabackup/rmanbk/%U_%s.bak';

}

2、  一级备份脚本

run {

backup database incremental level 1 format '/orabackup/rmanbk/%U_%s.bak';

sql 'alter system archive log current' ;

ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel1' ;

ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel2' ;

sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';

backup archivelog all delete input format '/orabackup/rmanbk/%U_%s.bak';

}

3、  二级备份脚本

run {

backup database incremental level 2 format '/orabackup/rmanbk/%U_%s.bak';

sql 'alter system archive log current' ;

ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel1' ; #2 NODES RAC SYSTEM

ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel2' ;

sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';

backup archivelog all delete input format '/orabackup/rmanbk/%U_%s.bak';

}

4.4    备份检查
我们可以通过Validate命令来检查是否能备份,如数据文件是否存在,是否存在坏块      不被备份,如:

BACKUP VALIDATE DATABASE;

BACKUP VALIDATE DATABASE ARCHIVELOG ALL;

4.5    重新启动备份
对于异常结束了的备份,很多人可能不想再重新开始备份了吧,特别是备份到90%以上,因为异常原因终止了该备份,那怎么办呢?RMAN 提供一个重新开始备份的方法,通过简单的命令,你就可以只备份那不到10%的数据了。

RMAN> BACKUP NOT BACKED UP SINCE TIME 'SYSDATE-14'

2> DATABASE PLUS ARCHIVELOG;


5       自动备份脚本
5.1    全备份自动脚本
rmanbackup_full.sh

#!/bin/sh

#set env

export ORACLE_HOME=/oracle/product/9.2

export ORACLE_SID=gdtel1

export NLS_LANG="AMERICAN_AMERICA.zhs16gbk"

export PATH=$PATH:$ORACLE_HOME/bin:/sbin:/usr/sbin

echo "-----------------------------start-----------------------------";date

#backup start

$ORACLE_HOME/bin/rman <

connect target

delete noprompt obsolete;

backup database include current controlfile format '/orabackup/rmanbk/%U_%s.bak';

run{

        ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel1' ;

        ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel2' ;

        sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';

        backup archivelog all delete input format '/orabackup/rmanbk/%U_%s.bak';

}

list backup;

exit;

EOF

echo "------------------------------end------------------------------";date

5.2    0级备份自动脚本
rmanbackup_level0.sh

#!/bin/sh

#set env

export ORACLE_HOME=/oracle/product/9.2

export ORACLE_SID=gdtel1

export NLS_LANG="AMERICAN_AMERICA.zhs16gbk"

export PATH=$PATH:$ORACLE_HOME/bin:/sbin:/usr/sbin

echo "-----------------------------start-----------------------------";date

#backup start

$ORACLE_HOME/bin/rman <

connect target

delete noprompt obsolete;

backup database incremental level 0 format '/orabackup/rmanbk/%U_%s.bak' ;

run{

        ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel1' ;

        ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel2' ;

        sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';

        backup archivelog all delete input format '/orabackup/rmanbk/%U_%s.bak';

}

list backup;

exit;

EOF

echo "------------------------------end------------------------------";date

5.3    1级备份自动脚本
rmanbackup_level1.sh

#!/bin/sh

#set env

export ORACLE_HOME=/oracle/product/9.2

export ORACLE_SID=gdtel1

export NLS_LANG="AMERICAN_AMERICA.zhs16gbk"

export PATH=$PATH:$ORACLE_HOME/bin:/sbin:/usr/sbin

echo "-----------------------------start-----------------------------";date

#backup start

$ORACLE_HOME/bin/rman <

connect target

delete noprompt obsolete;

backup database incremental level 0 format '/orabackup/rmanbk/%U_%s.bak';

run{

        ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel1' ;

        ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel2' ;

        sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';

        backup archivelog all delete input format '/orabackup/rmanbk/%U_%s.bak';

}

list backup;

exit;

EOF

echo "------------------------------end------------------------------";date

5.4    2级备份自动脚本
rmanbackup_level2.sh

#!/bin/sh

#set env

export ORACLE_HOME=/oracle/product/9.2

export ORACLE_SID=gdtel1

export NLS_LANG="AMERICAN_AMERICA.zhs16gbk"

export PATH=$PATH:$ORACLE_HOME/bin:/sbin:/usr/sbin

echo "-----------------------------start-----------------------------";date

#backup start

$ORACLE_HOME/bin/rman <

connect target

delete noprompt obsolete;

backup database incremental level 0 format '/orabackup/rmanbk/%U_%s.bak';

run{

        ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel1' ; #2NODES RAC SYSTEM

        ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys/sys@gdtel2' ;

        sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';

        backup archivelog all delete input format '/orabackup/rmanbk/%U_%s.bak';

}

list backup;

exit;

EOF

echo "------------------------------end------------------------------";date

5.5    脚本部署
5.5.1   使用oracle用户登录系统
5.5.2   系统目录准备
1、  准备orabackup分区,该分区要尽可能大,以容纳更多的备份数据

2、  挂接分区到 /orabackup

3、  修改文件在服务器启动的时候自动挂接

4、  建立以下目录 

脚本存放目录:/orabackup/bin; 

备份数据存放目录:/orabackup/rmanbk/

备份日志存放目录:/orabackup/logs

5.5.3   编写cron.backup脚本
分钟 小时       月    日    星期       执行的命令

00     00    *     *     0     /orabackup/bin/rmanbk_level0.sh         #周日晚做0级备份

00     00    *     *     1     /orabackup/bin/rmanbk_level0.sh         #周一晚做2级备份

00     00    *     *     2     /orabackup/bin/rmanbk_level0.sh         #周二晚做2级备份

00     00    *     *     3     /orabackup/bin/rmanbk_level0.sh         #周三晚做1级备份

00     00    *     *     4     /orabackup/bin/rmanbk_level0.sh         #周四晚做2级备份

00     00    *     *     5     /orabackup/bin/rmanbk_level0.sh         #周五晚做2级备份

00     00    *     *     6     /orabackup/bin/rmanbk_full.sh             #周六晚做全备份

之间的空格请使用键盘的TAB键隔开,否则不起作用,另外:运行命令的目录请按脚本存放的实际目录进行修改

5.5.4   执行自动运行计划
$crontab –u oracle cron.backup

修改:crontab –e

你可能感兴趣的:(RMAN热备份)