RMAN是Recovery Manager的缩写,为Oracle的恢复管理器,是Oracle数据库推荐提供的一种恢复和备份数据库的工具,也是数据库管理员管理数据库常用的工具之一。
一、简介
1、RMAN的特点:
那么RMAN究竟有什么特点呢?和我们之前学习的exp/imp和expdp/impdp的数据库备份和恢复有什么区别呢?在Oracle官网给出了RMAN的特点主要有以下,我们看看有哪些不一样:
a、它可以备份数据库、表空间、数据文件、控制文件以及日志文件。而exp备份是不能进行控制文件、数据文件和日志文件的备份。
b、压缩备份可以只备份发生变化的内容。这是exp完全做不到的事情。
c、集成了第三方磁带媒介软件。
d、可以在Oracle数据库的目录中存放备份信息,意思就是可以用数据库来存储备份的信息,这样子更好的对备份信息进行管理。
2、RMAN常用概念:
在我们使用RMAN进行Oracle数据备份和恢复管理时,会经常遇到一些常用的概念,这里做个解释。主要有目标数据库、RMAN客户端、闪回区、介质管理、恢复目录等。
目标数据库:
当在使用RMAN进行数据库备份时,目标数据库就是使用RMAN工具进行备份和还原的数据库,即我们要进行备份的对象。
RMAN客户端:
当使用RMAN工具进行数据备份时,使用的前提就是计算机或服务器要拥有RMAN客户端。
一般情况下,在Oracle数据库安装时,就会默认安装了RMAN客户端,因为这个是Oracle官方推荐的备份工具。通常安装的目录在Oracle的安装目录下。
闪回区:
在Oracle10g后提出闪回区的概念,闪回区(Flash Recovery Area) 是在磁盘上的一个区域,存放与数据库的备份和恢复相关的一些文件,使用闪回区能够方便用户备份和还原数据库。
介质管理:
介质管理设备通常被称为SBT (System Backup to Tape)设备,也就是把数据库备份到磁带中。RMAN通过介质管理器将数据备份到磁带上,介质管理器通常由第三方软件商提供。它将数据块中的数据流从RMAN通道进程传递到对应的磁带上,是一个数据传输的中介。
恢复目录:
恢复目录(Recovery Catalog)是一个独立的数据库,用于存放目标数据库的备份。可以存放一个目标数据库,也可以多个。
二、使用恢复目录
我们知道RMAN中恢复目录是一个独立的数据库,是用来存放目标数据库的备份信息。在我们使用RMAN进行备份时,使用恢复目录进行备份信息的存储是Oracle官方推荐的一种方式,因为这种方式对比使用控制文件存储更为节省空间、更安全。
1、创建恢复目录
Oracle创建恢复目录时,为了数据安全起见,一般会把恢复目录的数据库创建在另外一个Oracle服务器上,而不是在同一个数据库中或者同一个服务器上,因为防止出现服务器宕机,导致数据文件一起丢失,而不能进行恢复,但是这里笔者为了演示,就直接把恢复目录同时创建在本机上。
在创建恢复目录时还要考虑数据库的容量,这个容量的大小当然要取决于目标数据库容量的大小,这里笔者会创建一个100M大小的表空间,专门单独存放恢复目录的数据。
创建恢复目录的步骤分为创建恢复目录数据库并创建用户、给恢复目录用户赋角色和权限、创建恢复目录三个步骤。
a、在本地创建一个恢复目录专用的用户RM(这里我们就不独立创建一个远程的数据库和数据库用户),具体语法如下:
- --创建恢复目录专用的表空间rmtablespace
- create tablespace rmtablespace
- datafile 'E:\APP\ADMIN\ORADATA\ORCL\rmtablespace.DBF'
- size 100m
- autoextend on next 10m maxsize 500m
- permanent
- extent management local;
- --创建用户rm
- create user rm--用户名
- identified by "123456"--密码
- default tablespace rmtablespace--表空间名
- temporary tablespace temp --临时表空间名
- quota unlimited on rmtablespace--表空间无限制
- profile DEFAULT --数据文件(默认数据文件)
- account unlock-- 账户是否解锁(lock:锁定、unlock解锁)
b、给恢复目录用户rm授权限
只创建一个数据库的用户是不能实现RMAN备份与恢复工作的,还需要给该用户赋予权限和角色。恢复目录用户应该拥有数据库管理员的权限,并在此基础上还要拥有RECOVERY_CATALOG_OWNER的权限。具体授权语法如下:
- -- 授权系统管理员权限
- grant dba to RM;
- grant connect to RM;
- grant resource to RM;
- --授权拥有恢复目录权限
- grant recovery_catalog_owner to RM;
c、创建恢复目录
创建好恢复目录的用户,并进行相应的授权后,就可以创建恢复目录了,创建恢复目录是在DOS界面进行操作的。
(1)首先进入恢复目录管理器(进入命令行输入RMAN),如下图:
(2)通过创建好的恢复目录用户进行登录连接到恢复目录数据库,具体命令如下:
- connect catlog rm/123456
连接到恢复目录数据库,就可以通过命令行创建恢复目录了,具体命令如下:
- create catalog
至此,RMAN的恢复目录已经创建完毕。
2、RMAN连接恢复目录
前面已经创建好了恢复目录,在我们使用RMAN进行备份时,要连接到恢复目录才能够进行数据备份。连接到恢复目录的方式也是在DOS的命令行上就可以直接操作。
RMAN连接恢复目录语法:
- rman target user/password@servicename catalog user/password@serviecename
语法解析:
1、target指定的是目标数据库(既是要进行备份的数据库)。
2、catalog后面指定的是恢复目录的数据库。
下面就利用上面的语法进行连接刚刚创建好的恢复目录,结果如下:
这里连接恢复目录时,要注意假如恢复目录在本地数据库上,那实例名就不用填,一般实际开发环境中,恢复目录的数据库都会创建在远程服务器上,所以要填上实例串。
总结:
RMAN中恢复目录是一个独立的数据库,是用来存放目标数据库的备份信息。使用恢复目录进行数据备份,是Oracle官方推荐的一种方式,所以作为系统管理员,是一种值得学习和了解的技能。
三、RMAN通道分配
RMAN通道分配是我们进行RMAN备份时经常提起的一个概念,RMAN通道分配就是确定连接数据库备份的设置个数,每设置一个设备就代表RMAN会自动启动一个服务器会话,由此来完成数据库的备份与恢复的操作。这其中通道指的就是某个设备(可以是磁盘或磁带等其他介质)和数据库进行关联。
通道分配有手动分配和自动分配两种,其中手动分配通道时要使用run命令实现,自动分配则只需要使用configure命令即可完成。
1、RMAN手动通道分配
RMAN手动通道分配指的是根据用户自己定义的通道完成数据库备份工作,并且如果在恢复目录中定义好了手动通道分配,就会优先使用手动分配。手动通道分配是在RMAN命令中利用RUN命令完成分配工作。
RMAN手动通道分配语法:
- run
- {
- allocate channel ch_name1 device type typename1;
- allocate channel ch_name2 device type typename2;
- ....
- backup ...
- }
语法解析:
a、allocate channel指定要分配的通道名称,后面跟着通道名称。
b、device type 指定介质的类型。其中typename可以是磁带(sbt)、磁盘(disk)。
c、backup是备份数据集的关键字。backup后面可以跟着要进行备份的数据库对象,比如表空间或用户等。
例1、利用手动通道分配备份student表空间。
a、首先把目标数据库注册到恢复目录当中再进备份,在RMAN命令下通过register database命令进行注册:
- register database
b、利用RUN命令手动备份表空间student,命令如下:
- run
- {allocate channel c device type disk;
- backup tablespace student;
- }
结果如下:
注意:
a、从图中可以发现,利用通道进行备份表空间,在备份完后,通道会进行释放。
b、在使用RUN命令进行备份前,一定是得在RMAN命令状态下,而且是得连接到恢复目录和目标数据库的前提下,才能进行备份。
例2、利用多通道备份student表空间。
使用通道进行备份是可以通过定义多个通道,从而提高备份的效率。也就是利用多个通道完成数据库的备份工作。代码如下:
- run
- {allocate channel c1 device type disk;
- allocate channel c2 device type disk;
- backup tablespace student;
- }
语法解析:
这里的两个通道的名字是不能重复的。
结果如下:
2、RMAN自动通道分配
RMAN自动通道分配,顾名思义就是数据库自己定义分配的通道的数量和名称,不需要管理员自己手动进行通道分配。但是在进行数据备份之前,必须为目标数据库定义一下自动通道分配的参数,比如介质的类型、通道的最大个数以及默认的介质类型。命令如下:
- CONFIGURE DEVICE TYPE typename PARALLELISM n
- CONFIGURE DEFAULT DEVICE TYPE TO typename
语法解析:
a、configure是指定自动通道分配的配置信息的关键字。
b、typename指定介质的类型,PARALLELISM n指定通道分配的个数。
c、default指定默认的设备的介质类型。
例3、定义目标数据库的自动通道分配的配置参数,再进行自动备份student表空间。
- CONFIGURE DEVICE TYPE disk PARALLELISM 3;
- CONFIGURE DEFAULT DEVICE TYPE TO disk;
- backup tablespace student;
上面命令定义了介质类型都是磁盘,自动分配通道的个数是3。结果如下:
从上图,可以发现直接使用backup备份集命令进行表空间备份时,会自动分配三个通道进行表空间备份,通道的名字分别为ORA_DISK_1到3。那么这种就是使用了自动的通道分配。
四、Oracle RMAN备份
Oracle RMAN备份集是用来存储数据库的备份信息,RMAN使用BACKUP命令对目标数据库进行数据备份。
RMAN一个备份集可以存储一个或多个文件的备份信息,所以说备份集经常用在需要同时备份多个数据文件的情况。每一个备份集是由多个备份片组成的,备份片是一个单独的文件,并且备份片的大小也是有限制的。如果没有限制备份片的大小,那么在备份集中只能存在一个备份片。
RMAN对Oracle数据库备份,就是利用BACKUP命令把要备份的数据库对象备份成备份集,具体命令如下:
- BACKUP [level] [backup_type][option]
语法解析:
a、level:指的是备份的增量,可以是1、2、3、4或者FULL, FULL代表的是全备份。
b、backup_type:指的是要进行备份的数据库对象,这里可以是database (数据库)、datafile (数据文件)、tablespace (表空间)、archivelog all (备份归档日志文件)等对象。
c、option:一个可选项,包括channel (用于指定备份所使用的通道)、maxsetsize (定义备份集的最大值)等信息。
例1、利用backup命令备份users表空间,具体命令如下:
- backup full tablespace users;
通过上图可以发现,我们进行备份users表空间时,由于里面有两个数据文件,backup备份是对应备份成两个BKP文件。同时在我们进行全库备份或表空间备份时,在未开启归档模式的情况,只能进行冷备份,就是要把数据库关闭并启动mount,但是在开启归档模式下,就可以进行热备份,笔者的数据库就是在开启归档模式下进行的热备份。
例2、利用backup命令进行全库备份。代码如下:
- backup full database;
五、Oracle RMAN恢复
Oracle RMAN恢复是RMAN备份的逆过程,主要是通过restore命令还原备份信息,使用recover完成数据库的同步恢复工作。下面介绍RMAN是如何进行备份的恢复。
1、RESTORE还原
RMAN使用RESTORE命令可以还原备份的信息,就是把数据还原到之前备份时的还原点,RESTORE命令的具体语法如下:
- RESTORE object
语法解析:
a、object指的是数据库对象,可以是database (数据库)、datafile (数据文件)、tablespace (表空间)、archivelog (归档日志文件)、controlfile(控制文件)等对象。
b、restore 是还原,文件级的恢复,就是物理文件还原,所以只有当数据文件或其他文件丢失时,使用restore进行还原,还原的前提是数据库在mount状态下。
2、RECOVER恢复
RMAN使用RECOVER命令可以恢复数据库,该命令是负责把归档日志文件用于重建的数据文件,来完成数据库的同步恢复。recover恢复是数据级的恢复,逻辑上恢复,即是一步一步利用归档日志恢复到出事的那个时间点,保持数据的一致性。但是,recover恢复的前提得是数据库开启了归档日志模式。
recover恢复语法:
- recover object;
语法解析:
这里的object指的是要恢复的数据库对象,和restore的语法一致。而且都需要在数据库关闭且mount状态进行数据库的恢复。
总结:
在实际应用中,restore还原和recover恢复是结合一起使用的,假如出现数据文件丢失导致数据库宕机时,我们首先是利用restore命令把之前定时备份好的数据文件还原到备份的时间点,然后再利用recover命令通过归档日志把还原点到出事点之间的数据进行恢复。最终完成数据库的完全恢复。
转载本站内容时,请务必注明来自W3xue,违者必究。