Oracle10g中的RMAN使用程序主要关注的是将磁盘备份作为介质恢复解决方案的最佳方法。随着磁盘价格的下跌,大量的存储区网络(StorageAreaNetwork:SAN)已经在很多数据中心找到了永久的存储空间。随着业务向着价格越来越便宜而容量越来越大的磁盘发展,对RMAN的功能(如Flashback)进行了升级,从而可以最有效的利用可用存储空间。
RMAN备份实用程序是按逻辑执行的过程,而写入到磁盘的操作正是Oracle数据库所擅长的工作。因此,当Oracle数据库开始改进磁盘写入功能时,RDBMS也会做相应的工作来改进性能。
但是在许多情况下,数据库的大小及其位置都使得它无法备份到磁盘。或者仍然存在要简历数据副本或者离站归档的业务需求。因此还是需要写入到老式的磁带设备。
Oracle数据库的磁带备份需要第三方的辅助设备,这主要是因为市场上流行的连续介质子系统具有完全不同的性质。RMAN开发人员通常使用那些大供应商提供的可读写磁带产品,而不去尝试这些不同类型的磁带设备的不同系统调用。
Oracle拥有自己的介质管理软件解决方案,称为Oracle安全备份(OracleSecureBackup:OSB)。OSB是完全集成的,RMAN到磁盘的解决方案,它不需要任何第三方供应商的软件插件,但是OSB不成熟。
一.使用磁带备份的原因
第一个理由是由于数据库的大小。现在的数据库平均大小已经达到100GB,并且这个数据还在继续增加。数据库的大小决定了是否需要执行磁带备份操作。即使磁盘价格在迅速下降,但购买很多磁盘需要的花费很大。磁盘备份的优点在于快速恢复,而磁盘的备份和还原相对较慢。
第二个理由是易管理性。通常,全企业备份策略的实现和执行是由中央系统上的人员集中管理的,这样节省了备份的规模和开支,公司也有能力买大容量的磁带盒式设备来存储更多的数据。
第三个理由:可移植性。为了归档和避免灾难,可以很容易的将一堆磁带离站移动,而硬盘则无法这么方便的传输。
集中备份资源的缺点:会导致备份复杂话,尤其是Oracle数据库的复杂化。Oracle数据文件,日志文件和控制文件的复杂性意味着我们不能简单的执行一个OS作业。让它在空闲时间复制文件。相反,我们必须使数据库做好执行备份的操作,然后通知开始复制,最后重新配置数据库。
使用RMAN可以避免这个数据库的配置,备份操作可以发生在任何时候,任何情况下,不过,要将备份写入集中的磁带备份位置,就必须执行一些特殊的RMAN配置。
二.RMAN和介质管理器概述
通过使用介质管理器,RMAN将数据备份到磁带上。介质管理器(mediamanager:MM)是由第三方软件商提供的,它将数据块中的数据流从RMAN通道进程传递到相应的磁带中。通常,介质服务器位于一个企业网中。介质管理服务器(MediamanagementServer)是一个集中化系统,在这里可以处理全企业的磁带备份操作。
计算机系统必须安装了介质管理(MM)客户端软件才能使用介质管理器。介质管理客户端软件可以连接MM服务器,并且通过网络传输数据。 如果RMAN要使用MM服务器,还需要另外的软件组件。安装客户端软件之后,我们还必须为介质管理器安装Oracle模块。Oracle模块(OracleModule)是一个用于OracleRDMBS的软件插件,它可以连接RMAN与客户端管理软件,后者可以把数据传送到MM服务器。Oracle的这个插件也称为介质管理库(MediamanagementLibrary:MML).
2.1介质管理器目录
介质管理器是我们使用的整个备份系统中的一个独立子系统。它有三个组件:与Oracle结合的介质管理库(MML),介质管理客户端和介质管理服务器。MM服务器有多种组件,这些组件的规范由供应商提供,所有的MM服务器都必须具有一些相同的组件。
介质管理器目录是MM服务器上的信息数据库,它保存了关于物理磁带本身,磁带的访问权限和磁带存储内容的相关信息。备份完成时,介质管理器目录则记录RMAN文件句柄,句柄(Handle)是使用RMAN执行备份操作时创建的备份片名称。如果执行磁盘备份操作,句柄就是物理文件名。如果执行磁带备份,介质管理器目录中使用的句柄就是备份所在的磁带位置。
RMAN完成磁带备份操作时会向管理器提供句柄名,介质管理器把该句柄记录在目录中。需要执行还原操作时,RMAN会基于自身的目录向介质管理器请求指定的句柄。随后,介质管理器查找这个句柄,将该句柄与指定磁带关联在一起,同时判断磁带是否有效。如果磁带有效,介质管理器会使用这个磁带,并且开始将数据流传送回RMAN,这样就可以重新构建数据文件。
2.2介质管理器的其他软件组件
除了介质管理器目录以外,MM管理器还包含两个基本组件:
(1)设备代理程序(Deviceagent):设备代理程序是负责使用实际磁带设备并在该设备上传送数据的组件
(2)自动机器接口(RoboticInterface):自动机器接口控制所有自动机器的软件,这些自动机器负责在磁带满时或在请求写入已填满的磁带时更换磁带。
Oracle中的RMAN不了解这些组件的存在。RMAN只是简单地把命令请求发送给MML,随后MM软件会处理相应的所有事件。不过,由于备份和恢复的成功取决于这些组件,所以熟悉这些软件组件也是至关重要的。使用RMAN出现的问题大多数都与设备代理程序或自动机器接口有关,但从RMAN接口几乎察觉不到这些问题。
2.3介质管理库(MML)
MML是一个库文件,它将RMAN的一致性的备份或还原请求解释为在据诶是管理服务器上的具体的系统调用,以实现要求的操作。MML与MM客户端软件和MM服务器软件一样是由同一个供应商提供的,但是我们需要单独购买MML和取得许可。
首次分配磁带通道时,MML作为一个集成的库文件加载到Oracle内存空间,它是OracleRDBMS软件的逻辑部分,因此RMAN可以生成正确的MM客户端软件调用。这个集成实际上非常简单:分配磁带通道时,Oracle加载一个名为libobk.so的文件。这个文件位于ORACLE_HOM/BIN目录中,它只是一个要使用的MML文件的符号连接。在Windows平台上,Oracle会在搜索路径中查找一个名为orasbt.dll的库文件。不论是哪一种介质管理器,在介质管理DDL文件都名为:orasbt.dll,介质管理器通常将其写入到WINDOWS/system32目录中。如果这个文件没有位于该目录中,在系统路径环境变量中有一个能够查找到orasbt.dll文件的搜索路径。
示例:使用Oracle默认SBT接口测试磁带通道
RMAN>run
2>{
3>allocatechannelc1type'sbt_tape'
4>PARMS="SBT_LIBRARY=oracle.disksbt,
5>ENV=(BACKUP_DIR=f:/BACKUP/)";
6>BACKUPDATABASEFORMAT='%U';}
释放的通道:ORA_DISK_1
分配的通道:c1
通道c1:SID=21设备类型=SBT_TAPE
通道c1:WARNING:OracleTestDiskAPI
启动backup于18-6月-10
通道c1:正在启动全部数据文件备份集
通道c1:正在指定备份集内的数据文件
输入数据文件:文件号=00001名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF
输入数据文件:文件号=00002名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF
输入数据文件:文件号=00003名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF
输入数据文件:文件号=00004名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF
通道c1:正在启动段1于18-6月-10
通道c1:已完成段1于18-6月-10
段句柄=06lghd3f_1_1标记=TAG20100618T085926注释=APIVersion2.0,MMSVersion8.1
.3.0
通道c1:备份集已完成,经过时间:00:01:35
通道c1:正在启动全部数据文件备份集
通道c1:正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的SPFILE
通道c1:正在启动段1于18-6月-10
通道c1:已完成段1于18-6月-10
段句柄=07lghd6e_1_1标记=TAG20100618T085926注释=APIVersion2.0,MMSVersion8.1
.3.0
通道c1:备份集已完成,经过时间:00:00:01
完成backup于18-6月-10
释放的通道:c1
也可以永久性配置命令设置Oracle库:
Configurechanneldevicetype'SBT_TAPE'
PARMS'SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=f:/BACKUP/)';
如果视图分析介质管理器备份解决方案可能存在的问题或无法使备份工作时,上面的的示例就是一个很好的测试方法。通过分配一个‘伪造的’磁带通道,可以测试RMAN配置是否正确。
注意:不要在产品备份时测试MML文件。如果要在产品环境中执行磁盘备份操作,就分配磁盘通道。伪造MML的性能非常糟糕,这是因为RMAN为磁带而不是磁盘分配内存缓冲区,因而磁盘写操作的速度远大于磁带写速度这一点没有体现。
2.4连接MML的接口
链接Oracle与MML时,意味着RMAN可以通过它来传递命令以连接MML,或者进一步说,在数据库服务器上安装的MM客户端软件。
要指定MM服务器,我们必须在RMAN会话中传递指定服务器名的环境变量。具体来讲,在分配磁带通道时,我们将服务器名指定为环境变量。在上面的示例中,我们用allocatechannel命令的PARMS选项来传递环境变量。不同的MM产品具有不同的环境变量。如VeritasNetBackup要求使用NB_ORA_SERV参数。
Allocatechannelt1type'sbt_tape'PARMS="ENV=(NB_ORA_SERV=storage1)";
这里的MM服务器名称就是storage1,同时数据库服务器在MM服务器中已注册并具有写磁带设备的权限。
除了服务器名之外,我们还可以在通道分配时传递其他一些参数来利用服务器上的管理功能。如Netbackup允许我们指定用于备份操作的类或调度,而EMCNetworker允许我们指定资源池。
三.SBTAPI
RMAN可以不受影响地使用不同的介质管理器,这是因为不管加载哪一种MML,RMAN都会发送相同的命令。Oracle使用SBTAPI来开发RMAN,SBTAPI是一种通用API,提供给Oracle数据库备份操作编码集成产品的第三方软件商,是RMAN向介质管理器发送命令的工具。
SBTAPI负责向MM服务器发送命令以初始化在磁带上备份文件的创建,还发送基于介质管理器目录中的文件句柄来查找先前备份的命令。SBTAPI可以发送删除备份的命令,也可以写新备份以及从备份位置读取备份。OracleRMANSBTAPI有1.1和2.0两种版本。1.1版本是与Oracle8.0.x一起发布和使用的。其后,RMAN使用2.0版本的规范生成介质管理器调用,运行备份时我们可以在RMAN输出中看到这个版本号。
RMAN还会返回通道分配时的初始化的MML版本,这可以在通道分配期间的RMAN输出中看到。如果看到了MML版本信息,也就说明已经成功链接了MML与RMAN,否则RMAN输出中就不能解析版本信息。
四.磁带备份的全过程
概述一下磁带备份的全过程,具体细节是有编写集成MML的供应商来处理。
分配磁带通道时,RMAN会在目标数据库上生成一个服务器进程,这个服务器进程随后生成sbtinit()的SBTAPI调用,该调用初始化MML文件并将这个文件加载到内存,同时还向RMAN返回MML支持的SBTAPI版本。调用sbtinit()后,RMAN还会调用sbtinit2(),sbtinit2()调用将向介质管理器软件提供更多详细的配置信息。
RMAN分析备份命令后会执行远程过程调用(RPC),RPC会生成sys.dbms_backup_restore.backuppiececreate调用。这时,通道进程将调用sbtbackup(),该调用在指定的磁带位置处理备份片的创建。Sbtbackup()调用会通知介质管理器,Oracle将开始推入数据块流,这样介质管理器会为数据流准备好磁带备份。
RMAN输入缓冲区被填满后会执行内存对内存的写操作把内容写入输出缓冲区。输出缓冲区被填满时,通道进程调用sbtwrite2(),从而将输入缓冲区的内容写到磁带上。一般情况下,这种方式会在MM服务器上使用设备代理来访问磁带自身。
当用于特定备份的所有输出缓冲区被清空,并且sbtwrite2()调用的工作也完成时,通道会话会调用sbtclose2(),该调用将彻底清空所有介质管理器缓冲区,并且将备份片提交给磁带。
完成备份后,通道进程调用sbtinfo2(),该调用确认介质管理器目录已经记录了备份片。Sbtinfo2()调用向介质管理器目录请求备份的磁带,磁带位置和备份的完整时间,然后将备份片句柄写入介质管理器目录。
在确认备份片位置后,通道进程调用sbtend(),该调用清楚剩余的资源,并将他们释放,以用于其他数据库操作。最后执行的是收回通道进程的动作,它在目标数据库中完成。
五.从磁带还原的全过程
在还原操作期间,SBTAPI将经过一系列步骤还原磁带备份到数据库中。
还原分配磁带通道时,RMAN会在目标数据库上创建一个服务器进程。随后通道进程调用sbtinit()来初始化介质管理软件。这一步骤与备份操作相同,MML文件被加载到内存中。
基于RMAN中的restore命令的参数,RMAN会检查RMAN目录来确定要进行还原的备份句柄名。随后,它使用sbtrestore()调用将请求的备份片句柄传递给介质管理器,该调用告诉介质管理器要为还原操作朱备好相应的磁带,即使用介质管理器目录来查找相应的磁带,如果有必要则向自动机器指令传递取磁带的命令。加载磁带后,磁带必须绕回到备份片的起始点。
为还原准备好磁带后,通道进程调用sbtread2()函数从磁带设备读取数据并将数据流发送至ORACLE进程。这些数据被加载到输入缓冲区,然后被写入到输出缓冲区,最后被写入控制文件指定的数据文件位置。
在磁带上检测到备份片的结束点时,磁带通道进程调用sbtclose()函数来断开该设备片所在的磁带,这表明Oracle结束了对这个磁带的操作。如果执行还原操作时需要多个备份片,通道进程会返回第二个步骤并为另一个被分片调用sbtstore()。
还原操作完成并且RMAN不再请求备份片时,通道进程调用sbtend()函数,该函数清理并释放通道资源以供其他方面使用。然后通道进程结束,此后介质管理器就可以卸载已经请求过的磁带。
六.使用sbttest和loadsbt.exe
通常总有一些提示说明是否成功链接了MML与Oracle,如,来自通道分配的信息说明了MML版本。不过这些指示不能保证最后的成功,在更下层的网络拓扑中(MM客户端或MM服务器)仍然可能出现故障。
Oracle提供了一个名为sbttest的实用程序,可用它来测试以确保RMAN能够使用MM配置来执行磁带备份操作。从命令可以调用这个实用程序,该程序执行一个完整的测试:sbttest会向磁带写一个数据块,然后请求读取这个数据库。通过这种方式,sbttest运行备份操作期间执行的所有SBTAPI函数,并确认这些函数能否成功。
Sbttest的用法非常简单:只要从命令提示符运行。确认完成了所有的MM配置,然后进入RMAN运行环境中的命令提示符,并输入sbttest和测试文件名。
-bash-3.2$sbttest
Error:backupfilenamemustbespecified
Usage:sbttestbackup_file_name
<-dbnamedatabase_name>
<-tracetrace_file_name>
<-remove_before>
<-no_remove_after>
<-read_only>
<-no_regular_backup_restore>
<-no_proxy_backup>
<-no_proxy_restore>
<-file_typen>
<-copy_numbern>
<-media_pooln>
<-os_res_sizen>
<-pl_res_sizen>
<-block_sizeblock_size>
<-block_countblock_count>
<-proxy_fileos_file_namebk_file_name
[os_res_sizepl_res_sizeblock_sizeblock_count]>
<-libnamesbt_library_name>
Requiredparameters:
backup_file_name:Thenameofthebackupfilewhichwillbecreatedby
thisprogram.IfaBFSorBackupPiecealreadyexists
withthisname,thenthisprogramwillnotcreateanew
backupfile-theexistingfilewillbereadinits
entiretyanditscontentswillnotbeverified
Optionalparameters:
-dbnamespecifiesthedatabasenamewhichwillbeusedbySBT
toidentifythebackupfile.Thedefaultis"sbtdb"
-tracespecifiesthenameofafilewheretheMediaManagement
softwarewillwritediagnosticmessages.
-remove_beforeifspecified,thenthespecifiedbackupfilewillbe
deletedbeforeitisopened.Thisoptionisintended
forwhensbttesthasalreadybeenrunbutdidnotcomplete
successfully,leavingbehindthebackupfileitcreated.
-no_remove_afterThedefaultbehaviorofthisprogramistodeletethe
backupfile,ifitwascreatedbythisprogram.Ifthis
optionisspecified,thenthefilewillnotbe
removedwhenthisprogramiscomplete.
-read_onlyif-read_onlyisspecified,thenbackup_file_namemustalready
exist.Itscontentswillberead.Ifitisdeterminedthatthe
filewascreatedbythisprogram,thenitscontentsisvalidated.
-no_regular_backup_restoreskipsnon-proxybackupandrestore.
-no_proxy_backupskipsproxycopybackupsession.
-no_proxy_restoreskipsproxycopyrestoresession.
-file_typespecifiesfiletype-1,2or3.
-copy_numberthisisthecopy_numberparametertosbtpcbackup.
-media_poolthisisthemedia_poolparametertosbtpcbackup.
-os_res_sizespecifiesthesizeinbytesoftheosreservedblock.
-pl_res_sizespecifiesthesizeinbytesoftheplatformreservedblock.
-block_sizespecifiesthesizeinbytesofeachblockwrittentothe
backupfile.Thedefaultis16384.
-block_countspecifieshowmanyblockswillbewrittentothe
backupfile.Thedefaultis100.
-proxy_filespecifiestheosfilename,backupfilename,osreservedsize,
platformreservedsize,blocksize,andblockcountforeach
proxyfile.Foreachproxy_file,theos_file_nameand
bk_file_nameparametersaremandatory,theotherfour
parametersareoptional.Ifnoneofthefourisspecified,
eitherthedefaultorthevaluespecifiedwith-os_res_size,
pl_res_size,block_size,block_countwillbeused.Itsomeof
thefourarethesameasthevaluessetwith-os_res_size,
pl_res_size,block_size,andblock_count,aletter'g'or'G'
canbeused.
Forexample,
stksbt2-os_res_size10-pl_res_size20-block_count30
-proxy_filefile1.osffile1.bkfggg100
then,forfile1.osf,thebackupfilenameisfile1.bkf,the
osreservedsizeis10bytes,andtheplatformreservedsize
is20,blocksizeis16384byte,andtheblockcountis100.
Butinthiscase,
stksbt2-proxy_filefile1.osffile1.bkfggg100
-os_res_size10-pl_res_size20-block_count30
forfile1.osf,theos_res_sizeandpl_res_sizewillbethe
defaultvalue,0(insteadof10and20),andtheblock_count
willbe100(insteadof30)andtheblock_sizewillalsobe
thedefault,16384.
-libnamespecifiestheSBTlibrarytotest.sbttestloadslibrary
usingdlopen()call.Ifthisoptionisnotused,sbttest
triestotestagainstlibobk.so.Otherwiseusesstatically
linkedlibrary.
Specifyoracle.disksbtfororacle'sdiskSBTlibrary.
Sbttest实用程序已经相当完善。现在,我们可以传递许多参数来测试MM系统的所有过程,包括命名要测试的数据库,修改sbttest写入的数据块数目,以及处理sbttest写入磁带的文件。从命令提示符简单的输入sbttest会给出所有可以使用的参数开关和简单的文本说明。
Sbttest使用程序只适用于Unix平台;在windows平台上,我们可以想OracleSupport请求loadsbt.exe实用程序。遗憾的是,Loadsbt.exe实用程序不具有与sbttest相同的性能,它只是简单的在搜索路劲中查找orasbt.dll文件。如果找到该文件,loadsbt.exe实用程序会试图加载该文件,其加载方法与Oracle在磁带备份操作期间加载的方法相同。如果可以加载orasbt.dll文件,loadsbt.exe实用程序会通知用户,但它不会在磁带上写入数据块。所以我们无法查看整个MM配置工作。因此,loadsbt.exe的作用不如sbttest.
注:整理自《Oracle10gRMAN备份与恢复》
------------------------------------------------------------------------------
Blog:http://blog.csdn.net/tianlesoftware
网上资源:http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1群:62697716(满);DBA2群:62697977