1 RMAN备份恢复
1.1 基础理论
恢复可以分为完全恢复和不完全恢复
完全数据库恢复是恢复到故障发生前的状态,所有已经提交的操作都进行恢复,确保数据库不丢失任何数据,完全恢复只用于归档模式。
不完全数据库恢复是将数据库恢复到备份点与介质失败点之间某个时刻的状态,并不是恢复所有提交的操作,不完全恢复可能丢失部分数据。
任何类型的恢复包括两个阶段:前滚阶段和回滚(回退)阶段。 在前滚恢复阶段(roll-forward recovery),恢复管理器应用必要的事务日志组“重做”(REDO)所有提交的不在数据库数据文件中的事务 。回滚阶段,在前滚恢复后,Oracle必须执行回滚恢复(roll-back recovery)。 由于一些未完成的事务对数据库的修改信息已经提交到数据库,为保证数据库的一致性,需要清除这些事务对数据库的修改,数据库应执行回滚操作(UNDO),强制撤销这些未完成事务。
1.2 RMAN(备份与恢复管理器)
RMAN 是ORACLE 提供的一个备份与恢复的工具,可以用来备份和还原数据库文件、归档日志和控制文件。它也可以用来执行完全或不完全的数据库恢复。RMAN可以由命令行接口或者OEM的Backup Manager GUI 来控制。
RMAN备份形式
1、镜像复制(Image Copies)
镜像复制实际上就是数据文件、控制文件或归档文件的复制,与用户通过操作系统命令建立的文件复制实质一样,只不过RMAN是利用目标数据库中的服务进程来完成文件复制,而用户则是用操作系统命令。所以镜像复制的方式体现不出RMAN的优势,也并非我们讨论的重点,大家了解一下即可(啥?想知道镜像复制咋用?卡,问村长去~~~~~)。
2、备份集(Backup Sets)
备份集是通过RMAN创建的逻辑备份对象。一个备份集中可以包含多个数据文件、控制文件或归档文件。备份集在物理上是由多个备份片段组成,每个备份片段是一个操作系统文件。
1.3 基本知识
1.3.1 RMAN的组件、概念
1.3.1.1 RMAN 组件
Target Database: (目标数据库)
就是需要 RMAN 对其进行备份与恢复的数据库,RMAN 可以备份数据文件,控制文件,归档日志,spfile。(注意:RMAN不能用于备份联机日志、初始化参数文件和口令文件)
Server Session: (服务器会话)
RMAN 启动数据库上的Oracle 服务器进程,将建立一个与目标数据库的会话。由目标数据库上的服务器进程进行备份、还原、恢复的实际操作。
服务器进程
RMAN 的服务进程是一个后台进程,用于与RMAN 工具与数据库之间的通信,也用于RMAN 工具与磁盘/磁带等 I/O 设置之间的通信,服务进程负责备份与恢复的所有工作,将产生一个服务进程。
Channel: (通道)
一个通道是RMAN和目标数据库之间的一个连接,"allocate channel"命令在目标数据库启动一个服务器进程,同时必须定义服务器进程执行备份或者恢复操作使用的I/O 类型。
通道控制命令可以用来:
(1) 控制RMAN 使用的O/S资源,影响并行度
(2) 指定I/O带宽的限制值(设置limit read rate 参数)
(3) 定义备份片大小的限制(设置limit kbytes)
(4) 指定当前打开文件的限制值(设置limit maxopenfiles)
recovery catalog: (恢复目录)
用来保存备份与恢复信息的一个数据库,不建议创建在目标数据库上。RMAN 利用恢复目录记载的信息去判断如何执行需要的备份恢复操作。如果不采用恢复目录,备份信息可以存在于目标数据库的control file中。如果存放在目标数据库的control file 中,控件文件会不断增长,不能保存RMAN 的Script。
CONTROL_FILE_RECORD_KEEP_TIME (default=7):控件文件中RMAN 信息保存的最短时间。
使用恢复目录的优势: 可以存储脚本,记载较长时间的备份恢复操作。RMAN Repository: (RMAN 恢复目录数据库)存放recovery catalog(恢复目录)的数据库。建议为恢复目录数据库创建一个单独的数据库。
MML: (媒体管理库)
Media Management Layer (MML)是第三方工具或软件,用于管理对磁带的读写与文件的跟踪管理。如果你想直接通过 RMAN 备份到磁带上,就必须配置媒体管理层,媒体管理层的工具如备份软件可以调用RMAN来进行备份与恢复。
1.3.1.2 概念述语
Backup Sets (备份集合)
备份集合的特性:包括一个或多个数据文件或归档日志,以oracle 专有的格式保存,有一个完全的所有的备份片集合构成,构成一个完全备份或增量备份。
Backup Pieces (备份片)
一个备份集由若干个备份片组成。每个备份片是一个单独的输出文件。一个备份片的大小是有限制的;如果没有大小的限制,备份集就只由一个备份片构成。备份片的大小不能大于使用的文件系统所支持的文件长度的最大值。
Image Copies镜像备份
镜像备份是独立文件(数据文件、归档日志、控制文件)的备份。它很类似操作系统级的文件备份。它不是备份集或备份片,也没有被压缩。
Full backup Sets全备份集合
全备份是一个或多个数据文件中使用过的数据块的的备份。没有使用过的数据块是不被备份的,也就是说,oracle 进行备份集合的压缩。
Incremental backup sets增量备份集合
增量备份是指备份一个或多个数据文件的自从上一次同一级别的或更低级别的备份以来被修改过的数据块。与完全备份相同,增量备份也进行压缩。
File multiplexing多个数据文件可以在一个备份集中。
Recovery catalog resyncing 恢复目录同步
使用恢复管理器执行backup、copy、restore 或者switch 命令时,恢复目录自动进行更新,但是有关日志与归档日志信息没有自动记入恢复目录。需要进行目录同步。使用resync
1.3.2 RMAN的使用:命令行接口与脚本
数据库状态
RMAN恢复目录数据库: 必须OPEN
目标数据库: 根据不同情况,必须MOUNT或OPEN
1.3.2.1 连接本地数据库
C:\Documents and Settings\Administrator>set oracle_sid=jssweb C:\Documents and Settings\Administrator>rman target /
或者
C:\Documents and Settings\Administrator>set oracle_sid=jssweb C:\Documents and Settings\Administrator>rman 恢复管理器: 版本9.2.0.1.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. RMAN> connect target /
1.3.2.2 连接远程数据库
如果要连接的目标数据库是一个远程数据库,那么必须在建立连接时指定一个有效的网络服务名,同时你本地的tnsname.ora文件中也必须已经建立了该网络服务名的正确配置。示例如下:
C:\Documents and Settings\Administrator>rman target sys/change_on_install@testdb 恢复管理器: 版本9.2.0.1.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. 连接到目标数据库: TESTDB (DBID=2220262593) RMAN>
当然,在这里你也可以同样先启动rman,再通过connect创建连接。具体示例与上类似,如果再做演示那这个环节不仅是弱,而是超弱,即使坚定如我也承受不了如此强烈的呕吐加鄙视的欲望,所以还是做罢吧
1.3.2.3 退出RMAN
哈哈,退出就太简单啦,敲个EXIT即可
备注:在启动rman时可以指定日志输出,之前的示例中均没有指定,rman就将执行结果直接打印到屏幕了,如果我们以后写了一堆超长的rman批处理放在后台执行,可能会希望能够把执行日志记录下来备查,这个时候日志输出功能就用上了。这个功能也非常简单,如下:
C:\Documents and Settings\Administrator>rman target / log d:\logs\rman_log.txt RMAN>
rman会将执行的结果直接输出到指定的d:\logs\rman_log.txt文件,一旦脚本放入后台执行出现问题,我们可以根据rman_log文件来辅助分析。
使用带恢复目录的RMAN, 只需在RMAN后加上 CATALOG即可。
1.3.2.4 启动、关闭数据库
在RMAN中执行关闭和启动数据库的命令与SQL环境下一模一样。当然,在执行之前,你需要先连接到目标数据库
1.3.2.5 执行操作系统命令
Rman支持通过执行host命令暂时退出rman的命令提示符而进入到操作系统的命令环境,如下例:
RMAN> host; Microsoft Windows [版本 5.2.3790] (C) 版权所有 1985-2003 Microsoft Corp. C:\Documents and Settings\Administrator>cd C:\>exit 主机命令完成 RMAN>
执行完系统命令后可以再通过执行exit退出到rman命令提示符下。
1.3.2.6 执行SQL语句
在rman中执行sql语句稍嫌复杂。
在RMAN的命令提示符后输入SQL命令,然后在一对单引号(双引号亦可)中输入要执行的SQL语句,例如:
RMAN> SQL ‘ALTER SYSTEM ARCHIVE LOG ALL‘;
需要注意的一点是,rman中的sql环境不能执行SELECT语句,或者说执行不报错,但你也看不到结果。
1.3.2.7 显示RMAN默认配置
Rman中可以利用show命令来显示当前的配置参数。例如,通过SHOW ALL显示当前所有的配置。
RMAN> show all; RMAN 配置参数为: CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS; CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘d:/backup/%F‘; CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # 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 SNAPSHOT CONTROLFILE NAME TO ‘F:\ORAHOME1\DATABASE\SNCFJSSWEB.ORA‘; #default RMAN>
注:配置项后面跟了# default的表示该项仍是初始配置,未被修改过。
该命令使用也相当灵活,其后跟上不同的类型的配置参数,即可以显示不同类型的配置,如:
RMAN> show channel; // 通道分配
RMAN> show device type; // IO设备类型
RMAN> show retention policy; // 保存策略
RMAN> show datafile backup copies; // 多个备份的拷贝数目
RMAN> show maxsetsize; // 备份集大小的最大值
RMAN> show exclude; // 不必备份的表空间
RMAN> show backup optimization; // 备份的优化
改配置是通过CONFIGURE命令
1.3.2.8 RMAN查看信息 List与Report
恢复目录相关视图
恢复目录本身有一组视图,用于存放目标数据库与备份信息,可以用RMAN 用户登录数据库进行查看,例:
RC_DATABASE
RC_DATAFILE
RC_STORED_SCRIPT
RC_STORED_SCRIPT_LINE
RC_TABLESPACE
RMAN备份相关的动态性能表
l V$ARCHIVED_LOG:本视图包含了所有归档重做日志文件的创建情况,备份情况以及其他信息。
l V$BACKUP_CORRUPTION:这个视图显示了RMAN在哪些备份集中发现了损坏的数据坏。在你使用BACKUP VALIDATE命令对备份集进行检查时如果发现了损坏的数据块,RMAN将在这个视图中写入记录。
l V$COPY_CORRUPTIO:本视图显示了哪些镜像复制备份文件已经被损坏。
l V$BACKUP_DATAFILE:本视图通常用来获取每个数据文件中非空白数据块的数量,从而帮助你创建出大小基本相等的备份集。另外,在视图中也包含了数据文件中损坏的数据块的信息。
l V$BACKUP_REDOLOG:本视图显示了在现有的备份集中饮食有哪些归档重做日志文件。
l V$BACKUP_SET:本视图显示了已经创建的备份集的信息。
l V$BACKUP_PIECE:本视图显示了已经创建的备份片段的信息。
List
List 命令是一种在数据库控制文件或者恢复目录中查询备份的历史信息的方法。
List提供了一组信息,可以提供各种备份的信息,如对应物、备份集、归档日志备份、控
制文件备份等等。
列出对应物:
RMAN> list incarnation;
RMAN> list backup summary; --列出备份概要信息
RMAN> list backup by file; --按备份类型列出备份
RMAN> list backup; --获得备份的详细信息
RMAN> list backupset bs#; --包括备份片的物理文件名
RMAN> list backup tag=tab_number; --或者按照TAG 来查
RMAN> list expired backup; --列出过期的备份
RMAN> list backup of tablespace USERS; --按照表空间和数据文件来列出备份
RMAN> list backup of datafile 5; --列出文件 5 的备份
RMAN> list backup of datafile ‘ E:\ORACLE\USERS.DB ‘; --列出文件 E:\ORACLE\USERS.DB 的备份
RMAN> list backup of controlfile; --列出控制文件的备份
RMAN> list archivelog all; --列出归档日志的备份
RMAN> list backup of archivelog all; --列出归档日志的备份
RMAN> list copy --列出所有的副本。
RMAN> list copy of controlfile --列出控制文件副本
RMAN> list copy of archivelog all --列出所有归档日志副本
RMAN> list copy of database --列出数据库所有数据文件的副本
Report
Report 命令被用于判断数据库的当前可恢复状态和提供数据库备份的特定信息,可以检测哪些文件需要备份,哪些备份能被删除以及那些文件能不能获得的信息。可以报告数据库的所有能备份数据文件对象,包括数据文件名、文件号、表空间、文件大小、是否含有回滚段等。
RMAN> report schema
或者
RMAN> REPORT SCHEMA AT TIME ‘SYSDATE-14‘; RMAN> REPORT SCHEMA AT SCN 1000; RMAN> REPORT SCHEMA AT SEQUENCE 100 THREAD 1;
报告需要备份的数据文件
RMAN> report need backup [ redundancy | days | incremental n];
报告过期了的数据文件或者不可用的备份与拷贝
RMAN> Report obsolete [orphan]
1.3.2.9 删除备份
用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RMAN资料库中生成RMAN备份记录,并且RMAN备份记录被存放在目标数据库的控制文件中,如果配置了恢复目录,那么该备份记录也会被存放到恢复目录中。
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> delete archivelog all delete input;
RMAN> delete backupset 22 format = ‘‘d:\backup\%u.bak‘‘ delete input;
1.3.2.10 批处理
RMAN>RUN{
.......................
.......................
}
批处理方式实质是将原来单个执行的命令组合到一起,并放在run{}之间,这种方式最大的好处是所有在run中的命令被视为一个作业,如果作业中任何一条命令执行失败,则整个命令停止执行,即失败命令后的其它命令都不会再被执行。这种方式是最常使用的方式,特别对于后台执行。
1.3.2.11 运行脚本
C:\>rman TARGET / @backup_db.rman
RMAN> @backup_db.rman
RMAN> RUN { @backup_db.rman }
运行存储在恢复目录中的脚本(需要首先为rman创建恢复目录)
RMAN> RUN { EXECUTE SCRIPT backup_whole_db };
看看,够灵活吧。
操作系统脚本(linux,windows环境下小有差异,但只是操作系统命令的不同)
C:\>rman cmdfile=backup_db.rman
明眼人看的出来,后两种其实是前面两种加上操作系统命令的综合应用。
1.4 RMAN的配置
1.4.1 建立Recovery Catalog恢复目录
(1) 在目录数据库中创建恢复目录所用表空间:
SQL> create tablespace rman_ts datafile ‘/xxx/rman_ts.dbf‘ size 20M;
(2) 在目录数据库中创建RMAN 用户并授权:
SQL> create user rman identified by rman default tablespace rman_ts temporary tablespace temp quota unlimited on rman_ts;
SQL> grant connect, resource, recovery_catalog_owner to rman;
(3) 在目录数据库中创建恢复目录
$ rman catalog rman/rman
RMAN> create catalog tablespace rman_ts;
(4) 登记目标数据库:
一个恢复目录可以注册多个目标数据库,注册目标数据库的命令为:
$ RMAN catalog rman/rman target user/pwd @rcdb;
RMAN> register database;
1.4.2 配置RMAN的默认设置
- 1.配置备份集文件的格式 (format)
RMAN> configure channel device type disk format ‘/u05/oracle/rmanback/%U‘;
备份文件可以自定义各种各样的格式,如下
%c 备份片的拷贝数
%d 数据库名称
%D 位于该月中的第几天 (DD)
%M 位于该年中的第几月 (MM)
%F 一个基于 DBID 唯一的名称,这个格式的形式为 c-IIIIIIIIII-YYYYMMDD-QQ,
其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD 为日期,QQ 是一个 1-256 的序列
%n 数据库名称,向右填补到最大八个字符
%u 一个八个字符的名称代表备份集与创建时间
%p 该备份集中的备份片号,从1 开始到创建的文件数
%U 一个唯一的文件名,代表%u_%p_%c
%s 备份集的号
%t 备份集时间戳
%T 年月日格式(YYYYMMDD)
- 2. 配置默认IO设备类型 ( device type )
IO 设备类型可以是磁盘或者磁带,在默认的情况下是磁盘,可以通过如下的命令
进行重新配置。
RMAN> configure default device type to disk;
RMAN> configure default device type to sbt;
注意,如果换了一种IO 设备,相应的配置也需要做修改,如
RMAN> configure device type sbt parallelism 2;
- 3. 配置自动分配的通道 ( Chanel )
RMAN> configure channel device type disk format ‘/U01/ORACLE/BACKUP/%U
在运行块中,手工指定通道分配,这样的话,将取代默认的通道分配。
RMAN> Run {
allocate channel cq type disk format=‘/u01/backup/%u.bak‘;
…}
通道的一些特性:
读的速率限制 Allocate channel ……rate = integer
最大备份片大小限制 Allocate channel …… maxpiecesize = integer
最大并发打开文件数(默认16) Allocate channel …… maxopenfile = integer
- 4. 配置默认的保存策略 ( Retention Policy)
保存策略是管理备份与副本有效期或者是否有效的一种方法。恢复数据库的时候Oracle 不考虑失效的备份。我们可以定义两种保存策略:恢复窗口备份保存策略(recovery window backup retention policy )和冗余备份保存策略(redundancy backupretention policy )
备份策略保持 分为两个保持策略:
一个是时间策略,决定至少有一个备份能恢复到指定的日期
一个冗余策略,规定至少有几个冗余的备份。
恢复窗口备份保存策略
这种保存策略类型的使用基于数据库可能恢复到的最早的日期。 例如,假设今天是星期一,此前存在 3 个备份。第一个备份在昨天生成的,第二个备份是上星期四生成的,而最后一个备份是 10 天前备份的。假如恢复窗口是 7 天,那么昨天和上星期四的备份是有效备份,而 10 天前的备份会成为废弃备份。下面的命令将恢复窗口配置为7 天:
RMAN> configure retention policy to recovery window of 7 days;
冗余备份保存策略
使用这种保存策略,RMAN 会从最新备份开是保留 N 个数据备份,其余的废弃。
例如,如果有四个备份,而冗余数是 3,那么最早的那个备份将被废弃。下面的命令将备份策略设置为 3:
RMAN> configure retention policy to redundancy 3;
设置NONE 可以把使备份保持策略失效,Clear 将恢复默认的保持策略
RMAN> configure retention policy to none;
例:
保证至少有一个备份能恢复到 Sysdate-5 的时间点上,之前的备份将标记为Obsolete
RMAN> configure retention policy to recovery window of 5 days;
至少需要有三个冗余的备份存在,如果多余三个备份以上的备份将标记为冗余
RMAN> configure retention policy to redundancy 5;
- 5. 配置多个备份的拷贝数目( backup copies )
如果觉得单个备份集不放心,可以设置多个备份集的拷贝,如:
RMAN> configure datafile backup copies for device type disk to 2;
RMAN> configure archivelog backup copies for device type disk to 2;
如果指定了多个拷贝,可以在通道配置或者备份配置中指定多个拷贝地点:
RMAN> configure channel device type disk format
‘/u01/backup/%U‘, ‘/u02/backup/%U‘;
RMAN> backup datafile n format ‘/u01/backup/%U‘, ‘/u02/backup/%U‘;
- 6. 设置并行备份( ARALLELISM )
RMAN支持并行备份与恢复,也可以在配置中指定默认的并行程度。如:
RMAN> configure device type disk parallelism 4;
指定在以后的备份与恢复中,将采用并行度为4,同时开启4 个通道进行备份与恢复,当然也可以在RUN 的运行块中手工分配多个通道来决定备份与恢复的并行程度。并行的数目决定了开启通道的个数。如果指定了通道配置,将采用指定的通道,如果没有指定通道,将采用默认通道配置。还可以在BACKUP命令中使用指定FILESPERSET 或者指定(datafile 1,4,5 channelc1 tag=DF1)(datafile 2,3,6 channel c2 tag=DF2)
- 7. 设置控制文件自动备份 (autobackup on)
通过如下的命令,可以设置控制文件的自动备份
RMAN> configure controlfile autobackup on;
对于没有恢复目录的备份策略来说,这个特性是特别有效的,控制文件的自动备份发生在任何backup 或者copy 命令之后,或者任何数据库的结构改变之后。
可以用如下的配置指定控制文件的备份路径与格式
RMAN> configure controlfile autobackup format for type disk to ‘%f‘;
在备份期间,将产生一个控制文件的快照,用于控制文件的读一致性,如下配置:
RMAN> configure snapshot controlfile name to
‘/u01/app/oracle/product/9.0.2/dbs/snapcf_U02.f‘;
- 8. 设置备份优化选项 ( optimization )
可以在配置中设置备份的优化,如
RMAN> configure backup optimization on;
如果优化设置打开,将对备份的数据文件、归档日志或备份集运行一个优化算法。
- 9. 设置RMAN备份的保存策略
策略,啧啧,想不到咱也能说出这么专业的词儿啊,人家说专家就是能把任何事务都描述的很专业,我一定要再多学几个类似的词,要让自己离专家的距离更近一些,或者,我直接搬到eygle他们家床头边上住去~~~~
如果你的数据库非常大,并且备份执行也比较频繁(废话,不大不频繁也得这么干,优秀的dba一定要拥有对应其身份的良好的工作习惯),有必要对你这些备份文件的保存制订合理的策略。该挪的挪,该搬的搬,该删除的删,合理释放,最大化利用有限的磁盘空间嘛。
在通过RMAN创建的备份片段中,由于备份文件也是由rman创建和维护,所以手工删除并不明智,并且RMAN也提供了备份保留策略,合理制订,由RMAN自动删除过旧的备份文件更加安全也更加方便。
RMAN中提供了两种备份保留策略:基于时间,和基于冗余数量
为RMAN设置了备份保留策略之后,RMAN会自动判断哪些备份集或镜像复制文件不必再保留。这些备份文件将会被标记为“废弃(Obsolete)”,可以通过REPORT OBSOLETE命令查看当前处于废弃状态的备份文件,或者通过DELETE OBSOLETE命令删除这些废弃的备份。
A、基于时间的备份保留策略。
说的简单些,就是你希望数据库最早能恢复到几天前。比如将恢复时间段设置为7,那么RMAN所保留的备份即是可以保证你将数据库恢复到一周内任何时刻下那些文件。
设置基于时间的备份保留策略可以通过CONFIGURE命令,例如:
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF n DAYS;
注:n=大于0的正整数
执行该命令后,RMAN将始终保留那些将数据库恢复到n天前的状态时需要用到的备份,比如,恢复时间段被设置为7天,那么各个数据文件的备份必须满足如下条件:
SYSDATE-(SELECT CHECKPOINT_TIME FROM V$DATAFILE)>=7
任何不满足上述条件的备份都将被RMAN废弃并可通过DELETE OBSOLETE命令删除。Ok,基本知识讲完了,下面考验你的时刻到了,提问:如果满足条件的备份你也想删,咋整?啥?DEL?D你个大头鬼,再回去看看第二章。
B、基于冗余数量的备份保留策略
基于冗余数量实质即某个数据文件以各种形式(包括备份集和镜像复制)存在的备份的数量。如果某个数据文件的冗余备份数量超出了指定数量,RMAN将废弃最旧的备份。
同样,基于数量的备份保留策略也是通过CONFIGURE命令设置,例如:
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY N;
同上:n=大于0的正整数
你也可以通过下列命令设置成不采用任何备份保留策略:
RMAN> CONFIGURE RETENTION POLICY TO NONE;
1.4.3 RMAN会话的设置
set 命令与 configure 命令很相似,但是 set 命令设置不是永久的。set 命令定义只应用于当前RMAN会话的设置。
可以用于RUN代码之外的命令有:
set echo on | off // 显示或关闭 RMAN 显示
set DBID dbidn // 指定一个数据库的数据库标识符。
下面的set 命令只能在RUN 代码中使用:
set newname:
用于 TSPITR 或者数据库复制操作,指定新的数据库文件名,将数据库移动到新的系统中并且文件名不同的时候可以用此命令。
set maxcorrupt for datafile:
用于定义 RMAN 操作失败之前允许的数据块讹误的数量
set archivelog destination:
可以修改存储归档的重做日志 archive_log_dest_1 的目的地。
set 命令和 until 子句:
可以定义数据库时间点恢复操作所使用的具体的时间点、SCN 或者日志序列号,例:
set until time "to_date(‘2005/08/01 13:00:00‘,‘yyyy/mm/dd hh24:mi:ss‘)";
set backup copies:
使用该命令可以定义为备份集的每个备份片创建的镜像副本数。
例:
RMAN> RUN{
set maxcorrupt for datafile 3 to 10;
set backup copies = 2;
backup database;
}
1.5 Copy镜像拷贝与恢复
Copy镜像拷贝命令可以创建数据库数据文件、归档重做日志或者控制文件的精确副本。RMAN 副本与这些文件的区别仅在于名称和(或)位置的区别。功能相当于用户管理的备份恢复中的热备份。备份副本的好处是恢复比较快,恢复时可以不用拷贝,指定新位置即可。Copy镜像拷贝至少要在 mount 状态下运行。
Copy镜像拷贝可作为增量备份的 Level 0。
Oracle10g开始,允许使用单条命令"backup as copy"进行数据库拷贝。
1.5.1 备份
生成数据文件副本:
RMAN> copy datafile 3 to ‘d:\backup\datafilecopy\users01.dbf.bak‘;
RMAN> copy datafile ‘d:\oracle\oradata\ora9i\users01.dbf‘ to
‘d:\backup\datafilecopy\users01.dbf.bak‘;
生成控制文件副本:
RMAN> copy current controlfile to … ;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP is ON;
备份ARCHIVELOG 副本:
// 只能一个一个的来备份,而不能指定一个范围
RMAN> copy archivelog ‘d:\oracle\oradata\arc\ming_351.arc‘ to
‘d:\oracle\orabackup\arc\ming_351.arc‘;
1. 并行设置:
RMAN> configure device type ... parallelism = 3;
//only 2 channel, one for writting data to disk
2. 手工分配多个通道
3. 在命令中指定多个文件
RMAN> copy datafile ‘xx‘ to ‘xx2‘, datafile ‘yy‘ to ‘yy2‘, ...;
块检查:
CHECK LOGICAL 选项
MAXCORRUPT 参数
V$COPY_CORRUPTION
在复制操作中,Oracle 服务器进程对每个块执行校验和计算以检测是否有块损坏。RMAN 在还原副本时也要核对校验和。该过程称为物理损坏检测。可以使用NOCHECKSUM 选项取消校验和操作,从而加快复制进程。如果数据库已在维护块校验和,则此选项无效。缺省情况下,禁用逻辑损坏的错误检查。可以使用 CHECK LOGICAL 选项测试通过了物理损坏检查的数据和索引块,查看它们是否存在逻辑损坏,如行片或索引条目损坏。如果检测到任何块存在逻辑损坏,则将该块记录到服务器进程的警报日志和跟踪文件中。可以使用 MAXCORRUPT 参数设置逻辑和物理损坏的阈值。只要在某个文件中检测到的逻辑和物理损坏总和低于该值,则 RMAN 命令完成,同时 Oracle 将损坏块的范围植入到 V$COPY_CORRUPTION 视图。如果超出 MAXCORRUPT,则该命令终止,并且不植入视图。当并行度比较高时,占用的计算机资源较多,但备份操作完成速度较快。缺省情况下将启用对物理损坏的错误检查。有关在备份过程中遇到的损坏数据文件块的信息将记录在控制文件和警报日志中。
1.5.2 恢复
查看所有的Copy镜像拷贝:
RMAN> list copy;
数据文件副本还原:
还原时可以offline数据文件所属表空间,然后利用OS 拷贝命令恢复副本。
还可以用 restore (datafile num) from datafilecopy 命令来从数据文件副本中还原数据文件,然后再用 recover 命令来恢复。例如:
RMAN> sql "alter database datafile 5 offline";
RMAN> restore (datafile 5) from datafilecopy;
RMAN> recover datafile 5;
RMAN> sql "alter database datafile 5 online";
注意,上面的圆括号很重要,如果没有,restore 命令就会执行失败。
1.6 Backup备份与恢复
Backup 备份命令生成Backup sets (备份集合),以oracle专有的格式保存,由一个完全的所有的备份片集合构成,构成一个完全备份或增量备份。
1.6.1 BACKUP 备份命令选项
设置标记(TAG)
RMAN> backup database tag= ‘test backup‘;
限制备份集大小
RMAN> backup database maxsetsize=100M;
只备份新增部分
RMAN> backup incremental level 0 database;
备份控制文件 同时备份SPFILE
RMAN> backup current controlfile;
RMAN> configure controlfile autobackup on; // 默认是off
也可以在备份数据库或者文件的时候加上include current controlfile 选项。例如:
RMAN> backup database include current controlfile;
使用自动备份进行恢复:
RMAN> restore spfile/controlfile to ‘/xx/xx‘ from autobackup;
备份归档日志(9i)
RMAN> backup archivelog all;
RMAN> backup ... plus archivelog; // 在备份其他时同时备份归档日志
plus archivelog隐含如下步骤:
Ø 运行一个ALTER SYSTEM ARCHIVELOG CURRENT命令
Ø 运行BACKUP ARCHIVELOG ALL 命令。注意如果备份优化被启用,
RMAN 只会备份未备份过的日志
Ø 备份BACKUP命令中定义的文件
Ø 运行ALTER SYSTEM ARCHIVELOG CURRENT 命令
Ø 备份所有的剩下的归档日志
备份完后删除归档日志
RMAN> backup ... ARCHIVELOG all delete all input;
修改备份集的保存策略
例如:将备份设置为永久有效
RMAN> backup database keep forever logs|nologs;
设置为有效期 180 天
RMAN> backup database keep until time=‘sysdate+180‘;
重写configure exclude / noexclude
通过 configure exclude 可以配置RMAN 不备份上次备份以来没有发生变化的数据文件。如果要确保RMAN备份这些数据文件,可以在backup 命令中添加 noexclude 选项。
例如:
RMAN> backup database noexclude;
跳过脱机的、不可存取的或者只读的数据文件
RMAN> backup database skip offline skip inaccessible skip readonly;
强制备份只读的数据文件
RMAN> backup database force;
备份指定周期内没有备份的数据文件
RMAN> backup database not backed up;
RMAN> backup database not backed up since time=‘sysdate-2‘;
在备份操作期间检查逻辑讹误
RMAN> backup check logical database; //在检查逻辑错误的同时进行备份
RMAN> backup validate check logical database; //只检查
建立压缩备份集
RMAN> backup as compressed backupset tablespace users
FORMAT=‘D:\BACKUP\%d_%s.dbf‘;
1.6.2 RESTORE/RECOVER恢复命令选项
数据库恢复
RMAN> restore/revover database ;
表空间恢复
RMAN> restore/revover tablespace xx(wangningning) ;
默认情况下,即使丢失了只读的数据文件,RMAN 也不会在执行完全数据库还原操作时候还原只读的数据文件。要在完全恢复期间还原只读的数据文件,就必须在RESTORE命令中使用CHECK READONLY参数:
RMAN> RESTORE DATABASE CHECK READONLY;
使用自动备份恢复SPFILE/控制文件
RMAN> restore spfile/controlfile to ‘/xx/xx‘ from autobackup ;
归档重做日志的还原
RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
数据文件副本还原
RMAN> sql "alter datafile 5 offline";
RMAN> restore (datafile 5) from datafilecopy;
RMAN> recover datafile 5;
RMAN> sql "alter datafile 5 online";
请注意,上面的圆括号很重要
与备份检查一样,还原操作也可以检查是否能正常restore 或者是否该备份集是否有效。如:
RMAN> RESTORE DATABASE VALIDATE;
RMAN> VALIDATE BACKUPSET 218;
RMAN> RESTORE DATABASE VALIDATE CHECK LOGICAL ;
从指定的 tag 恢复:
RMAN> RESTORE FROM tag=’xxxx’;
不完全恢复的还原:
1.set until time/SCN/
2.RMAN> restore database until scn 1000;
RMAN>restore database "to_date(‘2005/08/01 13:00:00‘,‘yyyy/mm/dd hh24:mi:ss‘)";
RMAN> restore database until sequence 100 thread 1;
块级别的恢复
块恢复Block Media Recovery (BMR),块是恢复的最小单元,通过块可以减少恢复时间,而且数据文件可以在线。恢复块的时候,必须指定具体的块号,如:
RMAN> blockrecover datafile 6 block 3;