RMAN笔记

来源:互联网 发布:mysql中timestamp 编辑:程序博客网 时间:2024/05/18 14:22

二. RMAN 备份与恢复
2.1 掌握RMAN 的工作原理 
Recovery Manager, 简陈 RMAN,是SMR(Server Managed Recovery:服务器管理恢复)的具体实现。
SMR是数据库执行所需要的操作以确保自身备份成功的能力,依赖于Oracle RDBMS 内核中的内置代码可以完成这一功能。
2.1 掌握RMAN 的工作原理 
2.1.1 SMR实现过程
RMAN 是SMR的具体实现,RMAN 是一个独立的应用程序,它负责建立到Oracle 数据库的客户端连接,以访问数据库内部的备份和恢复数据

包。
RMAN 的核心命令是解释程序,解释程序接受所输入的命令,并将这些命令转换为在数据库上执行的远程调用(Remote Procedure call:

RPC).
比如:backup database;
概念:
  1.目标数据库(target database)指的是要备份的数据库。
  2.在做RMAN Duplicate的时候,还有一个辅助数据库,auxiliary database。
Oracle 内部数据包可以将RMAN 中的PL/SQL 块变成系统调用,这些调用即可以写入数据库服务器的磁盘系统,也可以读取数据库服务器的

磁盘子系统(我们的存储或者磁带设备)。
RMAN 由两部分组成,可执行文件(rman.exe)和recover.bsq 文件。 Recover.bsq 文件实质上是库文件,RMAN程序从recover.bsq 文件

中析取代码来创建在目标数据库上执行的PL/SQL 调用。
Recover.bsq 文件是整个操作的中枢。这个文件始终保持链接,并在逻辑上构成RMAN 客户端使用程序。

Recover.bsq所在的目录在 $ORACLE_HOME/rdbms/admin (oracle所有脚本都在这里)

2.1.2  RMAN 与数据库权限
RMAN需要访问目标数据库上sys用户存在的各种数据包,还需要具有启动和关闭目标数据库的权限。
因此RMAN 以sysdba 用户身份连接到目标数据库。 如果以不具有sysdba 权限的用户连接到目标数据库,RMAN 会报ORA-01031:

insufficient privileges 错误。
create user rman identified by 123456;
grant connect,resource to rman;
create user test1 identified by 123456;
grant connect,resource to test1;
rman target test1/test1
在安装数据库的时候,会创建一个Oracle 用户,且该用户是dba组的成员。 如果以Oracle 用户登录,在RMAN 中以什么身份连接就变的不

重要,它将总是用sysdba 来连接目标数据库,并且能够访问sys 模式,同时也具有启动和关闭数据库的能力。
如果作为dba组成员之外的用户登录并需要使用RMAN,就必须创建和使用一个口令文件来连接来连接到目标数据库。
如果要使用一个客户系统通过网络来连接RMAN,也需要创建和使用一个口令文件。

2.1.3 数据库控制文件
控制文件都记录了哪些信息?
select type from v$controlfile_record_s
由于控制文件存储的是数据库文件信息,所以RMAN 会利用控制文件获取备份所需的信息,具体的操作方式是: RMAN 使用控制文件来编译

文件列表,得到检查点信息,并确定可恢复性。ection;

2.1.3.1 在控制文件中重用记录
控制文件将内部数据记录分为两类:循环重用记录 和 非循环重用记录。
循环重用记录:可以从控制文件中删除的信息。如: 归档日志历史信息可以被删除,并且不会影响产品数据库。  如果控制文件因这类记

录而空间不足,则会删除这些记录以得到更多的空间。
非循环重用记录:是那些不能被删除的记录,非循环重用记录包括 数据文件列表 和日志文件列表。
控制文件中的RMAN 备份记录属于循环重用记录类型,如果含有这些记录的控制文件区域已满,这些记录就会删除。这会给恢复带来灾难,

致使控制文件中不存在任何备份记录,就好像从未发生过备份一样。
思考:控制文件没有RMAN 信息,能否恢复?
思考:哪个参数控制控制文件记录保留时间的? control_file_record_keep_time
select name,value from v$parameter where name='control_file_record_keep_time';
alter system set control_file_record_keep_time=20;--上线系统就要改掉。

2.1.3.2 快照控制文件
控制文件是一个IO频繁的文件。它存储数据库的结构信息,这些信息包括用于恢复的检查点SCN信息。 checkpoint 会频繁更新控制文件。
连续的SCN 和文件管理对于数据库的生命期来说至关重要,因此RDBMS 必须能够持续的使用控制文件。
这样就会为RMAN带来一个问题。RMAN 开始备份每一个数据文件时需要得到一个一致的控制文件视图,此时RMAN 只需要知道备份开始时最

新的检查点信息和文件就够信息。
开始备份后,RMAN 需要这些信息在备份操作期间保持一致,也就是说RMAN需要一个读取一致的控制文件视图。
除非RMAN 在备份持续时间内锁定控制文件,否则数据库会不断更新控制文件,所以不可能。
锁定控制文件意味着数据库不能执行检查点操作和切换日志,或则不能产生新的归档日志,这些操作是不可能的。
RMAN 使用快照控制文件(snapshot controlfile)来解决前面提出的问题,快照控制文件是控制文件的副本。
RMAN&get; show all;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_dave.f'; # default

2.1.4 RMAN 服务器进程
2.1.4.1 默认进程
RMAN 生成一个到目标数据库的客户连接,并创建两个服务器进程。
(1)主要进程:生成对SYS用户中的数据包的调用,从而执行备份和恢复操作,该进程会在备份和还原期间协调通道进程的工作。
(2)辅助进程(或影子进程):轮询RMAN中的所有长事务(long-running transaction)并在内部记录信息。
--监控进程的脚本
select sid,
       serial#,
       context,
       sofar,
       totalwork,
       round (sofar / totalwork * 100, 2) "%_complete"
  from v$session_longops
 where     opname like 'rman%'
       and totalwork != 0
       and opname not like '%aggregate%'
       and sofar <> totalwork;

2.1.4.2 通道
除了默认的两个进程外,在备份活还原操作期间还会为分配的每个通道单独的创建一个进程。
RMAN将通道视为目标数据库上的服务器进程,备份时,通道负责协调数据文件的读取和写入工作,还原时负责协调备份片的读取和在数据

文件位置写入数据块的操作。
通道进程只有两种类型: 磁盘通道 和 磁带通道。 我们不能为一个备份操作同时分配这两种通道,备份只能写入磁盘或写入磁盘。

2.1.4.3 RMAN 和 I/0从属
如果在目标数据库上配置了I/O从属,RMAN 就可以使用I/0从属。 为了用RMAN 备份和还原,有两种可用的I/0从属: 磁盘I/0 从属 和 磁

带I/0 从属。
使用DBWR_IO_SLAVES 参数可以配置磁盘I/O从属。 这个参数可以被设置为任意数值,它的主要作用是在将‘脏’缓冲区(即写满的缓冲区

)的内容写入磁盘时唤醒另外的DBWR从属来执行磁盘写操作。
如果参数被设置为非0值(如:1,12或23),RMAN 会自动在每个通道中切换使用4个I/O 从属来帮助将数据库读入RMAN内存缓冲区。
IO从属和异步IO的作用一样,都是为了提高IO的速度。
只有在OS 平台不支持本地异步或者禁止Oracle RDBMS使用异步I/O时,DBWR_IS_SLAVES参数才会起到作用,如果支持异步I/O,就不需要使

用磁盘I/O从属。

2.1.5 RMAN 使用的SYS数据包
RMAN 服务器进程在协调通道工作时要访问两个SYS数据包:DBMS_RCVMAN 数据包 和 DBMS_BACKUP_RESTORE 数据包, 这两个包包含了目标

数据库中RMAN的所有功能。
2.1.5.1 SYS.DBMS_RCVMAN 数据包
DBMS_RCVMAN 数据包用来访问控制文件中的信息并将此信息传递给RMAN,使RMAN 可以构建准确反应数据库结构的备份和还原操作。
DBMS_RCVMAN 包负责在执行任何操作前设置time 运算符和校验数据文件头中的检查点信息,数据文件的位置和大小,以及有关节点相似性

(在RAC 环境中)和磁盘相似性的其他信息。 
这种信息会影响RMAN的性能,并且RMAN 在构建实际备份/还原命令之前自动执行负载均衡(load-balancing)算法和性能增强

(performance-enhancing)算法。 
2.1.5.2 SYS.DBMS_BACKUP_RESTORE 数据包
SYS.DBMS_RCVMAN 包访问控制文件并校验所有必须的信息。 这些必须的信息被传递回RMAN服务器进程,RMAN 服务器进程随后会基于

recover.bsq 文件中的代码创建一些PL/SQL 块。 
这些PL/SQL 块含有对DBMS_BACKUP_RESOTRE 数据包的调用,实际上RMAN 中是由DBMS_BACKUP_RESTORE数据包来创建系统调用以备份数据文

件,控制文件和归档的redo log。 
RMAN 接收从DBMS_RCVMAN 数据包返回的信息,并在通道间基于负载均衡算法分配工作,然后创建一系列DBMS_BACKUP_RESTORE 数据包调用


在V$SESSION_LONGOPS 视图中可以跟踪的是DBMS_BACKUP_RESTORE 数据包的工作。
DBMS_BACKUP_RESTORE 数据包访问控制文件以备份该文件(实际上是控制文件的快照),在备份完成后写入备份信息。
一旦完成了一个备份集, DBMS_BACKUP_RESTORE 数据包就会在控制文件的表中写入备份开始时间,备份大小和备份名的信息。

2.1.2.3 内核中的RMAN 数据包
创建数据库时,运行cataproc.sql 脚本可以默认安装上述两个RMAN 数据包。 数据库创建期间无法跳过这一步骤。
这些RMAN 数据包还有一个重要的特性,他们被硬编码到Oracle 软件的库文件中,因此及时没有打开数据库也可以调用这些数据包。
大多数数据包只在数据库打开时才能被使用,不过RMAN可以在数据库实例处于nomout或者mount 时编写对DBMS_BACKUP_RESTORE 数据包的

调用。

--backup database的流程
1. 开始备份--》创建快照控制文件 --》SYS.DBMS_RCVMAN --》读取控制文件中的信息,并效验
2. RMAN 服务器进程-->recover.bsq 库文件中的代码创建一些PL/SQL 块-->DBMS_BACKUP_RESTORE数据包来创建系统调用以备份数据文件

,控制文件和归档的redo log
3. 这些RMAN 数据包还有一个重要的特性,他们被硬编码到Oracle 软件的库文件中,因此及时没有打开数据库也可以调用这些数据包。

简单来讲,就是sys.dbms_rcvman->recover.bsq->sys.dbms_backup_restore
注意rman 和 expdp 区别吗

2.1.6 备份数据块
即使是高级备份技术,备份的单元依然是数据文件,最终进行备份的OS 使用程序将查看并备份整个文件,因此需要特别注意保证Oracle

数据块的完整性。

2.1.6.1 数据块备份概述
数据块备份的工作原理:RMAN 基于备份算法规则来编译要备份的文件列表。
基于通道数和同时备份的数据文件数,RMAN 在Oracle 共享内存段中创建一些内存缓冲区。 一般在PGA中,不过有时内存缓冲区会被推入

SGA。 
通道服务器进程随后开始读取数据文件,并在RMAN缓冲区中填充这些数据块。
一个缓冲区被填充时,输入缓冲区中的数据块会被推入输出缓冲区。 数据文件中的每个数据块都会发生这种内存对内存的写操作

(memor-to-memory write)。 
如果数据块符合备份的标准并且内存对内存的写操作没有检测到corruption,则这些数据块会保留在输出缓冲区中直至输出缓冲区被填满

。 一旦输出缓冲区被填满,输出缓冲区就会被推至备份位置(磁带或者磁盘)。如果有坏块,RMAN 就报错。
一旦所有文件已通过内存缓冲区过滤,就完成了备份片,同时RMAN 会在目标数据库的控制文件中写入备份片的完成时间和备份片的名称。

2.1.6.2 块级备份的优点
访问数据块时可以选择空值压缩(null compression),可以删除从来没有使用过的数据块(头为0),并在执行内存对内存的写操作时丢

弃这些数据块,因此,我们只需要备份使用过的数据块,从而执行更有效的备份操作。
RMAN在备份期间不要求保证数据块的一致性。RMAN 对数据块的访问允许RMAN 与写‘脏’缓冲区的DBWR进程协调,并且在将这个数据块读

入内存以前,它可以等待直至数据块达到一致,因此数据块不会被转存为redo,并且备份中的数据块总是一致的。
RMAN 可以使用块级备份提供进一步的恢复新选项: 块介质恢复(block media recovery). 如果出现: ora-1578:block corruption

detected,  就不需要恢复整个文件以及执行恢复操作,RMAN 可以简单的恢复坏数据块并执行恢复操作,也就是说数据文件中的其他数据

在恢复期间仍然可用。

2.2 RMAN能否在跨操作系统使用? 能否跨DB 版本使用?
2.2.1 RMAN 程序的兼容性
RMAN 环境由以下5部分组成:
(1)RMAN executable
(2)Recovery catalog database
(3)Recovery catalog schema in the recovery catalog database
(4)Target database
(5)Auxiliary database (used forduplicate, duplicate for standby or tablespace point-in-time recovery)
这5部分中,rman的程序和target database是必须的,其他的3个是可选的。 

Oracle的每一个发行版本,由5位数字组成,但只有前面4位影响RMAN 的兼容性。
如:10.1.0.4, 9.2.0.6, 5.2.7.3
11.2.0.4.1
1. Major Database Release Number
第一个数字位,它代表的是一个新版本软件,也标志着一些新的功能。如11g,10g。
2. Database Maintenance Release Number
第二个数字位,代表一个maintenance release 级别,也可能包含一些新的特性。
3. Fusion Middleware Release Number
第三个数字位,反应Oracle 中间件(Oracle Fusion Middleware)的版本号。
4. Component-Specific Release Number
第四个数字位,主要是针对组件的发布级别。不同的组件具有不同的号码。 比如Oracle 的patch包。
5. Platform-Specific Release Number
第五个数字位,这个数字位标识一个平台的版本。 通常表示patch号。
一般来说,RMAN兼容性规则如下:
(1)RMAN 可执行文件的版本要和目标数据库的版本一致,但也有例外,具体参考下表。
(2)RMAN catalog schema 的版本必须大于等于RMAN 可执行文件的版本。
(3)RMAN catalog对target database目标数据库向后兼容,支持早期版本的目标数据库
(图)

2.2.2 RMAN 对不同操作系统的支持
RMAN 支持混合平台之间支持如下操作:
+ Active Database DUPLICATE
+ Backup-based DUPLICATE using image copies or backup sets
+ RESTORE and RECOVER using image copies or backup sets
这里的跨平台的操作,需要在相同的数据库版本基础上进行,不能从10g 恢复到11g。
目前能够进行以上混合操作的平台信息如下:
(1)在Oracle 10gR2 之后的版本,支持如下操作系统之间的RMAN 操作:
Solaris x86-64 <-> Linux x86-64
HP-PA <-> HP-IA
Windows IA (64-bit) / Windows (64-bitItanium) <-> Windows 64-bit for AMD / Windows (x86-64)
(2)  在Oracle 11gR1 之后的版本,支持增加如下操作系统之间的RMAN 操作,当然这里也包含第一条里提到的10gR2后的组合。
Linux <-> Windows
(3)在11.2.0.2以上版本中,因为Bug 12702521的存在,SolarisSPARC (64-bit) <-> AIX (64-bit) 这2个版本之间不能进行RMAN 操作


上面讲的不同操作系统之间可以进行的RMAN 操作实际是相同endian 之间的组合。
--查询视图
select * from v$transportable_platform order by 3;
如果系统的endian 格式不同,那么就需要使用其他的方法来进行操作,如传输表空间,数据泵。


2.3.1 Catalog 说明
恢复目录存储的是与RMAN备份有关的元数据。在某种意义上,恢复目录可以看做是保存RMAN 备份和恢复所需的相关信息的副本。
恢复目录仅仅是一些数据包,表,索引和视图。
一个恢复目录可以存储多个目标数据库的信息,这样可以集中管理许多不同数据库的备份,通过SQL可以查询恢复目录的视图,由此确定在

恢复目录中注册的每个目标数据库的备份数,备份大小和备份范围。

2.3.2 Catalog 示例
注意:
(1)使用rman nocatalog恢复时,数据库必须是处于“mount”状态的。而Oracle startup mount的前提条件是control必须存在。因此,

你必须在恢复datafile之前先恢复controlfile。
(2)使用rman catalog方式时,可以startup nomount然后restore controlfile;

2.3.2.1 创建Catalog所需要的表空间
create tablespace tbs_catalog datafile '/s01/oracle/oradata/study/tbs_catalog.dbf'  size 40M;

2.3.2.2 创建RMAN用户并授权
create user ctl identified by ctl default tablespace tbs_catalog;
grant connect,resource,recovery_catalog_owner to ctl;

2.3.2.3 创建恢复目录catalog

--使用连接到catalog数据库,注意连接语法:
[oracle@dave ~]$ rman catalog ctl/ctl
--创建catalog 目录:
create catalog;
实际上,创建catalog 目录的过程就是在catalog用户下面创建相关的对象。
可以通过如下SQL 验证:
select object_type,count(1) from dba_objects where owner='CTL' group by object_type order by 2 desc;
我们现在已经有了存放catalog的表,但是这些表里是没有数据的,我们需要把数据库的信息注册到catalog的表中,并且在我们每次RMAN

操作中,都要把这些RMAN 信息同步到catalog表中。

2.3.2.4 注册数据库
注意连接语法:
[oracle@dave ~]$ rman target / catalog ctl/ctl
我们这里连接了本地的数据库,也连接了catalog 数据库,我们这里是都在本地,那么实际上,生产环境如果使用catalog,那么catalog

必须是独立的数据库,不能是我们的备份数据库。

--注册数据库到catalog中:
RMAN>register database;

我们注册之前,catalog用户的表是空的,现在我们查询一个:需要归档模式
SQL>select fname from ctl.al where rownum<10;

2.3.2.5 同步catalog
RMAN>resync catalog;

2.3.2.6 注销catalog中的数据库信息
RMAN>unregister database;

2.3.2.7 手工添加备份文件信息到catalog
如果我们的备份集或者备份片不在我们的catalog中,那么是不能用来进行恢复的,这是后,就需要手工的将这些信息注册到catalog中,

可以通过命令将如下类型的文件注册到catalog中:
(1)control file copies
(2)data file copies
(3)backup pieces
(4)archived redo log files
注册命令:
RMAN>catalog backuppiece '?/oradata/01dmsbj4_1_1.bcp';

RMAN>catalog archivelog '?/oradata/archive1_30.dbf', '?/oradata/archive1_31.dbf';

RMAN>catalog datafilecopy '?/oradata/users01.bak';

如果文件很多,我们用命令就会显的很慢,所以可以一次性把整个目录catalog进去:
RMAN>catalog start with '/tmp/arch_logs';
上面是我们自己指定的目录,如果想把FRA 注册进去可以使用如下命令:
RMAN&get;catalog recovery area noprompt;

2.3.2.8 删除恢复目录catalog
如果我们不像使用之前的catalog了,可以把整个catalog drop 掉:
[oracle@dave ~]$ rman catalog ctl/ctl        
Recovery Manager: Release 11.2.0.3.0 - Production on Thu Jan 16 07:03:26 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to recovery catalog database
RMAN> drop catalog;


2.4 生产环境如何配置RMAN?
2.4.1 查看RMAN 配置的默认值
2.4.1.1 show all 命令
2.4.1.2 查询v$rman_configuration视图
select * from v$rman_configuration;
要注意,v$rman_configuration 只列出非默认的RMAN配置。

2.4.2 修改控制文件自动备份
2.4.2.1 启用控制文件自动备份
--用show all;查看参数找到要改的参数
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
--修改
CONFIGURE CONTROLFILE AUTOBACKUP ON;

当启用控制文件自动备份以后,在数据文件有变化,或者备份数据库的时候,都会自动的备份控制文件和spfile文件。

2.4.2.2 控制文件自动备份格式说明
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
如果没有指定目录,只指定了%F,自动备份的控制文件存放在什么位置?Fash Recovery Area 或fast recovery area
select file_type from v$flash_recovery_area_usage;

这里的位置我们是可以修改的,但必须包含%F这个变量:
如果修改成如下格式:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/s01/backup/%F';

[oracle@dave backup]$ pwd
/u01/backup
[oracle@dave backup]$ ll -lh
total 289M
-rw-r-----. 1 oracle oinstall 19M Dec  6 19:52 c-879543530-20131206-06
-rw-r-----. 1 oracle oinstall 19M Dec  6 20:07 c-879543530-20131206-07
-rw-r-----. 1 oracle oinstall 19M Dec  6 20:08 c-879543530-20131206-08
-rw-r-----. 1 oracle oinstall 19M Dec  6 20:12 c-879543530-20131206-09
 [oracle@dave backup]$

我这里自动备份的控制文件大小是19M。注意格式,%F对应的格式都是这种:c-879543530-20140116-01。
即:c-IIIIIIIIII-YYYYMMDD-QQ。
我们看一下具体格式的含义:
IIIIIIIIII: 表示的是DBID.
YYYYMMDD:表示的备份的日期
QQ:是一个十六进制的序列号,从00到FF。

这里又会引入另一个问题,就是如果我们自动备份的控制文件不在FRA里,那么在我们使用自动备份来恢复时,就需要指定DBID。 这样才

能成功查找。

2.4.3 如何管理RMAN 配置
一般来讲,我们对RMAN 配置的管理主要涉及2个操作,一个是修改,一个是还原。
2.4.3.1 查看RMAN 配置
show all;
show controlfile autobackup format;

2.4.3.2 修改配置值
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;  --修改默认通道数

2.4.3.3 清除修改
CONFIGURE DEVICE TYPE DISK clear;

2.4.4 指定RMAN 的备份位置
RMAN 生成的备份集可以存放在三个位置:
(1)FRA
这个也是默认的位置,当我们指定备份集到disk的时候,在不指定的format的情况下就会备份到FRA中。
(2)磁盘目录
当我们指定备份到磁盘目录之后,也需要通过format来指定默认的位置。
RMAN>CONFIGURE DEFAULT DEVICE TYPE TO DISK;
RMAN>CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ='/u01/backup/%U';
(3)磁带
即带库,一般都是通过Media management library来进行管理。
RMAN>CONFIGURE DEFAULT DEVICE TYPE TO TAPE;

操作示例:
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO TAPE;

CONFIGURE DEFAULT DEVICE TYPE clear;

2.4.5 RMAN通道配置
--自动配置的方法如下:
RMAN&get;configure default device type to disk;
RMAN&get;configure channel device type disk format ='/s01/backup/%U';

--手工配置:
手工分配就是在RMAN 的代码块里分配通道信息。 如:

run
{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup database;
release channel c2;
release channel c1;
}

2.4.6 创建duplexed的备份集
RMAN 最多可以对备份集产生4份copies。每个copy都是相互冗余的,每个copy都会有一个唯一的名称。
我们可以有2种方法来创建duplex 的备份:
(1) backup … copies
(2)configure … backup copies
对于disk 通道,可以在format中指定不同的物理磁盘来存放不同的copy。
如果是sbt 通常,可以通过SBT API 分别连接不同medium。

注意:
(1)duplex backup 不能存放在FRA中。
(2)duplex backup 只对backup sets有效,对于image copies无效。

2.4.6.1 使用configure … backup copies
RMAN&get; show all;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

--自动配置的方法如下:
RMAN&get;configure default device type to disk;
RMAN&get;configure channel device type disk format ='/s01/backup/%U';

--备份数据文件
RMAN&get; backup datafile 4;
--备份归档文件:
RMAN&get; backup archivelog all delete input;

2.4.6.2 使用backup … copies
--备份数据文件:
RMAN&get; BACKUP AS COPY DATAFILE 4;

2.4.7 RMAN backup 的优化
2.4.7.1 启用backup optimization 条件  --跳过已经备份的文件
满足下面任意一个条件都会启动这个特性:
(1) 在RMAN 配置里启用optimization
CONFIGURE BACKUP OPTIMIZATION OFF; # default
该特性默认是禁用的。
(2) 只分配了一个通道。
(3)执行BACKUP DATABASE,BACKUP ARCHIVELOG ALL 或者 BACKUP ARCHIVELOG LIKE, BACKUP BACKUPSET ALL 命令时会启用该特性。
(4)执行BACKUP RECOVERY AREA,BACKUP DB_RECOVERY_FILE_DEST,BACKUP RECOVERY FILES命令时也会自动启用backup optimization 特

性。

2.4.7.2 如何强制备份所有文件?
可以在我们的备份命令上加上FORCE来强制备份所有文件,如:
RMAN&get; BACKUP ARCHIVELOG ALL FORCE;

注意,该FORCE 选项对于FRA中的文件是没有作用的。

2.4.8 RMAN 中节省备份空间的策略
在RMAN 备份的过程中,不会备份如下两种类型的blocks:
(1)unallocated blocks: 即datafile 文件高水位以上的block  --unallocated blocks:未分配的块
(2)unused blocks: 这些block 之前可能已经分配过,但现在已经不属于某个segment,那么这些block也不会备份。

2.4.9 RMAN 中的压缩策略
算法有4个级别:HIGH,MEDIUM,LOW 和 BASIC.
对于压缩备份的备份集操作,不管是备份还是还原,都会需要消耗一定的CPU资源,但是可以节省磁盘空间。
--默认值
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
--修改:
RMAN&get; configure compression algorithm 'high';
或者:
run{
set compression algorithm 'high';
}

不同级别对比如下:
(图)
LOW等于LZO压缩。
MEDIUM 等于ZLIB 压缩。
HIGH 等于GZIP 压缩。
BASIC 等于 BZIP2 压缩。

2.4.10 修改控制文件保存的时间
控制文件保存的时间由参数CONTROL_FILE_RECORD_KEEP_TIME决定,默认值是7天。 我们可以改成0到365之间的任意值。

SQL&get; select name,value from v$parameter where name='control_file_record_keep_time';
NAME                           VALUE
------------------------------ -------------------------------------------------
control_file_record_keep_time   7

2.4.11 配置备份默认的保存策略
2.4.11.1 通过recovery window
如:configure retention policy to recovery window of 7 days;
recover window是保持所有足够的备份,可以将数据库系统恢复到最近七天内的任意时刻。任何超过最近七天的数据库备份将被标记为

obsolete。

2.4.11.2 通过redundancy
如:configure retention policy to redundancy 5;
redundancy 是为了保持可以恢复的最新的5份数据库备份,任何超过最新5份的备份都将被标记为obsolete。它的默认值是1份。

注意:
设置成redundancy 1,就是会删除controlfile和spfile。

--删除过期
report obsolete;
delete noprompt obsolete;
crosscheck backup;
delete noprompt expired backup;

2.4.11.3 保存策略重置为默认值(冗余为1)
configure retention policy clear;

2.4.11.4 不应用任何保存策略。
CONFIGURE RETENTION POLICY TO NONE;


2.5 如何使用RMAN来创建备份
2.5.1 创建backup sets
backup sets 是RMAN 独有的一种格式。 backup sets 由backup piece 组成,每个备份片又可以由一个或者多个数据库文件组成。
--示例:
RMAN&get; backup as backupset tablespace users format = '/s01/backup/users_%u%p%c';

2.5.2 创建image copy
一个image copy 是一个data file,archive log 或者控制文件的克隆。 创建image copy 有两种方法:
(1)使用backup as copy
(2)直接在操作系统上copy
当使用backup as copy的时候,RMAN 会依据控制文件验证文件里的block 或者record 信息。 但是直接在操作系统上copy 是不会验证的

2.5.2.1  image copy 数据文件
backup as copy datafile '/s01/oracle/oradata/study/users01.dbf' format '/s01/backup/users01.dbf';

2.5.2.2  image copy 控制文件
RMAN&get; backup as copy current controlfile format '/s01/backup/control.ctl';

2.5.2.3  归档文件
RMAN&get; backup as copy archivelog all format '/s01/backup/arch_%U.arc';

2.5.3 创建整库的备份
RMAN&get;backup database plus archivelog delete input;

2.5.4 RMAN 备份类型
2.5.4.1 Full backups
如果是backupset, Full data file backup 备份的是文件中所有使用的blocks。 RMAN 会把这些Blocks 复制到backup set 或者image

copy中,跳过那些没有使用过的block。
如果是full image copy 那么就是整个文件都会被精确复制。
注意: full backup 不能作为增量备份的基础。

2.5.4.2 Incremental Backups
增量备份可以是0级备份或者1级备份:
0级备份:包含所有已经使用的blocks。
1级备份:包含自上自备份以来发生变化的blocks。

增量备份除了我们前面讲的0级和1级的分类之外,还有differential 和 cumulative的分类。
Differential:差异备份,增量备份的默认类型,备份自上次增量备份(0级或1级)以来改变的blocks。
Cumulative:累积备份,自上次0级备份以来所有改变的blocks。
语法:
RMAN&get;backup incremental level 0 database;
RMAN&get;backup incremental level 1 database;
RMAN&get;backup incremental level 1 cumulative database;

2.5.5 只读表空间的备份
只读表空间是不能进行写操作的,只有当只读表空间没有备份过的情况下,Oracle backup optimization 才会去备份read-only 表空间。
SQL&get; alter tablespace users read only;
Tablespace altered.
SQL&get; select  TABLESPACE_NAME,status from dba_tablespaces;
对于只读表空间,可以使用skip readonly 跳过对只读表空间或者数据文件的备份。
RMAN&get;backup database skip readonly;

2.5.6 创建多个section
Backup 和 validate datafile 命令支持添加section size 关键字。如:
backup … section sieze xx [K|M|G]
validate datafile … section size xx [K|M|G]
添加之后,就可以控制单个备份片的大小了。

--示例:
RMAN&get; backup datafile 4 section size 20M;  --指定单个备份文件大小
backup  incremental level=0 filesperset 5 Database format='/u01/backup/dave_%U_%T' ;  --按文件数量

2.5.7 备份Recovery Files
有两种方法来备份recovery data。
(1)backup recovery area:该命令会备份当前Fast Recovery Area 或者之前的FRA中的所有文件。
(2)backup recovery files: 该命令也会备份所有recovery files,即使这些文件不在FRA里。
--只备份在FRA中的文件:
RMAN&get; backup recovery area;     backup recovery area to destination '/s01/backup/';
RMAN&get; backup recovery files;     backup recovery files to destination '/s01/backup/';

2.5.8 RMAN 相关的视图
(1)v$backup_set
(2)v$backup_piece
(3)v$datafile_copy
(4)v$backup_files

2.6 实战: 部署Nocatalog下的RMAN 增量备份脚本







0 0