RMAN初学者指南——数据库备份

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值