RMAN备份学习:
Recovery Manager(RMAN)是一种用于备份(backup)、还原(restore)和恢复(recover)
数据库的 Oracle 工具。RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据
库或数据库部件,如表空间、数据文件、控制文件、归档文件以及Spfile参数文件。RMAN
也允许您进行增量数据块级别的备份,增量RMAN备份是时间和空间有效的,因为他们只备
份自上次备份以来有变化的那些数据块。而且,通过RMAN提供的接口,第三方的备份与恢
复软件如veritas将提供更强大的备份与恢复的管理功能。
通过RMAN,也提供了其它更多功能,如数据库的克隆、采用RMAN建立备用数据库、
利用RMAN备份与移动裸设备(RAW)上的文件等工作将变得更方便简单。9i的RMAN通过
增强的自动配置与管理功能,以及特有的块级别的恢复,将使备份与恢复工作变得更加快捷
与完美。9i的RMAN有如下特征特性:
·自动的备份与恢复
·方便的备份归档日志
·自动检测新的数据文件
·支持增量备份
·最大限度的减少备份与恢复的错误
·减少恢复的时间
·在热备份中不会产生额外的redo日志
·腐烂数据块的自动检测
·并行的备份与恢复操作
·在线备份时,表空间不用置于备份模式
是RMAN 进行备份与恢复的数据库,RMAN 可以备份除了联机日志,pfile,密码文件之外的数据文件,控制文件,归档日志,spfile
1.RMAN 主要包括以下组件:
Target Database: (目标数据库)
就是需要 RMAN 对其进行备份与恢复的数据库,RMAN 可以备份数据文件,控制文
件,归档日志,spfile。(注意:RMAN 不能用于备份联机日志、初始化参数文件和口令文件)
Server Session: (服务器会话)
RMAN 启动数据库上的Oracle 服务器进程,将建立一个与目标数据库的会话。由目标
数据库上的服务器进程进行备份、还原、恢复的实际操作。
RMAN 的服务进程是一个后台进程,用于与RMAN 工具与数据库之间的通信,也用于
RMAN 工具与磁盘/磁带等 I/O 设置之间的通信,服务进程负责备份与恢复的所有工作,
在如下情况将产生一个服务进程:
. 当连接到目标数据库
. 分配一个新的通道
Channel: (通道)
一个通道是RMAN 和目标数据库之间的一个连接,"allocate channel"命令在目标数据库
启动一个服务器进程,同时必须定义服务器进程执行备份或者恢复操作使用的I/O类型。
通道控制命令可以用来:
. 控制RMAN 使用的O/S资源,影响并行度
. 指定I/O带宽的限制值(设置limit read rate 参数)
. 定义备份片大小的限制(设置limit kbytes)
. 指定当前打开文件的限制值(设置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 来进行备份与恢复。
Command Line and Script (命令行接口与脚本)
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 catalog命令进行同步。
RMAN> resync catalog;
Incarnation 对应物
在不完全恢复完成之后,通常需要使用 resetlogs 选项来打开数据库。resetlogs 表示一个
数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始。数据库的逻辑生存期也被称为
一个对应物(incarnation)。每次使用resetlogs 选项来打开数据库后都会创建一个新的数据库
对应物。
3.配置RMAN的默认设置(下面的命令不用记,直接通过show all;来进行配置就可以,前提是知道意思
和方法进行配置(参考自己的show all;列表),^-^!)
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 backup retention policy )
a.备份策略保持 分为两个保持策略:
一个是时间策略,决定至少有一个备份能恢复到指定的日期
一个冗余策略,规定至少有几个冗余的备份。
b.恢复窗口备份保存策略
这种保存策略类型的使用基于数据库可能恢复到的最早的日期。 例如,假设今天
是星期一,此前存在 3 个备份。第一个备份在昨天生成的,第二个备份是上星期四生
成的,而最后一个备份是 10 天前备份的。假如恢复窗口是 7 天,那么昨天和上星期
四的备份是有效备份,而 10 天前的备份会成为废弃备份。下面的命令将恢复窗口配置为7 天:
RMAN> configure retention policy to recovery window of 7 days;
c.冗余备份保存策略
使用这种保存策略,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'; --注意:我在9i不好使
6. 设置并行备份( ARALLELISM )
RMAN支持并行备份与恢复,也可以在配置中指定默认的并行程度。如:
RMAN> configure device type disk parallelism 4;
指定在以后的备份与恢复中,将采用并行度为4,同时开启4 个通道进行备份与恢
复,当然也可以在RUN 的运行块中手工分配多个通道来决定备份与恢复的并行程度。
并行的数目决定了开启通道的个数。如果指定了通道配置,将采用指定的通道,如果没
有指定通道,将采用默认通道配置。
还可以在BACKUP命令中使用指定FILESPERSET 或者指定(datafile 1,4,5 channel
c1 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 device type disk to '%F'; --一般默认就是%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;
如果优化设置打开,将对备份的数据文件、归档日志或备份集运行一个优化算法。
4.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;
}
5.Copy镜像拷贝与恢复
Copy镜像拷贝命令可以创建数据库数据文件、归档重做日志或者控制文件的精确副本。
RMAN 副本与这些文件的区别仅在于名称和(或)位置的区别。功能相当于用户管理的备
份恢复中的热备份。备份副本的好处是恢复比较快,恢复时可以不用拷贝,指定新位置即可。
Copy镜像拷贝至少要在 mount 状态下运行。
Copy镜像拷贝可作为增量备份的 Level 0
Oracle10g开始,允许使用单条命令"backup as copy"进行数据库拷贝。
1.备份
生成数据文件副本:
RMAN> copy datafile 3 to 'd:/backup/datafilecopy/users01.dbf.bak';
RMAN> copy datafile 'e:/oracle/oradata/test/gejun_ts.dbf' to
'e:/oracle/oradata/copy_test/gejun_ts.dbf'; --测试成功
生成控制文件副本:
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,则该命令终
止,并且不植入视图。 当并行度比较高时,占用的计算机资源较多,但备份操作完成
速度较快。缺省情况下将启用对物理损坏的错误检查。有关在备份过程中遇到的损坏数
据文件块的信息将记录在控制文件和警报日志中。
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 命令就会执行失败。
6.Backup备份与恢复
Backup 备份命令生成Backup sets (备份集合),以oracle专有的格式保存,由一个完全
的所有的备份片集合构成,构成一个完全备份或增量备份。
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;
备份时如果包含了SYSTEM表空间,将自动备份控件文件和SPFILE
RMAN> backup file 1;
使用自动备份进行恢复:
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';
2.RESTORE/RECOVER恢复命令选项
数据库恢复
RMAN> restore/revover database ;
表空间恢复
RMAN> restore/revover tablespace xx ;
只读表空间的恢复
默认情况下,即使丢失了只读的数据文件,RMAN 也不会在执行完全数据库还原
操作时候还原只读的数据文件。要在完全恢复期间还原只读的数据文件,就必须在
RESTORE命令中使用CHECK READONLY 参数:
RMAN> RESTORE DATABASE CHECK READONLY;
恢复SPFILE/控制文件
使用自动备份恢复SPFILE/控制文件
RMAN> startup nomount;
RMAN> set dbid=153910023
RMAN> restore controlfile from autobackup
RMAN> restore spfile/controlfile to '/xx/xx' from autobackup ;
或
RMAN> restore controlfile from '/arch/ct_c-2347671489-20060630-00';
联机状态:目标数据库MOUNT或OPEN
RMAN> restore controlfile to 'd:/temp/control01.ctl';
归档重做日志的还原
RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
也可以用 SET命令来指定归档日志的还原位置,例如:
RMAN> run
{
set archivelog destination to "d:/temp";
restore archivelog all;
}
数据文件副本还原
RMAN> sql "alter datafile 5 offline";
RMAN> restore (datafile 5) from datafilecopy;
RMAN> recover datafile 5;
RMAN> sql "alter datafile 5 online";
---请注意,上面的圆括号很重要
3.还原检查与恢复测试
与备份检查一样,还原操作也可以检查是否能正常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;
4.非归档模式下的 BACKUP 备份与恢复(shell)
a.默认的设置脱机全备份的语句
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> backup database;
RMAN> startup;
b.不使用默认的设置执行脱机备份操作 ,在备份命令中指定备份选项
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> run {
allocate channel c1 type disk format '/xxx/ming_%U';
allocate channel c2 type disk format '/xxx/ming_%U';
backup full tag full_db_backup format "/backups/db_t%t_s%s_p%p" (database);
backup current controlfile;
release channel c1 ;
release channel c2 ;
}
可以通过下面的命令显示恢复目录中记载的备份集信息:
RMAN> list backupset of database;
c.全库备份的恢复
RMAN> startup mount
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
d.表空间备份(只有readonly/offline 表空间的备份才有意义)
RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> tag tbs_users_read_only
5> format "/oracle/backups/tbs_users_t%t_s%s"
6> (tablespace users);
7> }
e.表空间备份的恢复
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
restore tablespace xx;
recover tablespace xx;
sql "alter tablespace xx online;"
}
f.备份控制文件
RMAN> run {
2> allocate channel dev1 type "SBT_TAPE";
3> backup
4> format "cf_t%t_s%s_p%p"
5> tag cf_monday_night
6> (current controlfile);
7> release channel dev1;
8> }
注:数据库完全备份将自动备份控制文件。(或者备份时加include current controlfile)
5.归档模式下的BACKUP备份与完全恢复
要用 RMAN 进行联机备份操作,数据库就必须位于 ARCHIVELOG 模式。恢复
目录必须打开,目标数据库例程必须启动,数据库加载或者打开。
a.备份命令:
只备份数据文件 (如果configure controlfile autobackup on; 将自动包括控件文件,SPFILE):
RMAN> backup database;
同时备份归档日志,然后将备份后的归档日志删除
RMAN> backup database plus archivelog delete input;
明确指定同时备份控件文件:
RMAN> run{
allocate channel c1 type disk;
sql 'alter system archive log current';
backup full database include current controlfile tag 'dbfull'
format '/u06/oracle/rmanback/full_%u_%s_%p';
sql 'alter system archive log current';
release channel c1;
}
可以用RMAN 的plus archvielog选项简化数据库备份:
RMAN> run {
2> backup database
3> format '/xxfull%d_%T_%s'
4> plus archivelog
5> format '/xx/arch_%d_%T_%s'
6> delete all input;
7> }
完全恢复:
目标数据库必须是mount 状态
RMAN> startup mount
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open;
b.表空间的备份与恢复
备份命令:
RMAN> backup tablespace users ;
例:
RMAN> RUN{
allocate channel c1 type disk;
backup tablespace users tag 'ts_users' format '/oracle/rmanback/ts_%u_%s_%p' ;
release channel c1;
}
恢复:
如果我们只丢失了特定的表空间的数据文件,那么我们可以选择只恢复这个表空间,而
不是恢复整个数据库。表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline。
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
restore tablespace xx;
recover tablespace xx;
sql "alter tablespace xx online;"
}
恢复到一个不同的位置:
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
SET NEWNAME for datafile 1 to '/xx';
restore tablespace xx;
switch datafile 1;
recover tablespace xx;
sql "alter tablespace tbs1 online;"
}
c.数据文件的备份与恢复
备份命令:
RMAN> backup datafile 3;
RMAN> backup datafile 'D:/ORACLE/ORADATA/TEST/TEST.DB';
恢复命令:
数据文件恢复与表空间恢复类似。假设数据文件号为 5 的文件丢失,文件名是:
'E:/ORACLE/ORADATA/USERS.DBF', 那么我们恢复的时候可以指定文件号,也可以指定文件名。
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter tablespace users offline immediate";
4> restore datafile 4; --或者 restore 'E:/ORACLE/ORADATA/USERS.DBF'
5> recover datafile 4;
6> sql "alter tablespace users online";
7> release channel dev1;
8> }
恢复到一个不同的位置:
RMAN> startup mount
RMAN> RUN{
sql "alter tablespace users offline immediate";
SET NEWNAME for datafile 9 to '/xx/user01.dbf';
restore datafile 9;
switch datafile all;
recover datafile 9;
sql "alter tablespace users online";
}
d.归档重做日志的备份与恢复
备份:
整库备份的同时,备份所有归档 (以及联机日志):
RMAN> backup database plus archivelog;
备份所有归档:
RMAN> backup archivelog all;
备份两天来的归档:
RMAN> backup archivelog from time='sysdate-2' [to time=’xxx’] ;
备份从sequence 1 开始的归档:
RMAN> backup archivelog from sequence 1 [to sequence =’n];
备份没有三次备份的归档:
RMAN> backup archivelog not backed up 3 times;
备份所有归档,然后删除归档:
RMAN> backup archivelog all delete input;
恢复:
显示恢复目录中的归档日志:
RMAN> list backupset of archivelog all;
一般情况下,在 RMAN 的普通恢复过程中,不必恢复归档的重做日志。不过偶尔也需
要恢复重做日志,例如我们用Log Miner 来从归档中查找一些东西。
RMAN命令举例:
RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
可以用 SET 命令来指定归档日志的还原位置,例如:
RMAN> run{
set archivelog destination to "d:/temp";
restore archivelog all;
}
需要注意的是,即使新的归档日志目录不同于默认的归档日志目录,如果 Oracle 判定
日志已存在,也不会恢复该归档日志文件。
e.联机日志的备份
联机日志不能用 RMAN 来备份,可以先将其归档,再备份。为了实现这点,必须在RMAN
中执行归档命令语句
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter system archive log current";
4> backup (archivelog from time "sysdate-1" all delete input)
5> "format "/oracle/backups/log_t%t_s%s_p%p";
6> release channel dev1;
7> }
上面的脚本可以在执行完一个完整的联机数据库备份后执行,确保所有的重做日志可以
将数据库恢复到一个一致性的状态。
当然,也可以在全库备份时使用 plus archvielog 选项,将自动完成联机日志的备份。
f.控制文件和服务器参数文件的备份与恢复
备份:
// 设置文件名格式
RMAN> set controlfile autobackup format for device type disk to 'ctl_%F';
1. RMAN> configure controlfile autobackup on; // backup database时将自动备份
2. RMAN> backup current controlfile;
3. RMAN> backup .... include control file;
4. RMAN> backup file 1; // system datafile 自动备份
恢复SPFILE:
SPFILE(PFILE)的丢失/损坏,对数据库不会产生致命影响,可以从其他方式恢复。
不过既然RMAN 的备份计划中包括了SPFILE 的备份,那么就可以使用RMAN 来还原
SPFILE 了。
$ rman target / catalog "rman/rman@db"
RMAN> set dbid=153910023 // SET DBID 这个步骤是不能省略的,否则会报错。
RMAN> restore spfile from autobackup [MAXDAYS 100]; // 或者restore spfile;
RMAN> startup force
或者从某个备份集恢复:
RMAN> restore spfile from backupset bs_num命令。
使用 dbms_backup_restore 包恢复服务器参数文件:
在一些不常见的情况下,我们可能需要直接使用 dbms_backup_restore 包来恢复
spfile。当然这个包也可以用来恢复其它数据,是常规办法都没有用的时候的一个利器。
这个包可以在数据库 NOMOUNT 状态下使用。假设我们有一个自动备份文件
C-2600315304-20060829-02,我们需要从这里恢复数据,那么可以通过执行下面的脚本
来完成:
SQL>
DECLARE
DEVTYPE VARCHAR2(256);
DONE BOOLEAN;
BEGIN
DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);
DBMS_BACKUP_RESTORE.restoresetdatafile;
DBMS_BACKUP_RESTORE.restorespfileto('/back/SPFILE.ORA');
DBMS_BACKUP_RESTORE.restorebackuppiece(
'/back/C-2600315304-20060829-02',DONE=>done);
DBMS_BACKUP_RESTORE.devicedeallocate(NULL);
END;
恢复控制文件:
RMAN> startup nomount;
RMAN> set dbid=153910023
RMAN> restore controlfile from autobackup
或
RMAN> restore controlfile from '/arch/ct_c-2347671489-20060630-00';
联机状态:目标数据库MOUNT或OPEN
RMAN> restore controlfile to 'd:/temp/control01.ctl';
然后再执行恢复数据库的其他步骤:
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
使用 dbms_backup_restore包恢复控制文件:
SQL>
DECLARE
DEVTYPE VARCHAR2(256);
DONE BOOLEAN;
BEGIN
DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);
DBMS_BACKUP_RESTORE.restoresetdatafile;
DBMS_BACKUP_RESTORE.restorecontrolfileto('/back/CONTROL01.CTL');
DBMS_BACKUP_RESTORE.restorebackuppiece
('/back/C-2600315304-20060829-00',DONE=>done);
DBMS_BACKUP_RESTORE.devicedeallocate(NULL);
END;
/
g.备份集的备份的备份与恢复
备份:
备份所有备份集:
RMAN> backup backupset all;
备份指定备份集:
RMAN> backup backupset bs_num;
恢复:(这种备份只是增加一个镜像,不用恢复)
主要用于改变备份集的位置,或者创建多个镜像备份,比如将备份集从硬盘备份到磁带
7.归档模式下的不完全恢复
不完全恢复会影响整个数据库,需要在MOUNT状态下进行。在不完全恢复完成之后,
通常需要使用 resetlogs 选项来打开数据库。resetlogs 表示一个数据库逻辑生存期的结束和
另一个数据库逻辑生存期的开始。数据库的逻辑生存期也被称为一个对应物(incarnation)。
每次使用 resetlogs 选项来打开数据库后都会创建一个新的数据库对应物,这对于恢复操作
来说非常重要。每次使用 resetlogs 后,SCN 计数器不会被重置,但是Oracle会重置联机日
志序列号,同时还会重置联机重做日志内容。因此执行了resetlogs 之后,应该立即重新备
份整个数据库,否则恢复起来相当麻烦。
startup mount;
restore database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')";
recover database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')";
alter database open resetlogs;
a.基于SCN 的恢复
如果知道数据库出错前的SCN,可以将数据库还原到指定 SCN 状态。
$ startup mount;
RMAN> run{
allocate channel d1 type disk;
restore database until scn 1317011; --或者 set until scn 1317011
recover database until scn 1317011;
sql 'alter database open resetlogs';
release channel d1;
}
b.基于时间的恢复
下面使用set until time 命令为 2005 年 8 月 1 日下午 1点的恢复目标
$ startup mount;
RMAN> run{
set until time "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')";
restore database;
recover database;
alter database open resetlogs;
}
注意:执行上面的命令时, RMAN 会查找与恢复目标时间最近、但是不包含恢复目标时间及
以后时间的备份集,并且从这个备份中还原数据库。如果数据库非归档模式,那么恢复操作
会在备份集的时间点停止;否则 RECOVER 命令会应用恢复目标之前的归档重做日志或需
要的增量备份。
c.基于日志序列的恢复
RMAN 允许用户将数据库恢复到指定的归档重做日志序列号。如果归档的重做日志中
有间隙(某个归档日志文件或备份损坏或丢失) ,使用这种方法就很方便。间隙通常意味
着我们只能将数据库还原到间隙开始的地方。
SQL> startup mount;
RMAN> restore database until sequence 100 thread 1; --not include 100
RMAN> recover database until sequence 100 thread 1;
SQL> alter database open resetlogs;
RMAN> RUN {
2> SET UNTIL SEQUENCE 120 THREAD 1;
4> RESTORE DATABASE;
5> RECOVER DATABASE; --recovers through log 119 not include 120
6> ALTER DATABASE OPEN RESESTLOGS;
7> }
9.RMAN查看信息 List与Report
a.RMAN 动态性能视图
以下是目标数据库上与 RMAN 备份有关系的一些动态性能视图,可以用SYS 用户进行查询。
V$ARCHIVED_LOG
V$BACKUP_CORRUPTION
V$COPY_CORRUPTION
V$BACKUP_DEVICE
V$CONTROLFILE_RECORD_SECTION
V$BACKUP_DATAFILE 用于通过确定各数据文件中的块数来创建大小相同的备份集。通过它也可以找出数据文件中已损坏的块数。
V$BACKUP_REDOLOG 显示在备份集中存储的归档日志。
V$BACKUP_SET 显示已经创建的备份集。
V$BACKUP_PIECE 显示为备份集创建的备份片。
或通过下面的SQL语句进行查看
SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
FROM V$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%'
AND OPNAME NOT LIKE '%aggregate%'
AND TOTALWORK != 0
AND SOFAR <> TOTALWORK;
b.要在备份过程中将某一进程与一个通道关联起来,请:
1. 启动恢复管理器并连接到目标数据库和恢复目录(与后者的连接是可选的)。
rman target / catalog rman/rman@rcat
2. 在分配通道后,设置 COMMAND ID 参数,然后复制所需的对象。
run {
allocate channel t1 type disk;
set command id to 'rman';
copy datafile 1 to '/u01/backup/df1.cpy';
release channel t1;}
3. 查询 V$SESSION_LONGOPS 视图以获得复制的状态。
SELECT sid, serial#, context, sofar, totalwork
round(sofar/totalwork*100,2) "% Complete",
FROM v$session_longops
WHERE opname LIKE 'RMAN:%'
AND opname NOT LIKE 'RMAN: aggregate%';
4. 使用 SQL*Plus 并查询 V$PROCESS 和 V$SESSION 以获得 SID 和 SPID。然
后,使用操作系统实用程序来监视进程或线程。
SELECT sid, spid, client_info
FROM v$process p, v$session s
WHERE p.addr = s.paddr
AND client_info LIKE '%id=rman%';
c.list命令查看
List 命令是一种在数据库控制文件或者恢复目录中查询备份的历史信息的方法。
List提供了一组信息,可以提供各种备份的信息,如对应物、备份集、归档日志备份、控制文件备份等等。
列出对应物:
RMAN> list incarnation;
列出备份概要信息:
RMAN> list backup summary;
按备份类型列出备份:
RMAN> list backup by file;
获得备份的详细信息,包括备份片的物理文件名:
RMAN> list backup;
RMAN> list backupset bs#;
或者按照TAG 来查:
RMAN> list backup tag=tab_number;
列出过期的备份:
RMAN> list expired backup;
按照表空间和数据文件来列出备份:
列出USERS表空间的备份:
RMAN> list backup of tablespace USERS;
列出文件 5 的备份:
RMAN> list backup of datafile 5;
列出文件 E:/ORACLE/USERS.DB 的备份:
RMAN> list backup of datafile ' 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 列出数据库所有数据文件的副本
d.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]
报告最近没有备份的数据文件
RMAN> report need backup days=10; // 恢复需要超过10 天的归档日志
RMAN> report need backup incremental=3; // 恢复时需要超过3 增量的文件报表
文件 增量 名称
---- ------------ ----------------------------------------------
8 15 E:/ORACLE/ORADATA/MING_RECOVER/MINGDICT.DB
9 15 E:/ORACLE/ORADATA/MING_RECOVER/MINGLOB.DB
这个报告中,列出的数据文件,在进行恢复的时候,需要从3 个以上的增量备份文件中
恢复。我们知道如果需要从很多文件中恢复,会影响恢复速度,可以根据情况来重新备份这些文件。
报告备份冗余或恢复窗口
我们可以执行report need backup redundancy 来确定为满足冗余备份策略而需要备份的文件。例如:
RMAN> report need backup redundancy=2; // 文件冗余备份少于2 个
我们也可以按照恢复窗口来查找需要备份的文件。比如我们要求恢复窗口小于2 天,那么用下面的命令:
RMAN> report need backup recovery window of 2 days; //文件报表的恢复需要超过2 天的归档日志
这个命令等同于:report need backup days=2;