基于RMAN的Oracle备份和恢复

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是块级别的备份与恢复,备份与恢复发生在数据库块级别,可以通过比较数据块而获得一致性的数据块,可以避免备份没有用过的块,可以检验块是否损坏等块级别的问题。

RMAN配置:

如果RMAN同时管理多个数据库,可以在一个单独的数据库上建立一个CATALOG,保存所有数据库的备份和恢复信息。如果没有建立CATALOG,备份信息保存在目标数据库的控制文件中。
通过给备份设置不同级别,可以实现周期性的增量备份,如每周做一次全备份,每天做一次增量备份。RMAN也支持基于变化的备份策略,即只备份从最近一次备份以来被修改的BLOCK。

RMAN的备份操作有两种:copy和backup。
Copy镜像拷贝命令可以创建数据库数据文件、归档重做日志或者控制文件的精确副本。 RMAN 副本与这些文件的区别仅在于名称和(或)位置的区别。功能相当于用户管理的备份恢复中的热备份。备份副本的好处是恢复比较快,恢复时可以不用拷贝,指定新位置即可。
Copy镜像拷贝至少要在mount 状态下运行。Copy镜像拷贝可作为增量备份的 Level 0。Oracle10g开始,允许使用单条命令"backup as copy"进行数据库拷贝。

RMAN的主要命令:
ALOCATE CHANNEL - 设置一个备份通道
COPY - 建立文件副本,包括数据文件、归档日志文件、控制文件、SPFILE
BACKUP - 备份数据库,包括数据库、表空间、数据文件、归档日志文件、控制文件、SPFILE
RESTORE - 基于COPY或BACKUP备份的文件进行恢复,恢复对象可以是数据库、表空间、数据文件、归档日志文件、控制文件、SPFILE。
RECOVER - 在RESTORE完成后,修复数据库状态,使之达到可运行的状态。
REPORT - 报告数据库的备份状态,如那些文件、表空间需要被备份。
LIST - 查看备份和副本信息。

下面分别简述这些命令:
1、Copy镜像拷贝与restore、recover恢复
Copy镜像拷贝命令可以创建数据库数据文件、归档重做日志或者控制文件的精确副本。 RMAN 副本与这些文件的区别仅在于名称和(或)位置的区别。功能相当于用户管理的备份恢复中的热备份。备份副本的好处是恢复比较快,恢复时可以不用拷贝,指定新位置即可。
Copy镜像拷贝至少要在mount 状态下运行。Copy镜像拷贝可作为增量备份的 Level 0。
Oracle10g开始,允许使用单条命令"backup as copy"进行数据库拷贝。

镜像命令示例:
RMAN> copy datafile 3 to 'd:/backup/datafilecopy/users01.dbf.bak';
恢复镜像命令示例:
RMAN> sql "alter database datafile 5 offline";
RMAN> restore (datafile 5) from datafilecop y;
RMAN> recover datafile 5;
RMAN> sql "alter database datafile 5 online";

2、Backup 备份与restore、recover恢复
Backup 备份命令生成 Backup sets(备份集合),以oracle专有的格式保存,由一个完全的所有的备份片集合构成,构成一个完全备份或增量备份。
备份数据库命令示例:
RMAN> backup database tag='test backup';
RMAN> backup incremental level 0 database;

控制文件和SPFILE备份:可以手工备份控制文件,同时备份SPFILE,或设置自动备份控制文件,也可以在备份数据库或者文件的时候加上include current controlfile 选项。备份时如果包含了 SYSTEM表空间,将自动备份控件文件和SPFILE。
命令示例:
RMAN> backup current controlfile;
归档日志备份(9i):可以手工备份,也可以在备份其他时同时备份归档日志。可以指定备份完后删除归档日志。
命令示例:
RMAN> backup archivelog all;
RMAN> backup …… plus archivelog;

配置备份策略:
可以修改备份集的保存策略,例如将备份设置为永久有效、设置为有效期180天。
通过configure exclude可以配置RMAN不备份上次备份以来没有发生变化的数据文件。如果要确保 RMAN备份这些数据文件,可以在 backup命令中添加 noexclude 选项。
跳过脱机的、不可存取的或者只读的数据文件
备份指定周期内没有备份的数据文件

备份数据校验选项:
在备份操作期间检查逻辑讹误
在检查逻辑错误的同时进行备份
只检查建立压缩备份集

恢复的类型有:数据库恢复、表空间恢复、只读表空间的恢复、SPFILE/控制文件恢复、归档重做日志的还原。、

3、List命令
List 命令是一种在数据库控制文件 或者恢复目录中查询备份的历史信息的方法。 List提供了一组信息,可以提供各种备份的信息,如对应物、备份集、归档日志备份、控 制文件备份等等。
列出对应物:RMAN> list incarnation;
列出备份概要信息:RMAN> list backup summary;
按备份类型列出备份:RMAN> list backup by file;
获得备份的详细信息,包括备份片的物理文件名:RMAN> list backup; RMAN> list backupset bs#;
或者按照TAG 来查:RMAN> list backup tag=tab_number;
期的备份:RMAN> list expired backup;
按照表空间和数据文件来列出备份:列出USERS 表空间的备份:RMAN> list backup of tablespace USERS;
列出文件5的备份:RMAN> list backup of datafile 5;
列出文件 E:/ORACLE/USERS.DB 的备份:RMAN> list backup of datafile ' E:/ORAC LE/USERS.DB ';
列出控制文件的备份:RMAN> list backup of controlfile;
列出归档日志的备份:RMAN> list archivelog all;RMAN> list backup of archivelog all;
列出副本:
RMAN> list copy 列出所有的副本。
RMAN> list copy of controlfile 列出控制文件副本
RMAN> list copy of archivelog all 列出所有归档日志副本
RMAN> list copy of database 列出数据库所有数据文件的副本

4、Report命令
Report 命令被用于判断数据库的当前可恢复状态和提供数据库备份的特定信息,可以检测哪些文件需要备份,哪些备份能被删除以及那些文件能不能获得的信息。可以报 告数据库的所有能备份数据文件对象,包括数据文件名、文件号、表空间、文件大小、 是否含有回滚段等。

下面分别讲述归档/非归档模式下的备份与完全/不完全恢复:
1、非归档模式下的 BACKUP 备份与恢复
恢复目录:打开目标数据库:例程启动,数据库加载,mount不能open因为目标数据库不在归档模式下,所以当进行备份/恢复操作的时候数据库无法打开。目标数据库只能在 MOUNT 状态不能 Open,所以属于脱机备份。
非归档模式不备份 redo日志,只有完全备份和 readonly/offline表空间和数据文件 备份是有意义的,所以非归档模式最好不用 RMAN进行备份,备份语法与归档模式相 同,所以这里只做简单介绍。
非归档模式的备份和恢复又可以分为:全库备份和恢复、表空间备份和恢复(只有 readonly/offline表空间的备份才有意义)

2、归档模式下的BACKUP备份与完全恢复
要用 RMAN 进行联机备份操作,数据库就必须位于 ARCHIVELOG 模式。恢复 目录必须打开,目标数据库例程必须启动,数据库加载或者打开。
归档模式下的备份和完全恢复又可分为:
 a. 整库备份与恢复备份;
 b. 表空间的备份与恢复;
 c. 数据文件的备份与恢复;
 b. 归档重做日志的备份与恢复;
 e. 联机日志的备份(联机日志不能用 RMAN 来备份,可以先将其归档,再备份。当然,也可以在全库备份时使用 plus archvielog 选项,将自动完成联机日志的备份);
 f. 控制文件和服务器参数文件的备份与恢复备份;
 g. 恢复SPFILE;
 h. 恢复控制文件.

备份集本身也需要备份与恢复:备份所有备份集:RMAN> backup backupset all;备份指定备份集:RMAN> backup backupset bs_num;恢复:(这种备份只是增加一个镜像,不用恢复)主要用于改变备份集的位置,或者创建多个镜像备份,比如将备份集从硬盘备份到磁带。

3、归档模式下的不完全恢复
不完全恢复就意味着有数据的丢失。引起不完全恢复的原因有很多,如丢失了联机日志或某个归档日志。另外如果出现了严重损害数据库的用户错误,比如某用户错误的删除了某个重要的数据,那么数据库也要恢复到这个错误操作之前。

不完全恢复会影响整个数据库,需要在 MOUNT 状态下进行。在不完全恢复完成之后, 通常需要使用 resetlogs 选项来打开数据库。resetlogs 表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始。数据库的逻辑生存期也被称为一个对应物(incarnation)。 每次使用 resetlogs 选项来打开数据库后都会创建一个新的数据库对应物,这对于恢复操作来说非常重要。每次使用 resetlogs 后,SCN计数器不会被重置,但是 Oracle会重置联机日志序列号,同时还会重置联机重做日志内容。因此执行了 resetlogs 之后,应该立即重新备份整个数据库,否则恢复起来相当麻烦。 (注:Oracle 10g 中已经可以在 resetlogs 之后不备份数据库,恢复的时候能够穿越 resetlogs)

使用RMAN执行不完全恢复操作时需要完成的一个工作是建立恢复目标。恢复目标是要终止恢复进程的点,可以是时间点、指定的 SCN 或者一个日志序列号。我们可以在 run代码中使用 set 命令和 until time、until scn、until sequence 参数。

也可以选择在RESTORE 和RECOVER命令中直接使用UNTIL TIME、UNTIL SCN、 或者 UNTIL SEQUENCE 参数,这样就可以避免使用 run 代码。

参考文章:
http://blog.sina.com.cn/s/blog_53753c030100a3qy.html
http://hainianqinas.javaeye.com/blog/473288

你可能感兴趣的:(基于RMAN的Oracle备份和恢复)