rman初学者指南
rman(recovery manager)是dba的一个重要工具,用于备份、还原和恢复oracle数据库,前一段时间有网友找我要,可惜没时间,趁这两天出差在外没什么事,就写了一下,供初学的朋友参考。本文将介绍rman的基本操作,更多的信息请参考《oracle8i backup & recovery guide》及rman手册,或者是ocp student guide m09096《backup and recovery workshop》volume 2,也可以通过[email protected]和我联系。oracle自带的例子参考$oracle_home/rdbms/demo目录下的*.rcv脚本。
一、rman简介
rman可以用来备份和恢复数据库文件、归档日志和控制文件,也可以用来执行完全或不完全的数据库恢复。rman有三种不同的用户接口:command line方式、gui方式(集成在oem中的备份管理器)、api方式(用于集成到第三方的备份软件中)。具有如下特点:
1)功能类似物理备份,但比物理备份强大n倍,从下面的特点可以看到;
2)可以压缩空块;
3)可以在块水平上实现增量;
4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;
5)备份与恢复的过程可以自动管理;
6)可以使用脚本(存在recovery catalog中)
7)可以做坏块监测
二、相关术语解释
1)backup sets 备份集
备份集顾名思义就是一次备份的集合,它包含本次备份的所有备份片,以oracle专有的格式保存。一个备份集根据备份的类型不同,可能构成一个完全备份或增量备份。
2)backup pieces 备份片
一个备份集由若干个备份片组成。每个备份片是一个单独的输出文件。一个备份片的大小是有限制的;如果没有大小的限制, 备份集就只由一个备份片构成。备份片的大小不能大于你的文件系统所支持的文件长度的最大值。
3)image copies 映像备份
映像备份不压缩、不打包、直接copy独立文件(数据文件、归档日志、控制文件),类似操作系统级的文件备份。而且只能copy到磁盘,不能到磁带。
可以作为增量备份的0级,一般用来备份控制文件。
4)full backup 全备份
全备份是指对数据文件中使用过的数据块进行备份,没有使用过的数据块是不做备份的,也就是说,rman进行备份是进行压缩的。
5)incremental backup 增量备份
增量备份是指备份数据文件中自从上一次同一级别的或更低级别的备份以来被修改过的数据块。 与完全备份相同,增量备份也进行压缩。
增量备份虽然概念很好,备份也很简单,但恢复起来却是另外一回事,不仅麻烦而且容易出错,所以实际中越来越少使用,到了oracle 9i已经建议不再使用,以后版本会逐渐取消对增量备份的支持。
6)recovery catalog 恢复目录
恢复目录用于记录rman使用过程中的控制信息,恢复目录应该经常被同步(这在后面会讲到)。尽管我们可以使用nocatalog方式来使用rman,此时控制信息记录在目标数据库的控制文件中,但这样毕竟不安全,因为一旦目标数据库的控制文件损坏就意味着所有的rman备份失效。同样的道理恢复目录应该建立在另外一个数据库中,在下面的例子中我们称作“目录数据库”。
三、创建恢复目录
1、在目录数据库中创建恢复目录所用表空间
sql> create tablespace rmants datafile 'c:/oracle/oradata/cc/rmants.ora' size 20m ;
表空间已创建。
2、在目录数据库中创建rman用户并授权
sql> create user rman identified by rman default tablespace rmants temporary tablespace temp quota unlimited on rmants;
用户已创建
sql> grant recovery_catalog_owner to rman ;
授权成功。
3、在目录数据库中创建恢复目录
c:/>rman catalog rman/rman
恢复管理器:版本8.1.7.0.0 - production
rman-06008:连接到恢复目录数据库
rman-06428:未安装恢复目录
rman>create catalog tablespace rmants;
rman-06431:恢复目录已创建
4、注册目标数据库到恢复目录
注意哦,这里我的目标数据库使用的服务名称是rman,意思为要使用rman进行备份的数据库,而目录数据库使用的服务名称是cc。
c:/>rman target sys/[email protected]
恢复管理器:版本8.1.7.0.0 - production
rman-06005:连接到目标数据库:rman (dbid=1303772234)
rman>connect catalog rman/[email protected]
rman-06008:连接到恢复目录数据库
rman>register database;
rman-03022:正在编译命令:register
rman-03023:正在执行命令:register
rman-08006:注册在恢复目录中的数据库
rman-03023:正在执行命令:full resync
rman-08002:正在启动全部恢复目录的 resync
rman-08004:完成全部 resync
好了,到此为止前面的准备工作都做好了,下面就可以使用rman来进行备份和恢复了。
四、使用rman
下面通过具体的例子来说明rman的使用,这里会涉及到除了恢复以外的所有rman操作,关于使用rman进行恢复的内容请参考我以前写的另外一篇文章:rman恢复实践。
1、备份整个数据库
rman>run {
2> allocate channel c1 type disk;
3> backup database format 'e:/dbbackup/2db.dmp';
4> }
2、复制数据文件
rman>run {
2> allocate channel c1 type disk;
3> copy datafile 'c:/oracle/oradata/rman/users01.dbf' to 'e:/dbbackup/u.dbf' tag
=u1215;
4> }
3、查看备份及复制的信息
rman>list backup;
rman-03022:正在编译命令:list
备份集列表
关键字 recid 标记 lv 集合标记 集合计数 完成时间
------- ---------- ---------- -- ---------- ---------- ----------------------
216 1 417347013 0 417346992 1 26-12月-00
备份段列表
关键字 pc# cp# 状态 完成时间 段名
------- --- --- ----------- ---------------------- ------------------------
217 1 1 available 26-12月-00 e:/dbbackup/2db.dmp
数据文件包括列表
文件 名称 lv 类型 检查点scn 检查点时间
---- ------------------------------------- -- ---- ---------- -------------
1 c:/oracle/oradata/rman/system01.dbf 0 full 33224 26-12月-00
2 c:/oracle/oradata/rman/rbs01.dbf 0 full 33224 26-12月-00
3 c:/oracle/oradata/rman/users01.dbf 0 full 33224 26-12月-00
4 c:/oracle/oradata/rman/temp01.dbf 0 full 33224 26-12月-00
5 c:/oracle/oradata/rman/tools01.dbf 0 full 33224 26-12月-00
6 c:/oracle/oradata/rman/indx01.dbf 0 full 33224 26-12月-00
rman>list copy of datafile 'c:/oracle/oradata/rman/users01.dbf';
rman-03022:正在编译命令:list
数据文件备份列表
关键字 文件状态 完成时间 检查点 scn 检查点时间 名称
------- ---- - --------------- ---------- --------------- ------
226 3 a 26-12月-00 33226 26-12月-00 e:/dbbackup/u.dbf
4、在备份是设置相关参数
format --文件输出格式,
%d--database name,
%s--backup sets sequence number,
%p--backup pieces sequence number
filesperset --每个备份集中所包括的文件数
更多参数请参考本文开始时列出的书。
rman>run {
2> allocate channel c1 type disk;
3> set limit channel c1 kbytes 8000;
4> backup
5> format 'e:/dbbackup/db_%d_%s_%p.bck'
6> (database filesperset=2 );
7> }
rman-03022:正在编译命令:allocate
rman-03023:正在执行命令:allocate
rman-08030:分配的通道:c1
rman-08500:通道 c1:sid=9 devtype=disk
rman-03022:正在编译命令:set limit
rman-03023:正在执行命令:set limit
rman-03022:正在编译命令:backup
rman-03023:正在执行命令:backup
rman-08008:通道 c1:正在启动 full 数据文件备份集
rman-08502:set_count=6 set_stamp=417351064 creation_time=26-12月-00
rman-08010:通道 c1:正在指定备份集中的数据文件
rman-08522:输入数据文件 fno=00003 name=c:/oracle/oradata/rman/users01.dbf
rman-08522:输入数据文件 fno=00005 name=c:/oracle/oradata/rman/tools01.dbf
rman-08013:通道 c1:已创建 1 段
rman-08503:段 handle=e:/dbbackup/db_rman_6_1.bck comment=none
rman-08525:备份集完成,经过时间:00:00:03
rman-08008:通道 c1:正在启动 full 数据文件备份集
rman-08502:set_count=7 set_stamp=417351067 creation_time=26-12月-00
rman-08010:通道 c1:正在指定备份集中的数据文件
rman-08522:输入数据文件 fno=00002 name=c:/oracle/oradata/rman/rbs01.dbf
rman-08522:输入数据文件 fno=00006 name=c:/oracle/oradata/rman/indx01.dbf
rman-08013:通道 c1:已创建 1 段
rman-08503:段 handle=e:/dbbackup/db_rman_7_1.bck comment=none
rman-08525:备份集完成,经过时间:00:00:04
rman-08008:通道 c1:正在启动 full 数据文件备份集
rman-08502:set_count=8 set_stamp=417351071 creation_time=26-12月-00
rman-08010:通道 c1:正在指定备份集中的数据文件
rman-08522:输入数据文件 fno=00001 name=c:/oracle/oradata/rman/system01.dbf
rman-08011:备份集中包括当前控制文件
rman-08013:通道 c1:已创建 1 段
rman-08503:段 handle=e:/dbbackup/db_rman_8_1.bck comment=none
rman-08013:通道 c1:已创建 2 段
rman-08503:段 handle=e:/dbbackup/db_rman_8_2.bck comment=none
rman-08013:通道 c1:已创建 3 段
rman-08503:段 handle=e:/dbbackup/db_rman_8_3.bck comment=none
rman-08013:通道 c1:已创建 4 段
rman-08503:段 handle=e:/dbbackup/db_rman_8_4.bck comment=none
rman-08013:通道 c1:已创建 5 段
rman-08503:段 handle=e:/dbbackup/db_rman_8_5.bck comment=none
rman-08013:通道 c1:已创建 6 段
rman-08503:段 handle=e:/dbbackup/db_rman_8_6.bck comment=none
rman-08013:通道 c1:已创建 7 段
rman-08503:段 handle=e:/dbbackup/db_rman_8_7.bck comment=none
rman-08525:备份集完成,经过时间:00:00:19
rman-08008:通道 c1:正在启动 full 数据文件备份集
rman-08502:set_count=9 set_stamp=417351090 creation_time=26-12月-00
rman-08010:通道 c1:正在指定备份集中的数据文件
rman-08522:输入数据文件 fno=00004 name=c:/oracle/oradata/rman/temp01.dbf
rman-08013:通道 c1:已创建 1 段
rman-08503:段 handle=e:/dbbackup/db_rman_9_1.bck comment=none
rman-08525:备份集完成,经过时间:00:00:07
rman-03023:正在执行命令:partial resync
rman-08003:启动部分恢复目录的 resync
rman-08005:完成部分 resync
rman-08031:释放的通道:c1
5、使用脚本功能
使用脚本的目的在于方便我们操作中的方便,操作上和存储过程相似。
rman>create script l0dbbackup {
2> allocate channel c1 type disk;
3> backup
4> format 'e:/dbbackup/db_%d_%s_%p.bck'
5> (database filesperset=2 );
6> }
rman-03022:正在编译命令:create script
rman-03023:正在执行命令:create script
rman-08085:已创建脚本 l0dbbackup
rman>run {execute script l0dbbackup; }
国内最大的酷站演示中心!
新闻热点
疑难解答