IVAN'S BLOG

HAPPY EVERYDAY

导航

Blog统计

文章

收藏

相册

itpub 成员BLOG

存档


正在读取评论……

RMAN(Recovery Manager) 是 DBA 的一个重要工具,用于备份、还原和恢复 oracle 数据库,前一段时间有网友找我要,可惜没时间,趁这两天出差在外没什么事,就写了一下,供初学的朋友参考。本文将介绍 RMAN 的基本操作,更多的信息请参考《 Oracle8i Backup & Recovery Guide 》及 RMAN 手册,或者是 OCP Student Guide M09096 《 Backup and Recovery Workshop 》 Volume 2 ,也可以通过 mailto:gototop@ncn.cn和我联系。 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/sys@rman

恢复管理器:版本 8.1.7.0.0 - Production

RMAN-06005 :连接到目标数据库: RMAN (DBID=1303772234)

RMAN>connect catalog rman/rman@cc

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; }

创建恢复目录步骤:
1 、连接目录数据库并为目录创建表空间:
create tablespace rman_ts datafile 'E:\ORACLE\ORADATA\MYUSR\rman.dbf' size 20M default storage(initial 100k next 100k pctincrease 0);

2 、创建恢复管理器用户:
create user rman identified by rman default tablespace rman_ts temporary tablespace temp quota unlimited on rman_ts;

3 、授予该用户维护恢复目录和执行备份与恢复操作的角色和权限:
grant recovery_catalog_owner to rman;
grant connect,resource to rman;

4 、确保在表空间和回滚段有足够的空间。目录需要大约 20m 的空间,回滚段大约为 5m ;

5 、登录到 os ,运行 rman 命令调用 rman 命令编译器并创建目录。使用 MSGLOG(8I 中为 LOG) 选项允许 rman 将信息和命令输出到文件中。
$rman catalog rman/rman msglog=catalog.log
RMAN> create catalog tablespace rman_ts
RMAN> exit

6 、检查 rman 创建的 catalog.log 文件(如果没指定应在进入 rman 前的目录下),注意在创建恢复目录过程中是否有错误。如果发现了任何错误,应该删除目录拥有者的所有对象并重建它们。

7 、使用 rman 命令连接到包含目标数据库的服务器。应以具有 sysdba 权限的用户身份登录到目标数据库执行所有的备份和恢复操作。
$rman target 'sys/pass as sysdba'
RMAN> connect catalog rman/rman

注意:前提条件是已经把数据库置于 archivelog 状态
( shutdown immediate;-- 注意不能用 abort
startup mount
alter database archivelog;
alter database open;


8 、在恢复目录中注册目标数据库。
RMAN> register database;

注意: rman 是使用内部数据库标志符( DBID )作为该数据库的唯一性标识, DBID 是在第一次创建数据库时计算出的。如果试图注册一个新的数据库,而这个数据库是通过拷贝已有数据库然后更名创建的,那么注册将失败。要备份拷贝的数据库,需要创建一个新的恢复目录拥有者,然后在这个新帐号创建恢复目录

$rman catalog rman/rman
rman: can't open catalog
提示这样的错误,
RMAN> 提示符出现不了。

为什么?

原来我运行的 rman 命令是 /usr/X11R6/bin/rman
而不是 $ORACLE_HOME/bin/rman



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=128562


[点击此处收藏本文]  发表于2004年10月12日 5:51 PM




正在读取评论……
大名
网址
验证码
评论