RMAN (Recovery Manager)是 Oracle 恢复管理器的简称,是集数据库备份(Backup)、还原(Restore)和恢复(Recover)于一体的Oracle数据库备份与恢复工具。它能够备份整个数据库或数据库部件,如表空间、数据文件、控制文件、归档文件以及 Spfile 参数文件,RMAN备份是一种物理的备份,它直接去读取数据块,因此 rman 是块级别的备份。从备份的那个时间点开始RMAN 将锁定此刻的数据文件信息,也就是说只备份数据文件到此刻的信息为止。

一、RMAN备份

1.连接数据库

通过 RMAN TARGET 连接
在这里插入图片描述
       使用 RMAN 连接本地数据库之前必须首先设置操作系统环境变量:ORACLE_SID,并指定该值等于目标数据库的实例名。如果本地库只有一个实例并已经设置了 ORACLE_SID 环境变量,则不需要再指定ORACLE_SID,RMAN 会自动连接到默认实例。
       如果要连接的目标数据库是一个远程数据库,那么必须在建立连接时指定一个有效的网络服务名( Net Service Name),并且本地的tnsname.ora 文件中必须已经建立了该网络服务名的正确配置


       通过 CONNECTTARGET 连接。
       也可以先启动 RMAN,然后再通过CONNECT 命令来连接目标数据库:
在这里插入图片描述


2.通道分配

       通道是指由服务器进程发起并控制目标数据库的文件与物理设备之间的字节流。一个通道即为一个会话,一个会话对应于一个服务器进程。所有的备份和恢复操作都是由 RMAN 连接的服务器进程完成的,更确切的说是由通道完成的。通道的分配主要有两种形式:自动分配通道和手动分配通道。可以根据预定义的配置参数自动分配通道,也可以在需要时手动分配通道。


自动分配通道。
自动分配通道是指在执行 RMAN 命令时,不需要显式制定通道的细节就可以使用通道(实际上也是使用预先设置或是使用默认的设置),如果没有手动分配通道,那么 RMAN 在执行 BACKUP 等操作 I/O的命令时将会使用预定义配置中的设置来自动分配通道。
查看默认的通道设备类型设置:
在这里插入图片描述
查看可用的设备类型:
在这里插入图片描述
修改设备备份并行度为 2,即备份开始时会使用两个通道进行备份,又还原默认设置值:
在这里插入图片描述
査看通道配置并修改通道配置,设置最大备份片的大小为 1G,通道 1 的备份路径为 C: \oracle\bak:
在这里插入图片描述
还原通道配置:
在这里插入图片描述


手动分配通道:
分配通道有一个专用命令: ALLOCATE CHANNEL,该命令可以(并且只能)在 RUN 块中出现,在执行 BACKUP、RESTORE 等需要进行磁盘 LO操作的命令时,可以将它们与ALLOCATE CHANNEL 命令放在一个手动分
配通道。
使用 RUN 命令手动分配通道。语法为:

RUN{
ALLOCATE CHANNEL 通道名称 DEVICE TYPE 设备类型,
BACKUP
}

在这里插入图片描述
RMAN 中执行的每一条 BACKUPRECOVER 等命令都至少要求使用一个通道,通道决定了这些操作执行的并行度,每条ALLOCATECHANNEL 命令对应一个通道,如果需要多个通道,执行多条语句即可。
手动分配通道后应该在 RUN 结束前释放,可以用 RELEASE CHANNEL 命令,不过不手动释放也没关系,RMAN 会在 RUN 块中任务执行完后自动释放该块中所用的通道。

3.RMAN 备份类型

备份集:
       备份集( Backup Set)是 Orac1e 默认的备份类型,把数据文件中已经使用过的数据块备份到一个或多个文件中,这样的文件叫做“备份片”,所有备份出来的文件组合成为“备份集”。备份集与备份片的关系类似于表空间与数据文件的关系,备份集是一个逻辑概念,将备份片(物理文件)逻辑地组织在一起。一般来说一个通道会产生一个备份集,比如启动了 3 个通道,那么每个通道负责生成一个备份集,不过如果启动了控制文件自动备份,那么控制文件所在的备份文件会单独生成一个备份集,不会与数据文件备份集合并在一起。如果在备份时指定了每个备份集中包含的数据文件个数(通过filesperset设置),那么即便只有一个通道,也有可能生成多个备份集。
       备份片( Backup Piece):每个备份片是一个单独的输出文件。一个备份片的大小是有限制的,如果没有大小的限制,备份集就只由一个备份片构成。备份片的大小不能大于你的文件系统所支持的文件的最大值,最大值可以通过 maxpiecesize 设置。
在这里插入图片描述
       其中在进行控制文件备份以后,会出现一个独立备份集。控制文件和数据文件不能放在同一个备份集里,因为数据文件所在的备份集以 Orac1e 数据块为最小单位,而控制文件所在备份集是以操作系统块作为最小单位。同样的,归档日志文件所在的备份集也是以操作系统块为最小单位,所以归档日志文件备份集和数据文件备份集不能在同一个备份集里面。


镜像副本:
       镜像副本( Image Copy)与手工系统拷贝备份数据文件类似,是一个数据文件生成一个镜像副本文件(数据库数据文件、归档重做日志或者控制文件的精确副本),不同的是这个过程由 RMAN 完成,RMAN 复制的时候也是一个数据块一个数据块( Orac1e Block)地复制,同时默认检测数据块是否出现物理损坏(默认不会进行逻辑损坏检查,需要手工启动),且不要将表空间置为 begin backup 状态,与备份集类型
不同在于生成的镜像副本中包含使用过的数据块,也包含从来没有用过的数据块。生成镜像副本的好处在于恢复速度相对备份集来说更快,恢复时可以不用拷贝,指定新位置即可。


备份集和镜像副本的区别:
       镜像副本是与数据文件( Data file)、控制文件( Control File)或归档重做日志文件(ArchivedLog)完全一致的副本。用户可以使用操作系统工具或 RMAN 创建镜像副本,也能够使用操作系统工具或RMAN 直接利用镜像副本恢复数据库,而无须任何额外处理。备份集是由被称为备份片的一个或多个物理文件构成的,其格式为 RMAN 自有格式。备份机与镜像副本的区别在于,备份集内可以包含多个数据文件,且备份过程中可以进行特殊处理,例如压缩或增量备份( Incremental Backup)等。备份集必须使用 RMAN 来恢复。

4.BACKUP 命令

       RMAN 中所有的备份操作都是通过 BACKUP 命令(指创建备份集方式的备份)进行的,对于比较简单的备份需求,甚至只需要执行一条命令,下面分别演示通过 BACKUP 命令进行不同级别的备份。
基本语法:

BACKUP [backup_option] backup_object
[PLUS ARCHIVELOG]
[backup_object_option];

整库的备份:
在这里插入图片描述

其中, FORMAT 参数用来自定义备份文件的路径。该备份生成了两个备份文件(如果多个通道,可能是多个文件):一个是存储数据文件,另一个是存储控制文件和参数文件。
通过 LST 命令来查看创建的全库备份:
在这里插入图片描述


备份表空间:
只要实例启动并处于加载状态,无论数据库是否打开,都可以在RMAN 中对表空间进行备份。使用 BACKUP TABLESPACE 命令备份一个或多个表空间。
在这里插入图片描述
通过 LIST 命令查看创建的表空间备份:
在这里插入图片描述


备份数据文件:
有两种方式实现数据文件的备份:一种是通过数据文件名称来备份;另一种是通过数据文件编号指定来备份的数据文件。
可以通过查询数据字典 DBA_DATA_FILES 来得到数据文件名和数据文件编号。
在这里插入图片描述
通过 BACKUP DATAFILE 命令备份 USERS 表空间的数据文件:
通过文件名称
在这里插入图片描述
通过文件编号
在这里插入图片描述
查看指定数据文件的备份(datafile后面为数据文件的编号,如果要查看多个,则各个编号之间用逗号隔开):
在这里插入图片描述


备份控制文件:
手动执行备份命令:
在这里插入图片描述
改为自动备份:
在这里插入图片描述
在 Orac1e11g 中,如果使用了闪回区,那么控制文件的自动备份会存储在闪回区中,有时候为了安全,需要将控制文件的自动备份转移到其他目录下:
在这里插入图片描述
上述路径一定要存在否则汇报下面错误:
在这里插入图片描述

当备份服务器把 AUTOBACKUP 被置为ON时,RMAN做任何备份操作,都会自动对控制文件做备份。
查看备份的控制文件:
在这里插入图片描述


备份归档重做日志文件:
通过如下命令来查看归档日志信息:
在这里插入图片描述
在这里插入图片描述
使用 BACKUP ARCHIVELOG 命令备份归档重做日志文件:
在这里插入图片描述
执行 BACKUP 命令时可以指定 PLUS ARCHIVELOG 子句来实现备份归档重做日志文件:
在这里插入图片描述

以上语句是在备份数据文件之前首先对所有归档文件进行备份。
完成备份之后,可以通过下列命令查看已备份的归档日志片段:
在这里插入图片描述


备份服务器初始化参数文件:
在进行备份控制文件时,RMAN 会自动备份服务器的参数文件,并置于控制文件相同的备份片段中,因此很少需要单独对 SPFILE 进行备份,如果想单独备份,直接使用 BACKUPSPFILE 命令即可。
在这里插入图片描述

5.FORMAT 参数替换变量

  • %c:备份片的拷贝数(从 1 开始编号)
  • %d:数据库名称
  • %D:位于该月中的天数(DD)
  • %M:位于该年中的月份(MM)
  • %F:一个基于 DBID 唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中 IIIIIIIIII 为该数据库的 DBID,YYYYMMDD 为日期,QQ 是一个 1-256 的序列
  • %n:数据库名称,并且会在右侧用 x 字符进行填充,使其保持长度为 8
  • %u:是一个由备份集编号和建立时间压缩后组成的 8 字符名称。利用%u 可以为每个备份集生成一个唯一的名称
  • %p:表示备份集中备份片段的编号,从 1 开始编号
  • %U:是%u_%p_%c 的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是最常用的命名方式
  • %s:备份集的号
  • %t:备份集时间戳
  • %T:年月日格式( YYYYMMDD)

在 backup 命令中没有指定 format 选项,则 RMAN 默认使用%U 为备份片段命名

二、RMAN 恢复

       RMAN 中的恢复对应两个操作:数据库修复( Restore)和数据库恢复( Recover)。使用 RMAN 进行数据库恢复时只能使用之前使用 RMAN进行的备份,可以实现数据库的完全恢复,也可以实现数据库的不完全恢复。与用户管理的恢复类似,RMAN 恢复也分两个步骤,首先使用restore 命令进行数据库的修复,然后使用 recover 命令进行数据库的恢复。数据库修复是指利用备份集的数据文件来替换已经损坏的数据库文件或者将其恢复到一个新的位置。数据库恢复是指应用所有重做日志,将数据库恢复到崩溃前的状态,或者应用部分REDO,将数据库恢复到指定的时间点。
       RMAN 中提供了多种不同级别的恢复方式,可以恢复整个数据库,也可以只恢复某个或某几个表空间,或某个或某几个数据文件,可以单独恢复控制文件、初始化参数文件,或者归档文件。也就是说,用RMAN 备份的就都能被恢复。

1.数据库进行完全介质恢复

       如果数据库只剩下控制文件和参数文件,数据文件因为丢失或损坏,之前创建过整库的备价,并且执行备份操作之后,所有的归档日志文件和重做日志文件都还在,这种情况下就可以将数据库恢复到崩溃前那一刻的状态,这种恢复方式,叫做完全介质恢复。
执行完全介质恢复有以下三个步骤:
第一步:启动数据库到加载状态:
在这里插入图片描述


第二步:执行恢复操作:
在这里插入图片描述
在这里插入图片描述
执行 recover 命令时,附加的 DELETE ARCHIVELOG 和 SKIP TABLESPACE 两个参数是可选参数:

  • DELETE ARCHIVELOG:表示 RMAN 将在完成恢复后自动删除那些在恢复过程中产生的归档日志文件
  • SKIP TABLESPACE:跳过指定表空间,比如临时表,当然临时表空间即使你不跳过它也不会恢复的

第三步:恢复完成后,打开数据库:
在这里插入图片描述

2.表空间的恢复

执行表空间的恢复时,数据库可以是 mount 状态,也可以是 open状态。在执行恢复之前如果被操作的表空间未处于 offline 状态,必须首先通过 alter tablespace … offline 语句将其置为脱机
在这里插入图片描述
如果一次对多个表空间进行恢复,那么只需要在执行restore/recover 命令时同时指定多个表空间名称即可,相互间以逗号分隔。不过将表空间置为 online/offline,脚本不能合并为一条。

3.恢复数据文件

执行数据文件的恢复时,数据库可以是 mount 状态,也可以是open 状态。在执行恢复之前,如果被操作的表空间未处于 offline状态,必须首先通过 alter database datafile…offline 语句将其置为脱机。
在这里插入图片描述
执行 restore/recover 操作指定数据文件时,既可以以数据文件编号,也可以由具体的数据文件名代替。
如果由于磁盘损坏导致数据文件无法访问,那么恢复时数据文件可能无法再恢复到原路径,必须在执行 restore 命令之前,给数据文件指定新的路径。

4.恢复控制文件

Orac1e 会默认在 $Orac1e home/dbs 或者 $Orac1e home /database 目录中创建服务器参数文件与控制文件。
假设已经还原了实例参数文件和启动了实例,还原控制文件时,一般过程是先设置 oracle_sid 和登录 RMAN,然后设置 DBID,使 RMAN知道需要查找哪一个数据库的控制文件。
如果使用默认的位置来存储控制文件的自动备份,就可以简单地执行: restore controlfile from autobackup,这样 RMAN 就可以查找包含最新控制文件的控制文件备份集。一旦恢复了控制文件,就必须关闭重启数据库实例。如果使用的是非默认位置,就需要分配一个指向该位置的通道,然后再使用相同的方法来还原控制文件。
从自动备份中恢复的具体步骤如下:
第一步:建立测试环境:
由于控制文件在 Orac1e 数据库运行期间会被 Orac1e 进程锁定,无法直接删除,因此这里还是按照之前实验模拟丢失数据文件的方式,首先 shutdown 数据库,然后再删除控制文件:
在这里插入图片描述
在这里插入图片描述


第二步:恢复控制文件:
新建一个窗口,连接到 RMAN 命令行
在这里插入图片描述
目标数据库控制文件丢失,无法启动到 mount 状态,此处必须首先指定 DBID。
要获得目标数据库的 DBID,可以通过多种方式查询,如我们创建自动备份时,如果没有更改其命名方式,文件名中会包含 DBID;或者查看之前生成的 RMAN 备份日志,当使用 RMAN 登录目录数据库后,最先输出的信息中就会显示出目标数据库的 DBID;或者连接到目标端数据库之后,查询 database 视图也可以获得。
在这里插入图片描述
在这里插入图片描述
恢复至默认路径下:
在这里插入图片描述
这里出现找不到副本的问题,发现前面设置的autobackup使用的不是默认路径
在这里插入图片描述
所以要从前面设置的路径进行恢复
在这里插入图片描述


第三步:启动数据库:
在这里插入图片描述

5.利用 RMAN 进行不完全恢复

启动 RMAN 并连接目标数据库,如果使用恢复目录,还需要连接到恢复目录数据库。
将数据库设置为加载状态:
在这里插入图片描述


基于时间的不完全恢复:
基于时间恢复是指当出现用户错误(例如误删除表、误截断表) 时,恢复到指定时间点的恢复。执行RMAN,启动数据库到 mount 状态。使用 set until time 命令指定要恢复到的时间点。
在这里插入图片描述


基于 SCN 的不完全恢复:
执行 RMAN,启动数据库到 mount 状态。使用 set until scn 命令指定要恢复到的 SCN 点。
查询当前的scn
在这里插入图片描述
在这里插入图片描述


基于日志序列号的不完全恢复:
基于日志序列号恢复是指恢复数据库到指定日志序列号的状态。
可以通过下面的语句来查询当前的日志序列号。
在这里插入图片描述
在这里插入图片描述

6.RMAN 恢复示例

我们来模拟一个过程,首先创建一份数据库的完全备份,然后在数据库中进行若干操作,之后删除该数据文件来模拟该文件意外丢失,最后通过 RMAN 来恢复该数据文件。


联机备份的步骤如下:
第一步:建立测试表,并向表里添加一条记录在这里插入图片描述


第二步:在备份之前做一次日志切换
在这里插入图片描述


第三步:将数据库进行整库的备份
在这里插入图片描述


第四步:再向测试表中添加一条记录,再做一次日志切换
在这里插入图片描述


第五步:关闭数据库,模拟丢失数据文件
在这里插入图片描述


第六步:启动数据库
在这里插入图片描述


第七步:查询有问题的数据文件
在这里插入图片描述


RMAM 恢复的步骤如下:
第一步::重新进入 RMAN 界面,将出现问题的表空间设置为脱机状态
在这里插入图片描述


第二步:修复数据库
在这里插入图片描述


第三步:恢复数据库,完成介质恢复
在这里插入图片描述


第四步:介质恢复完成后,将表空间恢复为联机状态
在这里插入图片描述


第五步:恢复完成后,打开数据库
在这里插入图片描述


第六步:检查数据记录丢失情况
在这里插入图片描述
这里可以发现,数据库恢复成功,数据没有丢失。若丢失的数据文件有多个,则应先将相应的数据文件全部进行备份,再使用类似的恢复步骤进行恢复。

7.说明

  • RMAN 也可以实现单个表空间或数据文件的恢复,恢复过程可以在mount 下或open 方式下,如果在open 方式下恢复,可以减少down机时间
  • 如果损坏的是一个数据文件,建议 offline 并在 open 方式下恢复
  • 这里可以看到,RMAN 进行数据文件与表空间恢复的时候,代码都比较简单,而且能保证备份与恢复的可靠性,所以建议采用 RMAN的备份与恢复
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐