《Oracle 11g 权威指南》 
第21章 使用RMAN工具

21.2 RMAN资料档案库/恢复目录/控制文件

RMAN通过启用操作系统进程将数据备份到磁盘或者磁带上。
为了完成对目标数据库的备份,RMAN需要得到目标数据库的相关信息并进行存储
Oracle将关于目标数据库元数据的集合称为RMAN的资料档案库。

在RMAN的资料档案库中存储数据有两种方法:
1. 恢复目录(Recovery Catalog)
  恢复目录是建立在RMAN目录数据库(亦称为恢复目录数据库)上的一种存储对象。
RMAN目录数据库是一个具有特别RMAN目录表的Oracle数据库(注意不是目标数据库),存储备份的元数据。
当使用恢复目录时,可以建立备份脚本并存储在目录数据库中以便后用,并且可以将恢复目录作为中心源,存储多个目标数据库的备份与恢复信息。
2. 目标数据库的控制文件
  如果使用RMAN而没有恢复目录(也就是没有为RMAN创建目录数据库),那么,就需要把RMAN要用到的关于目标数据库的大部分必要信息都存放在目标数据库的控制文件中。
此时,目标数据库的控制文件就是RMAN的资料档案库。
  要支持该方法必须通过管理目标数据库的控制文件来实现。在init.ora或spfile.ora中的参数CONTROL_FILE_RECORD_KEEP_TIME决定了RMAN使用的信息在控制文件中保留的时间,
其值默认7天,可长达365天。
SQL> show parameter CONTROL_FILE_RECORD_KEEP_TIME;
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time     integer 7

Oracle,建议将RMAN备份信息存储在目录数据库中,而不是控制文件中,这样能发挥RMAN工具的全部功能。

RMAN恢复目录被设置成为中央存储区,用于存储多个数据库的RmAN信息。
与使用控制文件作为资料档案库不同,恢复目录可以支持多个Oracle数据库或一个企业环境。这样就集中了RMAN信息的位置,而不是让这些信息分散在每个目标数据库的控制文件中。

21.3 创建恢复目录

恢复目录存在于RMAN的目录数据库中,类似于标准的数据库目录,主要包含如下几个部分的信息:
· 备份和恢复信息,可以是多个目标数据库;
· RMAN脚本,可以存储和复用;
· 关于数据文件和日志文件的备份信息;
· 关于目标数据库的物理组成或计划的信息。

创建恢复目录的具体步骤
1. 创建恢复目录数据库
  创建恢复目录前,必须首先为RMAN创建一个数据库。 为了数据库的安全,建议将恢复目录数据库建立在与目标数据库独立的另外一台Oracle服务器上。
可以按照下面的配置创建一个运行超过一年的RMAN恢复目录数据库:
· SYSTEM表空间:100MB
· UNDO表空间:20MB
· TEMP表空间:20MB
· 日志文件设置:3个日志文件组,每组两个成员,大小为20MB
· RECOVERY_CATALOG表空间:表空间可以命名为CATTBS,大小为50MB

我在centhost3上为centhost2:/orcl建立一个数据库orclrman

2. 创建存储目录的用户
在规划的目录数据库上创建目录 (centhost3:1521/ORCLRMAN)
[laolv@centhost3 ~]$ sqlplus "sys/forrest@ORCLRMAN as sysdba"
SQL*Plus: Release 12.1.0.2.0 Production on Tue Dec 6 22:35:01 2016
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>
SQL> select NAME from v$datafile;
NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/ORCLRMAN/datafile/o1_mf_system_d452wdy3_.dbf
/opt/oracle/oradata/ORCLRMAN/datafile/o1_mf_sysaux_d452p7sv_.dbf
/opt/oracle/oradata/ORCLRMAN/datafile/o1_mf_undotbs1_d45319t8_.dbf
/opt/oracle/oradata/ORCLRMAN/datafile/o1_mf_users_d45318p8_.dbf
SQL>create tablespace cattbs datafile '/opt/oracle/oradata/ORCLRMAN/cattbsfile1.dbf' size 1000M autoextend on next 50M;
SQL>create user rman identified by forrest default tablespace cattbs temporary tablespace temp;

3. 为RMAN用户授权
grant connect,resource,recovery_catalog_owner to rman;
alter user rman quota unlimited on cattbs;

4. 连接到恢复目录数据库
[laolv@centhost3 admin]$ rman
Recovery Manager: Release 12.1.0.2.0 - Production on Tue Dec 6 23:16:18 2016
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
RMAN> connect catalog rman/forrest@orclrman;
connected to recovery catalog database

5. 创建恢复目录
可以使用rman用户的默认表空间,也可以明确指定表空间。
RMAN> connect catalog rman/forrest@orclrman;
connected to recovery catalog database
RMAN> create catalog tablespace cattbs;
recovery catalog created
RMAN>
 

21.4 RMAN与数据库的连接

RMAN与数据库的连接分为两种
    一种:与目标数据库的连接,也就是RMAN将要对其实施备份与恢复操作的数据库;
    一种:与恢复目录数据库,存放RMAN的备份与恢复信息。
 

21.4.1 与目标数据库的连接

  1.本地连接
 rman target /
 rman target / nocatlog

  2.远程连接
 rman target sys/passwd@网络连接串 [nocatlog]
   或者进入rman环境后,再进行连接,例如:
 RMAN>connect target sys/passwd@网络连接串 [nocatlog]

 注意:如果连接串后添加了nocatalog参数,则表示RMAN没有建立恢复目录(连接),此时,将使用目标数据库的控制文件替代恢复目录。 (那么我的理解是:rman连接到目标数据库时没有加nocatlog选项, 则表示连到目标数据库的同时 也 与目标数据库的恢复目录有建立连接)

示例 1:连接到目标数据库
[laolv@centhost3 admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /opt/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORCLRMAN =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.147)(PORT = 1521))
ORCLRMAN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.147)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orclrman)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.146)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )


[laolv@centhost3 admin]$ rman
Recovery Manager: Release 12.1.0.2.0 - Production on Tue Dec 6 23:38:34 2016
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
RMAN> connect target sys/forrest@orcl
connected to target database: ORCL (DBID=1429293327)
RMAN> 
 

21.4.2 与恢复目录数据库的连接

示例 2:连接到恢复目录数据库
RMAN> 
RMAN> connect catalog rman/forrest@orclrman
connected to recovery catalog database
RMAN> 
 

21.5 注册数据库

目标数据库如何在恢复目录中进行注册
恢复目录中注册目标数据库:将目标数据库的控制文件转移到恢复目录中。

示例 3:“注册目标数据库” 和 “同步恢复目录和目标数据库的控制文件”
注册目标数据库
[laolv@centhost3 admin]$ rman
Recovery Manager: Release 12.1.0.2.0 - Production on Tue Dec 6 23:52:04 2016
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
RMAN> connect target sys/forrest@orcl
connected to target database: ORCL (DBID=1429293327)
RMAN> connect catalog rman/forrest@orclrman
connected to recovery catalog database
RMAN>
RMAN> register database;
database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
RMAN>
如果目标数据库的表空间和数据文件等发生变化,则会带动目标数据库的控制文件被改写,此时,可以执行如下命令进行恢复目录与目标数据库控制文件同步
RMAN> resync catalog;
starting full resync of recovery catalog
full resync complete
RMAN>

21.6 通道分配

21.6.1 通道概述

通道分配是实现RMAN与目标数据库连接的方法,也 确定I/O设备类型的方法。
每分配一个通道,RMAN就会启动一个服务器会话,由服务器会话来完成数据库的备份和恢复操作。

21.6.12RUN命令介绍

在rman命令中,run{命令;}会被优先执行。
使用run命令的常用语句有:ALLOCATE,BACKUP,EXECUTE,SCRIPT,RESTORE,RECOVER,SQL,HOST等。
例如运行一个数据库备份的命令
RMAN>RUN{
allocate channel ch1 device type disk rate 200k;
allocate channel ch2 device type disk rate 500k;
backup
(tablespace system channel ch1)
(tablespace users channel ch2)
}

21.6.3自动通道配置

无论在RUN的内部还是外部执行BACKUP,RESTORE,DELETE命令,如果没有手动定义通道,则RMAN会使用自动通道配置。
自动通道的定义语法:
CONFIGURE DEVICE TYPE sbt/disk PARALLELISM n - - 指定自动通道个数
CONFIGURE DEFAULT DEVICE TYPE TO sbt/disk - - 默认设备
- - 自动通道的参数配置
CONFIGURE CHANNEL DEVICE TYPE - - 通道的参数配置
CONFIGURE CHANNEL n DEVICE - -特定通道的参数配置
自动通道的命名规则: ora_devicetype_n
CONFIGURE CHANNEL DEVICE TYPE disk MAXPIECESIZE=2M;
CONFIGURE CHANNEL 5 DEVICE disk MAXPIECESIZE=5M;

21.6.4 手动通道配置

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

在RMAN外使用BACKUP命令时,RMAN会自动使用自动通道;
在RUN内使用RESTORE命令,但未手动定义通道,RMAN也会自动使用自动通道;
在RUN内使用RESTORE命令,同时定义了手动通道,RMAN会使用手动定义通道;

使用3个通道同时备份3个数据文件
RUN
{
ALLOCATE CHANNEL c1 DEVICE TYPE disk;
ALLOCATE CHANNEL c2 DEVICE TYPE disk;
ALLOCATE CHANNEL c3 DEVICE TYPE disk;
BACKUP DATAFILE 1,2,3;
}

分别使用了3个BACKUP命令备份3个数据文件,这样同一时间只有一个文件进行备份,只激活了一个通道,所以只使用了一个通道
RUN
{
ALLOCATE CHANNEL c1 DEVICE TYPE disk;
ALLOCATE CHANNEL c2 DEVICE TYPE disk;
ALLOCATE CHANNEL c3 DEVICE TYPE disk;
BACKUP DATAFILE 1,;
BACKUP DATAFILE 2;
BACKUP DATAFILE 3;
}

21.6.5显示通道配置参数

RMAN> show all;
RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/opt/oracle/product/12.1.0/dbhome_1/dbs/snapcf_orcl.f'; # default

21.6.6设置通道控制参数

1. FILESPERSET
用于限制BACKUP时备份集(Backup Set)的文件个数。
RMAN>backup {datafile 2,3,4 FILESPERSET=2 CHANNEL ORA_DISK_1};

2.MAXPIECESIZE
设置备份集中的每一个备份片文件的大小
CONFIGURE CHANNEL DEVICE TYPE disk MAXPIECESIZE=2M;
CONFIGURE CHANNEL 5 DEVICE disk MAXPIECESIZE=5M;

3.FORMAT参数
用于设置备份文件的存储目录及文件的名称格式。
CONFIGURE CHANNEL DEVICE TYPE disk FORMAT='/u01/oracle/backup/%U';
BACKUP TABLESPACE SYSTEM FORMAT='/u01/oracle/backup/%U';

4.MAXSETSIZE
用于BACKUP,CONFIGURE命令中设置备份片的大小。
BACKUP DATABASE MAXSETSIZE=100M;

5.RATE参数
用于设置通道的I/O限制。
CONFIGURE CHANNEL 1 DEVICE TYPE sbt RATE 200K;

6.CONNECT参数
RMAN允许同时连接到多个不同的数据库实例,可以使用CONNECT参数。
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT='sys/passwd@orcl1';
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT='sys/passwd@orcl2';
CONFIGURE CHANNEL 3 DEVICE TYPE DISK CONNECT='sys/passwd@orcl3';

21.7使用BACKUP生成备份集

21.7.1 备份集和备份片

备份集,包括一个或多个数据文件或归档日志。 一个备份集由许多备份片组成,每个备份片是一个单独的输出文件。  
备份集中的数据文件必须是一特定格式存储的,而且在这些文件可以使用之前,必须使用RESTORE命令进行处理。

21.7.2 BACKUP语法

RMAN>BACKUP <level> (<backup type> <option>);

Option是可选项,主要参数如下
Tag
Format
Include current controlfile:表示备份控制文件
Fileperset
Channel
Delete [all] input:表示备份结束时是否删除归档日志。
Maxsetsize :备份集的最大size
Skip [offline,readonly,inaccessible] : 备份时,可以跳过一些特殊属性的表空间。

21.7.3备份文件的存储格式

FORMAT格式由两部分组成,即路径名称和文件存储格式(即文件名称格式)。
Oracle 11g中,如果进行备份时没有使用FORMAT指定路径和名称格式,则默认backup锁产生的备份集将存储在FLASH_RECOVERY_AREA闪回目录中,而RMAN会自动使用%U来确保文件名称不重复。
%a,活动ID 
%c,在多重备份中,备份片的拷贝数,最大256 
不是多重备份时,用于备份集为1,用于代理副本拷贝为0 
%d,数据库名 
%D,公历某月的日期(只有day部分),格式DD 
%e,归档日志序号 
%f,绝对文件号 
%F,由DBID(数据库ID),日月年,序号组成 
形式为c-IIIIIIIIII-YYYYMMDD-QQ,c为固定 
IIIIIIIIII表示DBID,连接RMAN时指定target,会显示DBID 
YYYYMMDD为生成备份时的公历时间,比如20081122 
QQ表示为16进制序号,00到FF 
%h,归档日志线程号 
%I,DBID 
%M,公历月份,格式MM 
%N,表空间名 
%n,数据库名,如果数据库名不满8字符,将在右边自动填充'x' 
比如,库名为test,结果将是testxxxx 
%p,备份集中的备份片号,从1开始,步进1 
Note: If you specify PROXY, then the %p variable must be included in the 
FORMAT string either explicitly or implicitly within %U. 
%s,备份集号,此号记录在控制文件中,每次备份会自动增加 
重建控制文件将会初始化为1 
%t,备份集时间戳,秒为单位 
%T,公历年月日,格式YYYYMMDD 
%u,8字符名称,利用备份集或副本拷贝号+备份生成时间,由系统通过某种算法得出 
%U,许多FORMAT的默认值,由系统生成的唯一名称,对于副本拷贝和备份集的含义不同 
对于备份集的备份片来说,等同于%u_%p_%c 
对于数据文件副本拷贝,等同data-D-%d_id-%I_TS-%N_FNO-%f_%u 
对于归档日志副本拷贝,等同arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u 
对于控制文件副本拷贝,等同cf-D_%d-id-%I_%u 
%Y,公历年,格式YYYY 
%%,表示一个百分号字符'%' 

BACKUP TABLESPACE SYSTEM FORMAT='/u01/oracle/backup/%U'; - - 在backup语句中定义
RUN{
ALLOCATE CHANNEL ch1 DEVICE TYPE disk FORMAT='/u01/oracle/backup/%U';
backup database
}; - - 在手工分配通道时进行定义
CONFIGURE CHANNEL DEVICE TYPE disk FORMAT='/u01/oracle/backup/%U'; - - 在configure通道时进行定义
RMAN使用FORMAT的优先级:BACKUP,ALLOCATE CHANNEL,CONFIGURE CHANNEL
 

BACKUP备份实例

1)备份整个数据库
RMAN>BACKUP DATABASE;
RMAN>BACKUP DATABASE FORMAT 'd:/orcl_backup/%U';
RMAN>RUN{
ALLOCATE CHANNEL ch1 DEVICE TYPE disk;
backup database format 'db_%u_%d_%s';
backup format 'log_t%t_s%s_p%p'(archivelog all);
};

2)备份数据库,同时备份归档日志
RMAN>BACKUP DATABASE PLUS ARCHIVELOG;

3)备份表空间
RMAN>BACKUP TABLESPACE USERS;
RMAN>BACKUP FILESPERSET=3 TABLESPACE USERS,SYSTEM FORMAT 'd:/orcl_backup/%U';
RMAN>RUN{
ALLOCATE CHANNEL ch1 DEVICE TYPE disk;
ALLOCATE CHANNEL ch2 DEVICE TYPE disk FORMAT 'd:/orcl_backup/%U';;
backup (TABLESPACE USERS,SYSTEM FILESPERSET 2)
};

4)备份控制文件
- - 开启控制文件的自动备份,语法如下:
RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON;
如果开启了制文件的自动备份,则执行BACKUP和COPY命令时,会自动备份控制文件。

手工备份控制文件:
RMAN>BACKUP CURRENT CONTROLFILE;
RMAN>BACKUP CURRENT CONTROLFILE TAG='sunday_backup';

5)可以在备份表空间时,同时备份控制文件
RMAN>BACKUP TABLESPACE USERS INCLUDING CURRENT CONTROLFILE; 

6)备份归档日志
RMAN>BACKUP ARCHIVELOG [ALL,DELETE INPUT,DELETE ALL INPUT]; - - ALL:全部归档日志文件; DELETE INPUT:备份结束后删除归档日志; DELETE ALL INPUT:备份结束后删除所有的归档日志目录文件
BACKUP ... PLUG ARCHIVELOG - - 备份其他对象时,同时备份归档日志。

21.7.5 BACKUP的冷备份和热备份

1)冷备份:目标数据库运行在非归档模式下,此时需要关闭实例,然后进入MOUNT状态。
RMAN>RUN{
ALLOCATE CHANNEL ch1 DEVICE TYPE disk FORMAT 'd:/orcl_backup/%U';
ALLOCATE CHANNEL ch2 DEVICE TYPE disk FORMAT 'd:/orcl_backup/%U';
shutdown immediate;
startup mount;
backup database;
backup current controlfile;
alter database open;
};

2)热备份:数据库运行在归档模式下,此时可以直接使用backup进行备份。
RMAN>RUN{
ALLOCATE CHANNEL ch1 DEVICE TYPE disk FORMAT 'd:/orcl_backup/%U';
ALLOCATE CHANNEL ch2 DEVICE TYPE disk FORMAT 'd:/orcl_backup/%U';
backup database plus archivelog including current controlfile;
}

21.8 使用COPY与back as copy

RMAN中的backup命令生成的是备份集,文件中的数据是以RMAN的专有格式进行保存的,在进行数据库恢复时需要进行重建(restore)操作。
RMAN的copy命令生成的数据库文件、归档日志或控制文件的实际副本,并不是以特定的RMAN的专有格式存储的,进行数据库恢复时可以直接使用。

RMAN生成的copy命令生成的备份文件,称之为图像副本,图像副本在数据库恢复时有速度与效率上的优势,但是图像副本只能存储在磁盘上,而且不能被压缩,要求比备份集大得多的空间。

RMAN>COPY <input file> TO <location> <option>;
可以备份以下文件:
数据文件datafile;
archivelog;
current controlfile;
datafilecopy:备份使用copy命令备份的数据文件
cntrolefilecopy;
backup set:备份使用backup名令备份的文件。

实例:
run
{
allocate channel ch1 device type disk;
copy datafile 1 to 'd:\data\image\system01.dbf';
     current controlfile to 'd:\data\image\contol01.dbf';
}

21.8.3 backup as copy命令

oracle 11g有一个BACKUP AS COPY 命令:在不规定独立文件的前提下,可以完成整个数据库、表空间、多重表空间、数据文件、控制文件以及归档日志的图像副本备份。
可以使用BACKUP AS COPY命令轻松地完成整个数据库图像副本的复制,默认存放的路径仍然是数据库的闪回区域:
RMAN> backup as copy tag '1209_imagebackup_orcl' database;

Starting backup at 09-DEC-16
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00011 name=/opt/oracle/oradata/orcl/pdborcl/example01.dbf
output file name=/opt/oracle/fast_recovery_area/ORCL/29A27C8F580F36CAE0539201A8C03661/datafile/o1_mf_example_d4m6h841_.dbf tag=1209_IMAGEBACKUP_ORCL RECID=7 STAMP=930101976
备份集是存在目标数据库所在的主机所挂载的磁盘上的
……
channel ORA_DISK_1: starting datafile copy
input datafile file number=00010 name=/opt/oracle/oradata/orcl/pdborcl/SAMPLE_SCHEMA_users01.dbf
output file name=/opt/oracle/fast_recovery_area/ORCL/29A27C8F580F36CAE0539201A8C03661/datafile/o1_mf_users_d4m6v22q_.dbf tag=1209_IMAGEBACKUP_ORCL RECID=11 STAMP=930102114
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 12/09/2016 01:41:47
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 618659840 bytes disk space from 4781506560 limit
 


DB_RECOVERY_FILE_DEST指定的备份目录/opt/oracle/fast_recovery_area 存放的备份数据,已经快达到了DB_RECOVERY_FILE_DEST_SIZE指定的大小4560M,
不能分配此刻备份时需要存放备份需要请求的空间,导致
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 618659840 bytes disk space from 4781506560 limit

21.9 备份

21.9.1 压缩备份

在oracle 11g中,可以使用RMAN的压缩备份功能。 压缩备份只能针对备份集,而不能针对图像副本。 
可以压缩的对象包括database,tablespace,datafile备份集。
RMAN>BACKUP AS COMPRESSED BACKUPSET database;

也可以为压缩备份配置一个默认的设备及其他控制参数,同样是使用CONGIGURE命令。 凡是使用指定设备的备份集都将被压缩,知道配置被更改。
RMAN>configure device type disk backup type to compressed backupset;
压缩的:未压缩的,一般是以接近5:1的比例压缩。

21.9.3 查看备份信息

1.LIST命令
LIST用于查询RMAN资料档案并获取BACKUP命令、COPY命令和数据库实体的有关数据,数据库实体是物理数据库的一个单独版本。
LIST的输出显示CHANGE,CROSSCHECK和DELETE命令已经使用过得文件。

LIST命令使用by backup和by file选项显示备份信息。  
另外两个选项:SUMMARY和VERBOSE,用于精简或扩展输出字段。
RMAN> list backupset by backup summary;
List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
342     B  F  A DISK        06-DEC-16       1       1       NO         TAG20161206T225453
RMAN> list backupset by file; - - 该命令输出三类不同文件:数据文件、归档日志文件、控制文件
List of Control File Backups
============================
CF Ckp SCN Ckp Time  BS Key  S #Pieces #Copies Compressed Tag
---------- --------- ------- - ------- ------- ---------- ---
6313624    06-DEC-16 342     A 1       1       NO         TAG20161206T225453
List of SPFILE Backups
======================
Modification Time BS Key  S #Pieces #Copies Compressed Tag
----------------- ------- - ------- ------- ---------- ---
04-DEC-16         342     A 1       1       NO         TAG20161206T225453

LIST与backup组合,可以有如下的命令:
LIST BACKUP;
LIST BACKUP BY FILE;
LIST BACKUP OF DATABASE ARCHIVELOG ALL;
LIST BACKUP  SUMMARY;
LIST BACKUP  OF DATTABASE;
LIST BACKUP TAG 'FULL_BACKUP';
LIST BACKUP LIKE '/ora11g/backup/%';

LIST也可以与COPY组合,产生以下命令:
LIST COPY;
LIST COPY OF DATABASE;
LIST COPY OF CONTROLFILE;
……


RMAN> list copy of database;
List of Datafile Copies
=======================
Key     File S Completion Time Ckp SCN    Ckp Time       
------- ---- - --------------- ---------- ---------------
1198    1    A 09-DEC-16       6366221    09-DEC-16      
        Name: /opt/oracle/fast_recovery_area/ORCL/datafile/o1_mf_system_d4m6s3b6_.dbf
        Tag: 1209_IMAGEBACKUP_ORCL
……
1200    10   A 09-DEC-16       1917927    19-JAN-16      
        Name: /opt/oracle/fast_recovery_area/ORCL/29A27C8F580F36CAE0539201A8C03661/datafile/o1_mf_users_d4m6v22q_.dbf
        Tag: 1209_IMAGEBACKUP_ORCL
        Container ID: 3, PDB Name: PDBORCL
1196    11   A 09-DEC-16       1917927    19-JAN-16      
        Name: /opt/oracle/fast_recovery_area/ORCL/29A27C8F580F36CAE0539201A8C03661/datafile/o1_mf_example_d4m6h841_.dbf
        Tag: 1209_IMAGEBACKUP_ORCL
        Container ID: 3, PDB Name: PDBORCL
RMAN> list copy of controlfile;
specification does not match any control file copy in the repository
RMAN> list copy;
specification does not match any control file copy in the repository
List of Datafile Copies
=======================
Key     File S Completion Time Ckp SCN    Ckp Time       
------- ---- - --------------- ---------- ---------------
1198    1    A 09-DEC-16       6366221    09-DEC-16      
        Name: /opt/oracle/fast_recovery_area/ORCL/datafile/o1_mf_system_d4m6s3b6_.dbf
        Tag: 1209_IMAGEBACKUP_ORCL
……
List of Archived Log Copies for database with db_unique_name ORCL
=====================================================================
Key     Thrd Seq     S Low Time 
------- ---- ------- - ---------
294     1    207     A 19-NOV-16
        Name: /opt/oracle/fast_recovery_area/ORCL/archivelog/2016_11_19/o1_mf_1_207_d301n963_.arc
……

2.REPORT命令
REPORT命令用于查询RMAN资料档案库,获得需要备份和不需要备份的文件,以及数据库物理模式等信息。
REPORT命令从RMAN的资料档案库中生成更加详细地信息。
RMAN>report need backup
RMAN>report obsolete ;-- 废弃的; 老式的,已过时的; [生]已废退的;  得到的结果可以删除
RMAN>report schema

删除

带delete参数的change 命令删除备份集,从备份介质+从控制文件和恢复目录中删除。 
 change backupset 117,118 delete; 
 change backuppiece 1304 delete; 
 change archivelog until logseq =544 delete; 

恢复目录的记录删除 

1. $ORACLE_HOME/rdbms/admin/prgrmanc.sql 脚本定期删除恢复目录中具有DELETED状态的记录 

2. 要删除旧的对应物记录incarnation.必须从DBINC 表中删除这些对应物,使用RC_DATABASE_INCARNATION 视图来确定要删除的对应物。记录要删除的每个对应物的DBINC_KEY 
随后启动SQL*Plus,执行delete from dbinc where dbinc_key=2; 

删除示例: 
1、删除陈旧备份 
当使用RMAN执行备份操作时,RMAN会根据备份冗余策略确定陈旧备份。 
RMAN> delete obsolete; 

2、删除EXPIRED备份 
执行crosscheck命令核对备份集,那么会将该备份集标记为EXPIRED状态。为了删除相应的备份记录,可以执行delete expired backup命令。 
RMAN> delete expired backup; 
3、删除EXPIRED副本 
RMAN> delete expired copy; 
4、删除特定备份集 
RMAN> delete backupset 19; 
5、删除特定备份片 
RMAN> delete backuppiece 'd:\backup\DEMO_19.bak'; 
6、删除所有备份集 
RMAN> delete backup; 
7、删除特定映像副本 
RMAN> delete datafilecopy 'd:\backup\DEMO_19.bak'; 
8、删除所有映像副本 
RMAN> delete copy; 
9、在备份后删除输入对象 
RMAN>BACKUP ARCHIVELOG [ALL,DELETE INPUT,DELETE ALL INPUT]; - - ALL:全部归档日志文件; DELETE INPUT:备份结束后删除归档日志; DELETE ALL INPUT:备份结束后删除所有的归档日志目录文件
RMAN> backup archivelog all delete input; 
RMAN> backup backupset 22 format = ''d:\backup\%u.bak'' delete input; 
 



RMAN> list backup of database;
specification does not match any backup in the repository
RMAN> list backupset;
List of Backup Sets
===================
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
342     Full    17.23M     DISK        00:00:20     06-DEC-16      
        BP Key: 344   Status: AVAILABLE  Compressed: NO  Tag: TAG20161206T225453
        Piece Name: /opt/oracle/fast_recovery_area/ORCL/autobackup/2016_12_06/o1_mf_s_929919293_d4fnb3lc_.bkp
  SPFILE Included: Modification time: 04-DEC-16
  SPFILE db_unique_name: ORCL
  Control File Included: Ckp SCN: 6313624      Ckp time: 06-DEC-16
……
RMAN> list copy;
specification does not match any control file copy in the repository
List of Datafile Copies
=======================
Key     File S Completion Time Ckp SCN    Ckp Time       
------- ---- - --------------- ---------- ---------------
1198    1    A 09-DEC-16       6366221    09-DEC-16      
        Name: /opt/oracle/fast_recovery_area/ORCL/datafile/o1_mf_system_d4m6s3b6_.dbf
        Tag: 1209_IMAGEBACKUP_ORCL
……
List of Archived Log Copies for database with db_unique_name ORCL
=====================================================================
Key     Thrd Seq     S Low Time 
------- ---- ------- - ---------
409     1    246     A 06-DEC-16
        Name: /opt/oracle/fast_recovery_area/ORCL/archivelog/2016_12_07/o1_mf_1_246_d4fzv5hw_.arc

RMAN> delete datafilecopy all;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=40 device type=DISK
List of Datafile Copies
=======================
……
1196    11   A 09-DEC-16       1917927    19-JAN-16      
        Name: /opt/oracle/fast_recovery_area/ORCL/29A27C8F580F36CAE0539201A8C03661/datafile/o1_mf_example_d4m6h841_.dbf
        Tag: 1209_IMAGEBACKUP_ORCL
Do you really want to delete the above objects (enter YES or NO)? yes
deleted datafile copy
datafile copy file name=/opt/oracle/fast_recovery_area/ORCL/datafile/o1_mf_sysaux_d4m6q1s1_.dbf RECID=8 STAMP=930102050
……

物理rm所有的了,去需要去RMAN中删除:

RMAN> delete backupset;
using channel ORA_DISK_1
List of Backup Pieces
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
344     342     1   1   AVAILABLE   DISK        /opt/oracle/fast_recovery_area/ORCL/autobackup/2016_12_06/o1_mf_s_929919293_d4fnb3lc_.bkp
Do you really want to delete the above objects (enter YES or NO)? YES
RMAN-06207: WARNING: 1 objects could not be deleted for DISK channel(s) due
RMAN-06208:          to mismatched status.  Use CROSSCHECK command to fix status
RMAN-06210: List of Mismatched objects
RMAN-06211: ==========================
RMAN-06212:   Object Type   Filename/Handle
RMAN-06213: --------------- ---------------------------------------------------
RMAN-06214: Backup Piece    /opt/oracle/fast_recovery_area/ORCL/autobackup/2016_12_06/o1_mf_s_929919293_d4fnb3lc_.bkp
RMAN> crosscheck backupset;
using channel ORA_DISK_1
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/opt/oracle/fast_recovery_area/ORCL/autobackup/2016_12_06/o1_mf_s_929919293_d4fnb3lc_.bkp RECID=2 STAMP=929919299
Crosschecked 1 objects

RMAN> 
RMAN> crosscheck copy;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=40 device type=DISK
specification does not match any datafile copy in the repository
specification does not match any control file copy in the repository
validation failed for archived log
archived log file name=/opt/oracle/fast_recovery_area/ORCL/archivelog/2016_12_07/o1_mf_1_246_d4fzv5hw_.arc RECID=40 STAMP=929931116
validation failed for archived log
……
RMAN> delete copy;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=40 device type=DISK
specification does not match any datafile copy in the repository
specification does not match any control file copy in the repository
List of Archived Log Copies for database with db_unique_name ORCL
=====================================================================
Key     Thrd Seq     S Low Time 
------- ---- ------- - ---------
409     1    246     X 06-DEC-16
        Name: /opt/oracle/fast_recovery_area/ORCL/archivelog/2016_12_07/o1_mf_1_246_d4fzv5hw_.arc
……
1195    1    252     X 08-DEC-16
        Name: /opt/oracle/fast_recovery_area/ORCL/archivelog/2016_12_09/o1_mf_1_252_d4m7yc1v_.arc
Do you really want to delete the above objects (enter YES or NO)? YES
deleted archived log
archived log file name=/opt/oracle/fast_recovery_area/ORCL/archivelog/2016_12_07/o1_mf_1_246_d4fzv5hw_.arc RECID=40 STAMP=929931116
deleted archived log
……
RMAN> list copy;
specification does not match any datafile copy in the repository
specification does not match any control file copy in the repository
specification does not match any archived log in the repository

21.8.3 backup as copy命令

oracle 11g有一个BACKUP AS COPY 命令:在不规定独立文件的前提下,可以完成整个数据库、表空间、多重表空间、数据文件、控制文件以及归档日志的图像副本备份。
可以使用BACKUP AS COPY命令轻松地完成整个数据库图像副本的复制,默认存放的路径仍然是数据库的闪回区域:
RMAN> backup as copy tag '1209_imagebackup_orcl' database;
……
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 12/09/2016 03:55:30
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 272629760 bytes disk space from 4781506560 limit
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 12/09/2016 03:55:32
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 262144000 bytes disk space from 4781506560 limit

比较目录下的数据大小:


5.1G>4560M

$ORACLE_BASE/fast_recovery_area是闪回恢复区的默认路径,而且也是归档日志和备份文件的默认路径。
其实可以将闪回恢复区、归档日志、备份文件 的默认路径,可看做:数据库恢复目录DB_RECOVERY

为了让备份在默认路径上备份成功,我们可以通过调整db_recovery_file_dest_size的大小来达到;
但是最好还是通过调整备份的路径来到达有可用的足够可备份空间,来达到备份成功,较好:


……
channel ch2: starting datafile copy
input datafile file number=00010 name=/opt/oracle/oradata/orcl/pdborcl/SAMPLE_SCHEMA_users01.dbf
output file name=/opt/oracle/bakdatabase/data_D-ORCL_I-1429293327_TS-USERS_FNO-6_0vrn3n8b tag=1210_ORCL_IMAGEBAKUP RECID=28 STAMP=930209036
channel ch1: datafile copy complete, elapsed time: 00:00:01
output file name=/opt/oracle/bakdatabase/data_D-ORCL_I-1429293327_TS-USERS_FNO-10_10rn3n8c tag=1210_ORCL_IMAGEBAKUP RECID=29 STAMP=930209037
channel ch2: datafile copy complete, elapsed time: 00:00:01
Finished backup at 10-DEC-16

Starting Control File and SPFILE Autobackup at 10-DEC-16
piece handle=/opt/oracle/fast_recovery_area/ORCL/autobackup/2016_12_10/o1_mf_s_930209039_d4ph8j3k_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 10-DEC-16
released channel: ch1
released channel: ch2
RMAN> 


实际的备份数据文件4.9G>4650M(默认的db_recovery_file_dest_size),和/opt/oracle/oradata/orcl下的文件大小5.1G相当(因为除了数据文件,还有一部分其他文件,例如控制文件)。
 

21.9.2 完全备份与递增备份

1. 概念解释
(1)完全备份
完全备份(注意并不是指备份整个数据库)是指在实施备份时,完全备份数据文件中所有的数据块,而不论该数据块是否被修改过。
(2)递增备份
递增备份是指在备份时只复制数据文件中自上次递增备份之后被修改过得数据块。

递增备份使用自己的0级备份作为备份的基线,0级备份时在某个时间点上的完全备份。

递增备份分为两类:差异递增备份和累积递增备份。
二者都是仅仅复制修改多的数据块,区别在于基线数据块如何来识别需要备份的修改了的数据块。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
http://blog.itpub.net/29119536/viewspace-1131999/ 
ORACLE RMAN增量备份经典理解 

Oracle中,增量备份时分等级的,级别从0开始,一级一级递增,不过实际上用的最多的也就是0级和1级了,0级增量备份是后面级别的增量备份的 基础,0级备份实际上就是一个完全备份,与普通的完全备份唯一的不同点是0级备份可以作为其他级别增量备份的基础,而普通的完全备份是不能的。

从级别1开始,Oracle的增量备份分为差异增量备份和积累增量备份两种,其中
差异增量备份备份的是:备份最近一次在同级别或低级别水平备份以来发生改变的数据块,
累积递增备份备份的是:n是现在的备份级别,复制这样一类数据块:最近<=n-1级别的备份之后发生变化的数据块,如果n=0,那么就复制最近一次0级备份以来发生变化的数据块。

在《Backup and Recovery User’s Guide》的“增量备份”一节中有两幅图很形象的描述了这两个增量备份之间的异同:


                      差异增量备份图示


                           积累增量备份图示
rman 0级增量备份:
其实全备和0级增量备份都是全备,但是也是有区别的,0级增量备份可以用于增量备份恢复的基础,而单独的全备不能用于增量备份的恢复基础!0级增量备份的命令如下:
RMAN> backup incremental level 0 database;
或者
RMAN> backup incremental level= 0 database;
RMAN> run
2> {
3> allocate channel ch1 device type disk format '/opt/oracle/bakdatabase/%U';
4> allocate channel ch2 device type disk format '/opt/oracle/bakdatabase/%U';
5> backup incremental level 0 tag '1210_orcl_increbakup' database;
6> }
released channel: ORA_DISK_1
allocated channel: ch1
channel ch1: SID=32 device type=DISK
allocated channel: ch2
channel ch2: SID=266 device type=DISK
Starting backup at 10-DEC-16
channel ch1: starting incremental level 0 datafile backup set
channel ch1: specifying datafile(s) in backup set
input datafile file number=00003 name=/opt/oracle/oradata/orcl/sysaux01.dbf
input datafile file number=00004 name=/opt/oracle/oradata/orcl/undotbs01.dbf
channel ch1: starting piece 1 at 10-DEC-16
channel ch2: starting incremental level 0 datafile backup set
channel ch2: specifying datafile(s) in backup set
input datafile file number=00011 name=/opt/oracle/oradata/orcl/pdborcl/example01.dbf
……
Starting Control File and SPFILE Autobackup at 10-DEC-16
piece handle=/opt/oracle/fast_recovery_area/ORCL/autobackup/2016_12_10/o1_mf_s_930240450_d4qfy3hm_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 10-DEC-16
released channel: ch1
released channel: ch2
RMAN> 

在没有修改目标数据库的情况下,接0级备份->执行1级备份
RMAN> 
RMAN> run
2> {
3> allocate channel ch1 device type disk format '/opt/oracle/bakdatabase/%U';
4> allocate channel ch2 device type disk format '/opt/oracle/bakdatabase/%U';
5> backup incremental level 0 tag '1210_orcl_incre1bakup' database;
6> }
allocated channel: ch1
channel ch1: SID=32 device type=DISK
allocated channel: ch2
channel ch2: SID=266 device type=DISK
Starting backup at 10-DEC-16
channel ch1: starting incremental level 0 datafile backup set
channel ch1: specifying datafile(s) in backup set
input datafile file number=00003 name=/opt/oracle/oradata/orcl/sysaux01.dbf
input datafile file number=00004 name=/opt/oracle/oradata/orcl/undotbs01.dbf
channel ch1: starting piece 1 at 10-DEC-16
……

Starting Control File and SPFILE Autobackup at 10-DEC-16
piece handle=/opt/oracle/fast_recovery_area/ORCL/autobackup/2016_12_10/o1_mf_s_930241406_d4qgvym3_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 10-DEC-16
released channel: ch1
released channel: ch2
RMAN> 
RMAN> delete backupset tag '1210_ORCL_INCRE1BAKUP';
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=32 device type=DISK
List of Backup Pieces
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
7584    7576    1   1   AVAILABLE   DISK        /opt/oracle/bakdatabase/19rn4mli_1_1
……

backup piece handle=/opt/oracle/bakdatabase/1drn4mqj_1_1 RECID=16 STAMP=930241364
Deleted 6 objects
RMAN> 
RMAN> 

RMAN> run
2> {
3> allocate channel ch1 device type disk format '/opt/oracle/bakdatabase/%U';
4> allocate channel ch2 device type disk format '/opt/oracle/bakdatabase/%U';
5> backup incremental level 1 tag '1210_orcl_incre1bakup' database;
6> }

released channel: ORA_DISK_1
allocated channel: ch1
channel ch1: SID=32 device type=DISK
allocated channel: ch2
channel ch2: SID=266 device type=DISK
Starting backup at 10-DEC-16
channel ch1: starting incremental level 1 datafile backup set
channel ch1: specifying datafile(s) in backup set
input datafile file number=00003 name=/opt/oracle/oradata/orcl/sysaux01.dbf
input datafile file number=00004 name=/opt/oracle/oradata/orcl/undotbs01.dbf
channel ch1: starting piece 1 at 10-DEC-16
……
channel ch2: finished piece 1 at 10-DEC-16
piece handle=/opt/oracle/bakdatabase/1jrn4muk_1_1 tag=1210_ORCL_INCRE1BAKUP comment=NONE
channel ch2: backup set complete, elapsed time: 00:00:35
Finished backup at 10-DEC-16

Starting Control File and SPFILE Autobackup at 10-DEC-16
piece handle=/opt/oracle/fast_recovery_area/ORCL/autobackup/2016_12_10/o1_mf_s_930241529_d4qgzsm8_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 10-DEC-16
released channel: ch1
released channel: ch2
RMAN> 
每执行一次,都会执行一次参数文件SPFILE和控制文件Control File全备份

list backupset结果可以看出,全备和0级增量备份在type上的区别!
同理,可以对数据库做1级增量备份,命令如下:
RMAN> backup incremental level 1 database;
此时rman需要对比0级增量备份后到执行1级增量备份时候的数据变化情况,备份出来的备份大小由数据更改的多少而定!

可以通过list backupset命令查看相关区别!同样备份信息可以在控制文件(没有连接到catalog数据库时)/catalog文件中查看!
--------------------------------------------->>一个增量备份的例子脚本
#!/bin/bash
# incremental level 0 backup script
source /home/oracle/.bash_profile
current_day=`date +%Y%m%d`
incr_day=102_incr_$current_day
mkdir /data/oracle/ora_backup/$incr_day
echo '-------------------------------------'
echo "-- Begin Increment Backup of DB 10.103.23.102 DateTime: `date` --"
echo '-------------------------------------'
rman target  / <
run
{
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data/oracle/ora_backup/$incr_day/PID-%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
crosscheck backup;
delete noprompt obsolete;
delete noprompt expired backup;
allocate channel dev1 type disk maxpiecesize=30720M;
allocate channel dev2 type disk maxpiecesize=30720M;
allocate channel dev3 type disk maxpiecesize=30720M;
allocate channel dev4 type disk maxpiecesize=30720M;
backup as compressed backupset incremental level 1 tag='db1'
format '/data/oracle/ora_backup/$incr_day/%n_%T_%U' database;
sql 'alter system archive log current';
backup archivelog all format '/data/oracle/ora_backup/$incr_day/arc_%n_%T_%U' delete all input;
release channel dev1;
release channel dev2;
release channel dev3;
release channel dev4;
}
EOF
echo '------------------------------------'
echo "--  End Increment Backup of DB 10.103.23.102 DateTime: `date`  --"
echo '------------------------------------'
scp -l 51200 -r /data/oracle/ora_backup/$incr_day oracle@10.103.23.103:/data/oracle/ora_backup102 &
wait
echo '------------------------------------'
echo "-- End of Send file to 10.103.23.103 DateTime: `date` --"
echo '------------------------------------'
echo ''
echo ''
----------------------------------------结束,谢谢-----------------------------------------
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

21.10 使用RMAN恢复数据库

RMAN的恢复分为完全恢复和不完全恢复两种类型。

RESTORE:将备份数据复制到指定的目录。
RECOVERY:对数据库实施同步恢复。

21.10.1 RESTORE

  该命令从磁盘或者磁带中重建数据文件、表空间、控制文件、归档日志文件以及服务器参数文件等。
  对于使用BACKUP所产生的所有备份集,在数据库恢复时都要求使用RESTORE命令。这是因为备份集中的备份片是以专有的RMAN格式存储的,需要使用RESTORE进行重建,
重建的结果是自动产生目标数据库的物理文件结构。
  
  如果备份文件是COPY命令或者BACKUP AS COPY命令生成的图像副本,则不需要使用RESTORE命令。

21.10.2 RECOVER

  该命令负责把归档执行日志文件用于重建的数据文件,来完成数据库的同步恢复。

  在执行RECOVER时,RMAN需要读取归档日志,如果没有归档日志,或者数据库运行在非归档方式下,则恢复过程会产生错误。
所以使用RMAN对数据库执行完全或者不完全恢复,数据库都应该在归档模式下。

21.10.3 实例解析

(1)为了完成一个完全的数据库恢复,目标数据库必须在MOUNT状态下。
如果要完成联机表空间或者低于完全数据库恢复的情况,则数据库可以处于OPEN状态。
SQL>conn /as sysdba
SQL>startup mount


(2)执行RESTORE DATABASE 和 RECOVER DATABASE命令。
RMAN>run
{
allocate channel ch1 type disk;
restore database;
recover database;
alter database open;
}
RESTORE从BACKUPSET重建数据文件,RECOVER确定是否需要应用归档日志文件,如果需要,那就将那些归档重执行日志用于数据库,以保持数据库的一致性。

(3)恢复表空间
恢复表空间时,数据库必须处于OPEN状态。
再恢复表空间之前,首先将要恢复的表空间离线,然后实施表空间的恢复,再将表空间联机。
RMAN>run
{
SQL 'ALTER TABLESPACE USERS OFFLINE';
RESTORE TABLESPACE USERS;
RECOVER TABLESPACE USERS;
SQL 'ALTER TABLESPACE USERS ONLINE';
}

(4)恢复数据文件子集
如果某个数据文件出现了毁坏,则可以使用RMAN实现数据文件的恢复
RMAN>run
{
allocate channel ch1 type disk;
sql 'alter database mount';
restore datafile 2;
restore datafile 3;
restore archivelog all;
recover database;
sql 'alter database open';
}

Logo

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

更多推荐