目录
[1)SBT(System Backup to Tape)接口](#1)SBT(System Backup to Tape)接口)
[2)介质管理库(Media Management Library,MML)](#2)介质管理库(Media Management Library,MML))
[3)介质管理服务器(Media Management Server)](#3)介质管理服务器(Media Management Server))

一、RMAN
1.1.概述
RMAN:Recovery Manager ,直译为恢复管理器,是Oracle数据库提供的一种专业的物理备份和恢复数据库的工具,是数据库管理员管理数据库常用的工具之一,也是Oracle推荐使用的一款恢复备份工具。
1.1.1.RMAN的特点
RMAN既然是Oracle的恢复管理器,那么RMAN究竟有什么特点呢?在Oracle官方网站上给出的RMAN的特点主要有以下几个:
1.它可以备份数据库、表空间、数据文件、控制文件以及日志文件。
2.压缩备份可以只备份发生变化的内容。
3.集成了第三方的磁带媒介软件。
4.可以在Oracle数据库的目录中存放备份信息。
5.自动化备份管理、精确时间点恢复。
1.1.2.与RMAN有关的概念
使用RMAN进行备份和恢复操作时,不可避免地要提到下面的一些常用概念,主要有目标数据库、闪回区、介质管理等。
1.1.2.1.目标数据库
当在使用RMAN进行备份时,就会提到目标数据库这个概念。目标数据库就是使用RMAN工具进行备份和还原的数据库。
1.1.2.2.RMAN客户端
当使用RMAN工具进行数据备份时,使用的前提就是计算机要拥有RMAN客户端。一般情况下,这个客户端是不用单独安装的,只要安装Oracle系统就自动安装了RMAN客户端。通常安装的目录与Oracle数据库的目录一致。
1.1.2.3.闪回区
**闪回区(Flash Recovery Area)**是在磁盘上的一个区域,在这个区域中存放与数据库的备份和恢复相关的一些文件,使用闪回区能够方便用户备份和还原数据库。闪回区这个概念是在Oracle 10g时引出的。
1.1.2.4.介质管理(核心组件)
介质管理(Media Management) 是 Oracle 数据库备份恢复体系中负责管理物理备份介质 的组件,它是 RMAN 与外部存储设备(磁带库、VTL、云存储等)之间的桥梁。它将数据块中的数据流从RMAN通道进程传递到对应的磁带上。

从上图可以看出,有如下几种核心组件:
1)SBT(System Backup to Tape)接口
System Backup to Tape:直译为磁带,是Oracle 用于磁带备份的专用 API。
RMAN 使用SBT接口调用介质管理软件
RMAN> CONFIGURE CHANNEL DEVICE TYPE 'SBT_TYPE'
PARMS 'ENV=(MM_SERVER=tape_server,MM_CHANNEL=ch1)';
2)介质管理库(Media Management Library,MML)
第三方厂商提供的库文件,实现 SBT API。
Oracle 调用MML与存储设备通信
例如:libobk.so(Linux)或oraSBT.dll(windows)
3)介质管理服务器(Media Management Server)
控制物理存储设备的软件。
1.1.2.5.介质管理的工作流程
备份流程
1.RMAN 发出备份命令
2.调用 SBT API
3.SBT调用 MML 库
4.MML 与介质管理服务器通信
5.服务器控制磁带/存储设备写入数据
6.返回备份句柄给 RMAN
恢复流程
1.RMAN 发出恢复命令
2.提供备份句柄
3.通过 SBT/MML 定位备份文件
4.从存储设备独取数据
5.传输给RMAN进行恢复
1.1.2.6.恢复目录
**恢复目录(Recovery Catalog)**是一个独立的数据库,用于存放目标数据库的备份,这个目标数据库可以是一个,也可以是多个。
1.2.使用恢复目录
恢复目录是使用RMAN工具进行备份时要使用的存储备份信息的数据库,这也是Oracle推荐使用的一种方式,这样存储要比直接把目标数据库中内容存放到控制文件中更节省空间。
1.2.1.查看当前系统里边存在的恢复目录
1.2.2.创建恢复目录
为了确保数据的安全,一般情况下都是把恢复目录数据库创建到另外一个Oracle服务器中。在创建恢复目录时还要考虑数据库的容量,这个容量的大小当然要取决于目标数据库容量的大小。一般情况下,在恢复目录数据库设置的恢复目录表空间可以设置为50MB左右。创建恢复目录分为连接恢复目录的数据库、创建恢复目录的用户、给恢复目录用户赋角色以及创建恢复目录4个步骤。
1.2.2.1.连接恢复目录的数据库
恢复目录的用户就是指在备份目标数据库时使用的用户,这个用户与其他用户不同,必须要赋予RECOVERY_CATALOG_OWNER的角色才可以。
首先在SQL*Plus中连接到恢复目录所在的数据库。连接数据库的语法如下:
sqlplus username/password@hostname:port/service_name
conn username/password@servicename;
语法说明:
username:登录恢复目录数据库的用户名。
password:登录恢复目录数据库的密码。
servicename:恢复目录数据库的服务名。
示例:连接恢复目录数据库
下面就利用上面的语句连接恢复目录数据库,使用SYSTEM用户名,密码是abc123,连接的服务名是RM。代码如下:
SQL>conn SYSTEM/abc123@RM;
恢复目录时还要考虑数据库的容量,这个容量的大小当然要取决于目标数据库容量的大小。一般情况下,在恢复目录数据库设置的恢复目录表空间可以设置为50MB左右。创建恢复目录分为连接恢复目录的数据库、创建恢复目录的用户、给恢复目录用户赋角色以及创建恢复目录4个步骤。
1.2.2.2.创建恢复目录的用户
由于使用恢复目录时需要一些权限,所以说最好单独为恢复目录创建一个用户。创建用户的语句如下:
CREATE USER username IDENTIFIED BY password
DEFAULT TABLESPACE tablespace_name
语法说明:
username:新创建的恢复数据库的用户名。
password:新创建的恢复数据库的密码。
DEFAULT TABLESPACE tablespace_name\]:可选项,是给当前用户设置一个默认表空间,如果不设置默认表空间,则默认的表空间是SYSTEM表空间。最好给恢复目录设置一个默认的表空间,这样便于管理备份的数据。 **示例:创建恢复目录用户RMANUSER** 下面就利用上面的语句完成恢复目录用户的创建。这里用户名设置成RMANUSER,密码设置成RMAN,使用的默认表空间为RMANTABLESPACE。具体的创建语句如下: CREATE USER RMANUSER IDENTIFIED BY RMAN DEFAULT TABLESPACE RMANTABLESPACE 示例: SQL\> create tablespace rman_tablespace datafile '/u01/app/oracle/oradata/orcl/rman_data01.dbf' size 100M autoextend on next 10M maxsize 2G extent management local segment space management auto; Tablespace created. SQL\> create user rman_user identified by rman default tablespace rman_tablespace; User created. SQL\>  ##### 1.2.2.3.给恢复目录用户赋角色 **先测试不赋予该角色,我只是想看一下报错** recovery_catalog_owner:恢复_目录_权限 只创建一个数据库的用户是不能实现RMAN备份与恢复工作的,还需要给该用户赋予权限和角色。 恢复目录用户应该拥有数据库管理员的权限,并在此基础上还要拥有RECOVERY_CATALOG_OWNER的权限。在此假设恢复目录用户已经拥有了数据库管理员的权限,这里只给恢复目录用户赋予RECOVERY_CATALOG_OWNER的角色。具体的语句如下:GRANT RECOVERY_CATALOG_OWNER TO RMANUSER  ##### 1.2.2.4.创建恢复目录 使用恢复目录用户登录数据库后就可以创建恢复目录,上面的3步都是在SQL\*Plus中完成的,下面需要在恢复目录管理器中完成连接到恢复目录数据库。具体的连接语句如下: RMAN>connect catalog rman_user/rman  注意:如果目标数据库不在本地,需要远程连接,那么可以在用户名和密码之后输入@目标数据库的服务名的方式连接目标数据库。例如,如果orcl是远程数据库的服务名,那么在本例中写成RMAN TARGET sys/abc123@orcl即可。 连接到恢复目录数据库之后,可以使用下面的语句创建恢复目录: RMAN>create catalog  可以看出想要创建恢复目录就得赋予RECOVERY_CATALOG_OWNER角色权限。 grant recovery_catalog_owner to rman_user;  #### 1.2.3.使用RMAN连接 前面已经学习了如何创建恢复目录,在Oracle 11g数据库中,连接恢复目录数据库的一种方式是直接在DOS窗口下使用命令RMAN进入到恢复管理器状态;另一种方式是在企业管理器中连接。 ##### 1.2.3.1.使用目标数据库中的控制文件备份数据 当备份数据库时不使用恢复目录,而是使用目标数据库中的控制文件来存放数据,那么使用目标数据库中的控制文件代替恢复目录。具体登录语法如下: RMAN TARGET username/password nocatalog; 语法说明: TARGET:代表要连接的是目标数据库。 nocatalog:代表不使用恢复目录。 ##### 1.2.3.2.连接到恢复目录数据库 连接恢复目录数据库的方法前面已经讲过了,下面就具体学习一下连接到恢复目录数据库的语法。具体语法如下: rman target username/password@servicename catalog username/password 语法说明: catalog:指恢复目录,在catalog后面是恢复目录数据库的用户名和密码。 这里,RMANUSER/RMAN是恢复目录的用户名和密码,现在连接的目标数据库和恢复目录数据库都是使用本地数据库,所以没有加上服务名。 除了使用上面的这种方法连接数据库外,还可以使用CONNECT命令在RMAN>下连接恢复目录数据库。具体的命令如下: RMAN:>CONNECT TARGET username/password@servicename RMAN:>CONNECT CATALOG username/password@servicename 其中,第一个命令是连接目标数据库;第二个命令是连接恢复目录数据库。 #### 1.2.4.在恢复目录中注册数据库 在恢复目录中注册数据库是以备份目标数据库为前提的,可以使用REGISTER命令在恢复目录数据库中注册数据库。其语法如下: REGISTER database 示例:注册数据库 注册数据库时首先要连接到恢复目录数据库 在此可以看到,使用REGISTER命令后,已经完成了在恢复目录中注册数据库的操作。 示例:查询RMAN的配置 实际上,在目标数据库中已经存在的RMAN的配置也是可以查看到的,即使用SHOW ALL命令即可实现。具体操作如图所示。 ### 1.3.通道分配 **channel:通道** **allocate:分配** 通道分配是在使用RMAN备份时必须要提到的概念,通道分配分为手动和自动两种方式。本节将讲述通道分配的概念以及手动通道分配与自动通道分配方法。  #### 1.3.1.什么是通道分配? 什么是通道呢?通道就是指数据库与某一个设备关联,这个设备就是指存储的介质---磁带或磁盘。目前存储介质使用最多的还是磁带。通道分配就是确定连接数据库备份的设置个数,每设置一个设备就代表RMAN会自动启动一个服务器会话,由此来完成数据库的备份与恢复的操作。通道分配有手动分配和自动分配两种,这两种方式使用的命令不同:在手动分配通道时要使用RUN命令实现,而自动分配则只需要使用CONFIGURE命令即可完成。 #### 1.3.2.手动通道分配 手动通道分配可以根据用户自定义分配通道完成数据库的备份工作,并且如果在数据库中定义了手动通道分配,会优先使用手动分配的通道。这里,要使用手动通道分配就要学习RUN命令。RUN命令的一般语法如下: RUN { ALLOCATE CHANNEL channel_name1 DEVICE TYPE type_name1; ALLOCATE CHANNEL channel_name2 DEVICE TYPE type_name2; ... BACKUP... } 语法说明: channel_name:分配的通道名称,type_name是分配的设备类型,这个设备类型是磁带(sbt)和磁盘(disk),并且可以手动分配多个通道,即可以含有多个ALLOCATE CHANNEL语句。 BACKUP:备份数据库的关键字,可以在BACKUP后面写上要备份的表空间等信息。下面就利用上面的语法完成数据库的备份操作。 示例:使用磁盘备份表空间USERS 代码如下: RUN { ALLOCATE CHANNEL C DEVICE TYPE disk; BACKUP tablespace USERS } ### 1.4.自动通道分配 前面已经介绍了手动通道分配,实际上不使用手动通道分配的方法,数据库就会使用自动通道分配的方式来备份数据库。自动通道分配时通道名称由数据库自己指定,具体的命令如下: CONFIGURE DEVICE TYPE type_name PARALLELISM n CONFIGURE DEFAULT DEVICE TYPE TO type_name 语法说明: 第1行用来指定设备的类型以及通道的个数,type_name是类型的名称,n代表通道的个数。 第2行用来指定默认设备的类型,如果使用的设备基本都是磁盘,那么可以把默认设备设置成磁盘。 示例:自动分配通道 下面使用上面的命令完成表空间USERS的备份,创建两个通道备份。先自动分配两个通道,分配方法如下: CONFIGURE DEVICE TYPE disk PARALLELISM 2 系统为这两个通道自动生成两个名字,分别是ORA_DISK_1和ORA_DISK_2。如果通道的名字是以ORA开头的,那么就是使用自动通道分配的 ### 1.4.备份集 备份集是用来存放备份信息的,在备份数据库时可以选择使用备份集的方式来备份数据库,但是备份的概念只是在RMAN中使用的。本节将讲述备份集的概念以及BACKUP备份命令的使用。 #### 1.4.1.什么是备份集 备份集是在备份数据库时的选项,一个备份集可以存储一个或多个文件的备份信息,所以说备份集经常用在需要同时备份多个数据文件的情况。每一个备份集是由多个备份片组成的,备份片是一个单独的文件,并且备份片的大小也是有限制的。如果没有限制备份片的大小,那么在备份集中只能存在一个备份片。 #### 1.4.2.BACKUP的使用 前面已经使用过BACKUP命令,该命令主要的工作就是备份数据库中的对象。具体的语法如下: BACKUP \[level\] \[backup type\] \[option
语法说明:
level:备份的增量,可以是1、2、3、4或者FULL,FULL代表的是全备份。
backup type: 备份数据库中的对象类型,这里可以是database(数据库)、datafile(数据文件)、tablespace(表空间)、controlfilecopy(备份使用copy命令备份的数据文件)、archivelog all(备份归档日志文件)等对象。
option:一个可选项,包括channel(用于指定备份所使用的通道)、maxsetsize(定义备份集的最大值)等信息。
示例:利用BACKUP命令备份数据库
备份数据库是每一个数据库管理员每天都要做的工作,使用BACKUP备份数据库时,只要使用下面的语句即可完成:
BACKUP database
在使用BACKUP命令备份数据库之前,也需要把数据库关闭并启动mount,才可以完成备份的操作。图中由于备份的内容过多没有完全显示,当备份操作全部结束后,应该显示一个"完成BACKUP"的信息,并重新回到RMAN>下。
1.5.从备份中恢复
前几节中已经介绍了如何使用RMAN备份数据库,那么备份好的数据库如何恢复呢?本节就将回答这个问题。
注意:从 Oracle 12c (12.1.0.2) 开始 ,RMAN支持在数据库 OPEN 状态下进行表空间级 和数据文件级 的备份和恢复,但全库恢复仍需要在MOUNT状态。
| Oracle版本 | 数据库状态要求 | 支持的备份/恢复类型 |
|---|---|---|
| 12.1.0.2之前 | 必须MOUNT | 所有备份和恢复操作 |
| 12.1.0.2+ | OPEN状态可用 | 表空间/数据文件备份恢复 |
| 12.2+ | OPEN状态优化 | 增强的在线恢复功能 |
| 19c+ | OPEN状态最佳 | 最完善的在线恢复支持 |
版本特性对比表
| 恢复类型 | 11g及之前 | 12.1.0.2 | 12.2+ | 19c+ |
|---|---|---|---|---|
| 全库恢复 | MOUNT | MOUNT | MOUNT | MOUNT |
| 数据文件恢复 | MOUNT | OPEN | OPEN | OPEN |
| 表空间恢复 | MOUNT | OPEN | OPEN | OPEN |
| 块介质恢复 | OPEN | OPEN | OPEN | OPEN |
| 控制文件恢复 | NOMOUNT | NOMOUNT | NOMOUNT | NOMOUNT |
| SPFILE恢复 | NOMOUNT | NOMOUNT | NOMOUNT | NOMOUNT |
1.5.1.使用RESTORE还原
使用RESTORE命令可以还原备份的信息。RESTORE命令的具体语法如下:
RESTORE database_object
语法说明:
database_object:数据库对象,可以是DATABASE(数据库)、TABLESPACE(表空间)、 DATAFILE(数据文件)、 CONTROLFILE(控 制 文 件)、 ARCHIVELOG(归档日志)、SPFILE(参数文件)。其中,只能在MOUNT状态下使用的对象有DATABASE、CONTROLFILE、SPFILE,只能在OPEN状态下使用的对象是TABLESPACE。
示例:还原数据库
还原数据库代码如下:
RESTORE DATABASE
注意:在还原数据库时,要保证数据库的状态是MOUNT。
1.5.2.使用recover恢复
使用RECOVER命令可以恢复数据库,该命令是负责把归档执行日志文件用于重建的数据文件,来完成数据库的同步恢复。但是在执行RECOVER命令时RMAN还需要读取归档日志,在恢复数据库时尽量要把数据库的状态设置成归档模式。RECOVER的命令如下:
RECOVER database_object
语法说明:
database_object: 可 以 是 DATABASE(数 据 库)、 TABLESPACE(表 空 间)、DATAFILE(数据文件)。其中,DATABASE只能在MOUNT状态下使用,TABLESPACE只能在OPEN状态下使用。
示例:恢复数据库
下面利用上面的语句恢复数据库。代码如下:
RECOVER DATABASE