Oracle11G配置RMAN自动备份

1、什么是备份

备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本,从不同的角度分类如下:

从物理与逻辑的,备份可以分为物理备份和逻辑备份。

物理备份:对数据库操作系统的物理文件(数据文件,控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者是以归档日志的方式对运行的数据库进行备份。可以使用Oracle的恢复管理器(RMAN)或操作系统命令进行数据库的物理备份。

逻辑备份:对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的EXP,数据泵(EXPDP),数据库闪回技术等第三方工具,都可以进行数据库的逻辑备份。

从数据库的备份角度,备份可以分为完全备份增量备份差异备份。

完全备份:每次对数据库进行完整备份,当发生数据丢失的灾难时,完全备份无需依赖其他信息即可实现100%的数据恢复,其恢复时间最短且操作最方便。

增量备份:只有那些在上次完全备份或增量备份后被修改的文件才会被备份。优点是备份数据量小,需要的时间短,缺点是恢复的时候需要依赖以前备份记录,出问题的风险较大。

差异备份:备份那些自从上次完全备份之后被修改过的文件。从差异备份中恢复数据的时间较短,因此只需要两份数据—最后一次完整备份和最后一次差异备份,缺点是每次备份需要的时间较长。

恢复就是发生故障后,利用已备份的数据文件或控制文件,重新建立一个完整的数据库,恢复分为以下两种类型:

实例恢复:当oracle实例出现失败后,oracle自动进行的恢复。

介质恢复:当存放数据库的介质出现故障时所作的恢复。介质恢复又分为完全恢复和不完全恢复。

完全恢复:将数据库恢复到数据库失败时的状态。这种恢复是通过装载数据库备份并应用全部的重做日志做到的。

不完全恢复:将数据库恢复到数据库失败前的某一时刻的状态。这种恢复是通过装载数据库备份并应用部分的重做日志做到的。进行不完全恢复后,必须在启动数据库时用resetlogs选项重设联机重做日志。

2、RMAN

RMAN是Oracle的一个重要工具,用于备份和恢复数据文件,归档日志和控制文件,也可以用来执行完全或不完全的数据库恢复。RMAN有3种不同的用户接口,命令行方式,GUI方式(集成在OEM中的备份管理器),API方式(用于集成到第三方的备份软件中),它具有以下特点:支持在线热备份;支持多级增量备份;支持并行备份、恢复;减少所需要备份量;备份、恢复使用简单。

RMAN的存储类型有三种方式:

1、备份集 默认类型;

2、压缩备份集;

3、镜像copy;

RMAN备份可以存放在两种位置:

1、目标数据库的控制文件;

2、恢复目录中;

RMAN备份的优点:

1、RMAN只备份有效数据;

2、RMAN可以实现增量备份;

RMAN的组件:

target database(目标数据库):目标数据库就是需要RMAN 对其进行备份与恢复的数据库,RMAN可以备份数据文件,控制文件,归档日志,spfile;

service session(服务器会话):RMAN启动数据库上的oracle服务器进程,将建立一个与目标数据库的会话,有目标数据库上的服务器进程进行备份、还原、恢复的实际操作;

RMAN Repository(RMAN资料库):RMAN使用过程中会用到的控制信息,是一些关于备份、归档日志及RMAN活动的元数据;

Recovery Catalog(恢复目录):恢复目录是建立在RMAN恢复目录数据库上的一种schema对象,用于保存RMAN资料库数据。恢复目录是一个可选的组件。RMAN会将资料数据记录在目标数据库的控制文件中,但这样不够安全,因为一旦目标数据库的控制文件损坏就意味着所有的RMAN备份失效。所以建议在单独的一个数据库中建立一个恢复目录另外保存一份资料库数据;

MML(媒体管理库):MML是第三方工具或软件,用于管理对磁带的读写与文件的跟踪管理。如果你想直接通过RMAN备份到磁带上,就必须配置媒体管理层,媒体管理层的工具和RMAN共同配合完成备份与恢复。

快闪恢复区:快闪恢复区是Oracle数据库用于保存所有与恢复相关的文件的默认磁盘位置。这些相关文件包括归档日志,RMAN备份,控制文件自动备份,复用的控制文件和重做日志副本及闪回日志文件;

辅助数据库:在正常使用时,RMAN会与目标数据库一起使用,如果创建了恢复目录数据库,那么也会与恢复目录数据库一起使用。在某些情况下,希望创建辅助数据库。辅助数据库时使用RMAN从目标数据库的备份中创建的新数据库。辅助数据库能够被创建作为备用数据库使用。在数据库发生灾难时,能够在不丢失任何数据及停机时间最短的情况下切换至备用数据库。

3、配置Oracle为归档模式

配置Oracle归档模式、我们在前面的文章中已经进行了详细的讲解:Oracle11G配置归档模式;这里我们需要补充的是、开启归档模式之后记得要开启自动归档:

# 启用自动归档
alter system archive log start;

注意:一般修改归档模式后,需要做一次完全备份,因为归档前的日志已经没用了。这里我们暂时不做,等到配置完计划任务后,再做完全备份。

4、创建备份脚本

这里我们的环境是在Windows下面、如果是Unix环境的小伙伴请移步百度。在开始之前我们先去D盘创建一个文件夹:D:\rmanbackup

创建“完全”备份脚本:备份整个数据库。

我们在上面的文件夹下面创建一个名为:rmanbackup_full.txt的文件(文件路径和名称都可以自拟),内容如下:

run{
backup incremental level 0 database format 'D:/rmanbackup/rmanbackup_full_%d_%T_%s';
}

然后创建名为:rmanbackup_full.bat的脚本文件,内容如下:

rman target / nocatalog CMDFILE 'd:/rmanbackup/rmanbackup_full.txt' LOG  'd:/rmanbackup/rmanbackup_full_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log';

注:如果在运行的过程中出现:ORA-12560: TNS: 协议适配器错误,则可以将文件修改为(我这里没有遇到):

rman target sys/sys@orcl nocatalog CMDFILE 'd:/rmanbackup/rmanbackup_full.txt' LOG  'd:/rmanbackup/rmanbackup_full_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log';

创建“差异”备份脚本:备份上一次备份后改变的数据。

我们同样在上面创建的文件夹下面创建一个名为:rmanbackup_incremental.txt的文件;内容如下:

run{
backup incremental level 1 database format 'D:/rmanbackup/rmanbackup_incremental_%d_%T_%s';
}

然后创建名为:rmanbackup_incremental.bat的脚本文件:

rman target / nocatalog CMDFILE 'd:/rmanbackup/rmanbackup_incremental.txt' LOG  'd:/rmanbackup/rmanbackup_incremental_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log';

注:跟上面一样,如果出现 协议适配器错误,就可以将sys/sys@orcl加上。

创建“累计”备份脚本:累计型导出方式只是导出自上次“完全”导出之后数据库中变化了的信息。

我们继续在上面创建的文件夹下面创建一个名为:rmanbackup_cumulative.txt的文件;内容如下:

run{
backup incremental level 1 cumulative database format 'D:/rmanbackup/rmanbackup_cumulative_%d_%T_%s';
}

然后创建名为:rmanbackup_cumulative.bat的脚本文件:

rman target / nocatalog CMDFILE 'd:/rmanbackup/rmanbackup_cumulative.txt' LOG  'd:/rmanbackup/rmanbackup_cumulative_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log';

5、手工备份验证

创建完成之后我们进入shell命令行,手动启动一次完全备份:

img

执行完成以后我们可以到上面创建的文件夹中查看生成的备份文件(这里我为了测试执行了多次、如果是第一次执行、后面的后缀会是1和2,具体有多少个分段看数据大小):

img

当然、我们也可以使用rman命令查看备份信息:

img

注:如果想删除备份可以使用delete backup命令执行。

6、创建自动备份任务

从上面我们可以看到、备份脚本已经可以顺利执行了;下面我们就来创建计划任务,我们分别创建7个计划任务,分别对应下面的时间点。例如,任务执行时间是每天晚上23:00:

星期一:完全备份(A)

星期二:增量备份(B)

星期三:增量备份(C)

星期四:增量备份(D)

星期五:累计备份(E)

星期六:增量备份(F)

星期日:增量备份(G)

我们打开Windows控制面板–管理工具–任务计划程序:

img

创建基本任务:

img

选择每周:

img

选择星期一,23:00:00:

img

选择启动程序:

img

选择执行脚本:

img

最终信息确认,信息确认正确后点击完成:

img

打开属性对话框,选择“不管用户是否登录都要运行”,勾选“不存储密码”,点击确定:

img

为了测试上述建立的计划任务,需把计划任务的执行时间,改到当天当前时间后的2分钟左右。然后注销计算机,等待5分钟。 5分钟后,登陆计算机,查看刚才的计划任务执行是否成功,有没有生成备份的数据库文件。 测试后,请把计划任务的时间复原。然后我们模仿以上步骤,继续创建其他6个计划任务。img

7、备份数据恢复

下面我们可以对整个数据库进行完全恢复,下面的操作可以恢复到数据崩溃前的那个店。若数据库没有错误,该命令执行后,没有任何效果(感兴趣的小伙伴可以自行测试):

rman target / (命令行下输入此命令,我用的是 rman target sys/sys@orcl)
rman>shutdown immediate; (立即关闭数据库)
rman>startup mount; (启动实例并加载数据库,但不打开)
rman>restore database; 
rman>recover database; 
rman>alter database open;

恢复到历史中的一个备份:

rman target / (命令行下输入此命令,我用的是 rman target sys/sys@orcl)
rman>shutdown immediate; (立即关闭数据库)
rman>startup mount; (启动实例并加载数据库,但不打开)
RMAN> run {
set until time "to_date('2014-07-03 19:04:00','yyyy-mm-dd hh24:mi:ss')";
restore database;
recover database;
alter database open resetlogs;
}

推荐文章