RMAN初学者指南.docx
《RMAN初学者指南.docx》由会员分享,可在线阅读,更多相关《RMAN初学者指南.docx(46页珍藏版)》请在冰点文库上搜索。
RMAN初学者指南
RMAN初学者指南
RMAN(RecoveryManager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库,前一段时间有网友找我要,可惜没时间,趁这两天出差在外没什么事,就写了一下,供初学的朋友参考。
本文将介绍RMAN的基本操作,更多的信息请参考《Oracle8iBackup&RecoveryGuide》及RMAN手册,或者是OCPStudentGuideM09096《BackupandRecoveryWorkshop》Volume2,也可以通过gototop@和我联系。
Oracle自带的例子参考$ORACLE_HOME/rdbms/demo目录下的*.rcv脚本。
一、RMAN简介
RMAN可以用来备份和恢复数据库文件、归档日志和控制文件,也可以用来执行完全或不完全的数据库恢复。
RMAN有三种不同的用户接口:
COMMANDLINE方式、GUI方式(集成在OEM中的备份管理器)、API方式(用于集成到第三方的备份软件中)。
具有如下特点:
1)功能类似物理备份,但比物理备份强大N倍,从下面的特点可以看到;
2)可以压缩空块;
3)可以在块水平上实现增量;
4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;
5)备份与恢复的过程可以自动管理;
6)可以使用脚本(存在Recoverycatalog中)
7)可以做坏块监测
二、相关术语解释
1)Backupsets备份集
备份集顾名思义就是一次备份的集合,它包含本次备份的所有备份片,以oracle专有的格式保存。
一个备份集根据备份的类型不同,可能构成一个完全备份或增量备份。
2)Backuppieces备份片
一个备份集由若干个备份片组成。
每个备份片是一个单独的输出文件。
一个备份片的大小是有限制的;如果没有大小的限制,备份集就只由一个备份片构成。
备份片的大小不能大于你的文件系统所支持的文件长度的最大值。
3)Imagecopies映像备份
映像备份不压缩、不打包、直接COPY独立文件(数据文件、归档日志、控制文件),类似操作系统级的文件备份。
而且只能COPY到磁盘,不能到磁带。
可以作为增量备份的0级,一般用来备份控制文件。
4)Fullbackup全备份
全备份是指对数据文件中使用过的数据块进行备份,没有使用过的数据块是不做备份的,也就是说,RMAN进行备份是进行压缩的。
5)Incrementalbackup增量备份
增量备份是指备份数据文件中自从上一次同一级别的或更低级别的备份以来被修改过的数据块。
与完全备份相同,增量备份也进行压缩。
增量备份虽然概念很好,备份也很简单,但恢复起来却是另外一回事,不仅麻烦而且容易出错,所以实际中越来越少使用,到了Oracle9i已经建议不再使用,以后版本会逐渐取消对增量备份的支持。
6)Recoverycatalog恢复目录
恢复目录用于记录RMAN使用过程中的控制信息,恢复目录应该经常被同步(这在后面会讲到)。
尽管我们可以使用nocatalog方式来使用RMAN,此时控制信息记录在目标数据库的控制文件中,但这样毕竟不安全,因为一旦目标数据库的控制文件损坏就意味着所有的RMAN备份失效。
同样的道理恢复目录应该建立在另外一个数据库中,在下面的例子中我们称作“目录数据库”。
三、创建恢复目录
1、在目录数据库中创建恢复目录所用表空间
SQL>createtablespacermantsdatafile'c:
\oracle\oradata\cc\rmants.ora'size20M;
表空间已创建。
2、在目录数据库中创建RMAN用户并授权
SQL>createuserrmanidentifiedbyrmandefaulttablespacermantstemporarytablespacetempquotaunlimitedonrmants;
用户已创建
SQL>grantrecovery_catalog_ownertorman;
授权成功。
3、在目录数据库中创建恢复目录
C:
\>rmancatalogrman/rman@恢复目录数据库名称
恢复管理器:
版本8.1.7.0.0-Production
RMAN-06008:
连接到恢复目录数据库
RMAN>createcatalogtablespacermants;
RMAN-06431:
恢复目录已创建
4、注册目标数据库到恢复目录
注意哦,这里我的目标数据库使用的服务名称是rman,意思为要使用RMAN进行备份的数据库,而目录数据库使用的服务名称是CC。
C:
\>rmantargetsys/sys@rman
恢复管理器:
版本8.1.7.0.0-Production
RMAN-06005:
连接到目标数据库:
RMAN(DBID=1303772234)
RMAN>connectcatalogrman/rman@cc
RMAN-06008:
连接到恢复目录数据库
RMAN>registerdatabase;
RMAN-03022:
正在编译命令:
register
RMAN-03023:
正在执行命令:
register
RMAN-08006:
注册在恢复目录中的数据库
RMAN-03023:
正在执行命令:
fullresync
RMAN-08002:
正在启动全部恢复目录的resync
RMAN-08004:
完成全部resync
好了,到此为止前面的准备工作都做好了,下面就可以使用RMAN来进行备份和恢复了。
5、使用RMAN
下面通过具体的例子来说明RMAN的使用,这里会涉及到除了恢复以外的所有RMAN操作,关于使用RMAN进行恢复的内容请参考我以前写的另外一篇文章:
RMAN恢复实践。
1、备份整个数据库
RMAN>run{
2>allocatechanneldev1typedisk;
3>backup
4>format'/home/oracle/data/db_t%t_s%s_p%p'
5>(database);
6>releasechanneldev1;
7>}
2、复制数据文件
RMAN>run{
2>allocatechannelc1typedisk;
3>copydatafile'c:
\oracle\oradata\rman\users01.dbf'to'e:
\dbbackup\u.dbf'tag
=u1215;
4>}
3、查看备份及复制的信息
RMAN>listbackup;
RMAN-03022:
正在编译命令:
list
备份集列表
关键字Recid标记LV集合标记集合计数完成时间
-----------------------------------------------------------------------
21614173470130417346992126-12月-00
备份段列表
关键字Pc#Cp#状态完成时间段名
----------------------------------------------------------------------
21711AVAILABLE26-12月-00E:
\DBBACKUP\2DB.DMP
数据文件包括列表
文件名称LV类型检查点SCN检查点时间
----------------------------------------------------------------------
1C:
\ORACLE\ORADATA\RMAN\SYSTEM01.DBF0Full3322426-12月-00
2C:
\ORACLE\ORADATA\RMAN\RBS01.DBF0Full3322426-12月-00
3C:
\ORACLE\ORADATA\RMAN\USERS01.DBF0Full3322426-12月-00
4C:
\ORACLE\ORADATA\RMAN\TEMP01.DBF0Full3322426-12月-00
5C:
\ORACLE\ORADATA\RMAN\TOOLS01.DBF0Full3322426-12月-00
6C:
\ORACLE\ORADATA\RMAN\INDX01.DBF0Full3322426-12月-00
RMAN>listcopyofdatafile'c:
\oracle\oradata\rman\users01.dbf';
RMAN-03022:
正在编译命令:
list
数据文件备份列表
关键字文件状态完成时间检查点SCN检查点时间名称
----------------------------------------------------------
2263A26-12月-003322626-12月-00E:
\DBBACKUP\U.DBF
4、在备份是设置相关参数
format--文件输出格式,
%d--databasename,
%s--backupsetssequencenumber,
%p--backuppiecessequencenumber
filesperset--每个备份集中所包括的文件数
更多参数请参考本文开始时列出的书。
RMAN>run{
2>allocatechannelc1typedisk;
3>setlimitchannelc1kbytes500000;
4>backup
5>format'e:
\dbbackup\db_%d_%s_%p.bck'
6>(databasefilesperset=2);
7>releasechannelc1;
8>}
RMAN-03022:
正在编译命令:
allocate
RMAN-03023:
正在执行命令:
allocate
RMAN-08030:
分配的通道:
c1
RMAN-08500:
通道c1:
sid=9devtype=DISK
RMAN-03022:
正在编译命令:
setlimit
RMAN-03023:
正在执行命令:
setlimit
RMAN-03022:
正在编译命令:
backup
RMAN-03023:
正在执行命令:
backup
RMAN-08008:
通道c1:
正在启动full数据文件备份集
RMAN-08502:
set_count=6set_stamp=417351064creation_time=26-12月-00
RMAN-08010:
通道c1:
正在指定备份集中的数据文件
RMAN-08522:
输入数据文件fno=00003name=C:
\ORACLE\ORADATA\RMAN\USERS01.DBF
RMAN-08522:
输入数据文件fno=00005name=C:
\ORACLE\ORADATA\RMAN\TOOLS01.DBF
RMAN-08013:
通道c1:
已创建1段
RMAN-08503:
段handle=E:
\DBBACKUP\DB_RMAN_6_1.BCKcomment=NONE
RMAN-08525:
备份集完成,经过时间:
00:
00:
03
RMAN-08008:
通道c1:
正在启动full数据文件备份集
RMAN-08502:
set_count=7set_stamp=417351067creation_time=26-12月-00
RMAN-08010:
通道c1:
正在指定备份集中的数据文件
RMAN-08522:
输入数据文件fno=00002name=C:
\ORACLE\ORADATA\RMAN\RBS01.DBF
RMAN-08522:
输入数据文件fno=00006name=C:
\ORACLE\ORADATA\RMAN\INDX01.DBF
RMAN-08013:
通道c1:
已创建1段
RMAN-08503:
段handle=E:
\DBBACKUP\DB_RMAN_7_1.BCKcomment=NONE
RMAN-08525:
备份集完成,经过时间:
00:
00:
04
RMAN-08008:
通道c1:
正在启动full数据文件备份集
RMAN-08502:
set_count=8set_stamp=417351071creation_time=26-12月-00
RMAN-08010:
通道c1:
正在指定备份集中的数据文件
RMAN-08522:
输入数据文件fno=00001name=C:
\ORACLE\ORADA
TA\RMAN\SYSTEM01.DBF
RMAN-08011:
备份集中包括当前控制文件
RMAN-08013:
通道c1:
已创建1段
RMAN-08503:
段handle=E:
\DBBACKUP\DB_RMAN_8_1.BCKcomment=NONE
RMAN-08013:
通道c1:
已创建2段
RMAN-08503:
段handle=E:
\DBBACKUP\DB_RMAN_8_2.BCKcomment=NONE
RMAN-08013:
通道c1:
已创建3段
RMAN-08503:
段handle=E:
\DBBACKUP\DB_RMAN_8_3.BCKcomment=NONE
RMAN-08013:
通道c1:
已创建4段
RMAN-08503:
段handle=E:
\DBBACKUP\DB_RMAN_8_4.BCKcomment=NONE
RMAN-08013:
通道c1:
已创建5段
RMAN-08503:
段handle=E:
\DBBACKUP\DB_RMAN_8_5.BCKcomment=NONE
RMAN-08013:
通道c1:
已创建6段
RMAN-08503:
段handle=E:
\DBBACKUP\DB_RMAN_8_6.BCKcomment=NONE
RMAN-08013:
通道c1:
已创建7段
RMAN-08503:
段handle=E:
\DBBACKUP\DB_RMAN_8_7.BCKcomment=NONE
RMAN-08525:
备份集完成,经过时间:
00:
00:
19
........
RMAN-08008:
通道c1:
正在启动full数据文件备份集
RMAN-08502:
set_count=9set_stamp=417351090creation_time=26-12月-00
RMAN-08010:
通道c1:
正在指定备份集中的数据文件
RMAN-08522:
输入数据文件fno=00004name=C:
\ORACLE\ORADATA\RMAN\TEMP01.DBF
RMAN-08013:
通道c1:
已创建1段
RMAN-08503:
段handle=E:
\DBBACKUP\DB_RMAN_9_1.BCKcomment=NONE
RMAN-08525:
备份集完成,经过时间:
00:
00:
07
RMAN-03023:
正在执行命令:
partialresync
RMAN-08003:
启动部分恢复目录的resync
RMAN-08005:
完成部分resync
RMAN-08031:
释放的通道:
c1
5、使用脚本功能
使用脚本的目的在于方便我们操作中的方便,操作上和存储过程相似。
RMAN>createscriptl0dbbackup{
2>allocatechannelc1typedisk;
3>backup
4>format'e:
\dbbackup\db_%d_%s_%p.bck'
5>(databasefilesperset=2);
6>}
RMAN-03022:
正在编译命令:
createscript
RMAN-03023:
正在执行命令:
createscript
RMAN-08085:
已创建脚本l0dbbackup
RMAN>run{executescriptl0dbbackup;}
6.从恢复目录中注销已注册的数据库
要点:
1. 使用DBMS_RCVCAT包实现;
2. 一旦注销,该目标数据库保存在这个恢复目录中的备份集就不可用了;
3. 注销数据库必须知道目标数据库的标识码(DB_ID)和数据库键值(DB_KEY);
4.因为db表示rman用户的对象,所以必须以rman用户连接
操作:
1. 目标数据库的标识码(DB_ID)需要在连接时查看:
2. 数据库键值(DB_KEY)按照如下方法查看:
SQL>selectdb_key,db_idfromdb;
DB_KEYDB_ID
----------------------------------
11749233635
SQL>
3. 注销数据库:
SQL>executedbms_rcvcat.unregisterdatabase(1,1749233635);
PL/SQL过程已成功完成。
SQL>
7.同步目录恢复目录
RMAN>resynccatalog;
正在启动全部恢复目录的resync
完成全部resync
RMAN>
RMAN使用
RMAN(RecoveryManager,恢复管理器)是从Oracle8开始提供的一套用于备份和恢复的有利工具,它有两种使用界面:
GUI(图形用户界面)和CLI(命令行界面)。
使用Rman不但可以完成Oracle数据库备份和恢复的各种任务,还具有相当全面的报表功能。
使用Rman的前题
管理本地数据库可以使用OS认证,即在初始化参数文件中设置REMOTE_LOGIN_PASSWORDFILE=NONE;但是要管理远程数据库必须使用口令文件验证即设置参数REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE。
做备份和恢复的用户必须拥有SYSDBA权限.备份中使用的设备必须是RMAN用户有权使用的。
要使用RMAN备份数据到磁带机上,则还需要安装和配置类似LegatoStorageManager的备份介质管理软件。
使用Rman进行Oracle数据库备份的执行过程
1. 当用户发出一条RMAN命令来备份数据库的时候,Rman首先要链接到目标数据库,即验证用户的连接权限;
2. 检查是否安装了恢复目录;
3. 验证该数据库是否已经注册到RMAN;
4. 如果没有注册,则报错声明数据库没有注册,并要求用户注册该数据库;
5. 如果已经注册,则建立服务器会话连接,并且编译用户在Rman提示符下发出的备份命令。
和OS命令备份方式相比,使用RMAN的优点
备份执行期间不需要人工干预,因此减少了误操作的机会;
可以有效的将备份和恢复结合起来;
支持除逻辑备份以外的所有备份类型,包括完全备份,增量备份,表空间备份,数据文件备份,控制文件备份以及归档日志文件备份;
可以识别corruptedblock;
方便的实现定期(定时)备份;
自动生成备份日志;
Rman的备份教本和OS无关,方便移植;
强大的报表功能可以方便的获悉备份的可用性
和OS命令备份方式相比,使用RMAN的缺点
备份过程不透明;
Rman备份的数据只有使用Rman才能恢复;
如果管理网络上的多个数据库,通常会使用一个单独的数据库来作为Rman恢复目录,如果这个数据库出现故障,那么所作的所有数据库备份也都不能使用,除非恢复这个数据库。
那么为了保证这个用于存放Rman恢复目录的数据库出现故障,通常还要对这个数据库使用OS命令备份。
如果有一个数据库需要备份,那么备份信息会纪录在控制文件中,所以控制文件必须多处备份,不能丢失。
Rman备份不能备份REDOLOGFILES,参数文件(init.ora),口令文件,操作系统文件,以及OFFLINE的文件。
Rman支持的备份类型
1. 备份集(使用backup命令创建)
∙ 备份集可以包括归档日志或者数据文件,但是不能同时包括两者,即归档日志和数据文件不能被合并成一个备份集,即便是在一个备份操作中同时选择了备份归档日志和数据文件,Rman也会自动生成两个备份集,分别用于归档日志和数据文件。
备份集可以是完全备份或者是增量备份。
完全备份包含数据库使用过的数据文件的全部数据块(及没有使用过的不会被备份)。
增量备份只含有在最后一次统计或更低级的备份之后备修改过的数据块。
增量备份使用CUMULATIVE和nonCUMULATIVE两个选项
使用restore命令从备份集中恢复文件
2. 数据文件拷贝(即,印象拷贝,使用copy命令创建)
∙ 数据文件拷贝是使用OracleServerProcess进程创建,而不是使用OS创建。
拷贝之前,不需要使用类似altertablespace...beginbackup等命令。
可以使用数据文件拷贝直接替换原来的文件而无需恢复,但是必须用setewname或者switch命令使数据文件拷贝成为当前版本。
必要时,可以在数据文件拷贝上进行介质恢复
3. 操作系统备份(如copy,cp,等OS命令)
∙ 对于这种备份,可以用Rman的catalog命令把他们注册到恢复目录中。
备份时必须使用类似altertablespace...beginbackup等命令。
查看备份集:
RMAN>listbackupset;
备份集列表
===================
BS关键字类型LV大小设备类型经过时间完成时间
--------------------------------------------------------
128Full424KDISK00:
00:
0225-1月-02
BP关键字:
129状态:
AVAILABLE标记:
TAG20020125T105458
段名:
E:
\ORACLE\ORA92\DATABASE\03DF4GC3_1_1
备份集128中的数据文件列表
文件LV类型CkpSCNCkp时间名称
----------------------------------
6Full67630125-1月-02E:
\ORACLE\ORA92\TEST\USERS01.DBF
RMAN>
查看archivelogs的备份:
RMAN>listcopy;
已存档的日志副本列表