RMAN系列(三),介质管理问题(二)

2014-11-24 15:53:27 · 作者: · 浏览: 9
BRARY=oracle.disksbt,
5> ENV=(BACKUP_DIR=f:/BACKUP/)";
6> BACKUP DATABASE FORMAT='%U';}
释放的通道: ORA_DISK_1
分配的通道: c1
通道 c1: SID=21 设备类型=SBT_TAPE
通道c1: WARNING: Oracle Test Disk API
启动 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 注释=API Version 2.0,MMS Version 8.1.3.0
通道 c1: 备份集已完成, 经过时间:00:01:35
通道 c1: 正在启动全部数据文件备份集
通道 c1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 c1: 正在启动段 1 于 18-6月 -10
通道 c1: 已完成段 1 于 18-6月 -10
段句柄=07lghd6e_1_1 标记=TAG20100618T085926 注释=API Version 2.0,MMS Version 8.1.3.0
通道 c1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 18-6月 -10
释放的通道: c1
也可以永久性配置命令设置Oracle 库:
Configure channel device type '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 会话中传递指定服务器名的环境变量。 具体来讲,在分配磁带通道时,我们将服务器名指定为环境变量。 在上面的示例中,我们用allocate channel 命令的PARMS 选项来传递环境变量。不同的MM 产品具有不同的环境变量。 如Veritas NetBackup 要求使用NB_ORA_SERV 参数。
Allocate channel t1 type 'sbt_tape' PARMS="ENV=(NB_ORA_SERV=storage1)";
这里的MM服务器名称就是storage1,同时数据库服务器在MM 服务器中已注册并具有写磁带设备的权限。
除了服务器名之外,我们还可以在通道分配时传递其他一些参数来利用服务器上的管理功能。 如Netbackup 允许我们指定用于备份操作的类或调度,而EMC Networker 允许我们指定资源池。
三. SBT API
RMAN可以不受影响地使用不同的介质管理器,这是因为不管加载哪一种MML,RMAN都会发送相同的命令。Oracle 使用SBT API 来开发RMAN,SBT API 是一种通用API, 提供给Oracle 数据库备份操作编码集成产品的第三方软件商,是RMAN向介质管理器发送命令的工具。
SBT API 负责向MM 服务器发送命令以初始化在磁带上备份文件的创建,还发送基于介质管理器目录中的文件句柄来查找先前备份的命令。 SBT API 可以发送删除备份的命令,也可以写新备份以及从备份位置读取备份。 Oracle RMAN SBT API 有1.1 和2.0 两种版本。 1.1 版本是与Oracle 8.0.x 一起发布和使用的。其后,RMAN 使用2.0 版本的规范生成介质管理器调用,运行备份时我们可以在RMAN输出中看到这个版本号。
RMAN 还会返回通道分配时的初始化的MML 版本,这可以在通道分配期间的RMAN输出中看到。 如果看到了MML 版本信息,也就说明已经成功链接了MML 与 RMAN,否则RMAN输出中就不能解析版本信息。
四. 磁带备份的全过程
概述一下磁带备份的全过程,具体细节是有编写集成MML的供应商来处理。
分配磁带通道时,RMAN 会在目标数据库上生成一个服务器进程,这个服务器进程随后生成sbtinit()的 SBT API 调用,该调用初始化MML 文件并将这个文件加载到内存,同时还向RMAN 返回MML支持的SBT API 版本。 调用sbtinit()后,RMAN还会调用sbtinit2(),sbtinit2()调用将向介质管理器软件提供更多详细的配置信息。
RMAN 分析备份命令后会执行远程过程调用(RPC),RPC 会生成sys.dbms_backup_restore.backuppiececreate 调用。 这时,通道进程将调用sbtbackup(),该调用在指定的磁带位置处理备份片的创建。 Sbtbackup()调用会通知介质管理器,Oracle 将开始推入数据块流,这样介质管理器会为数据流准备好磁带备份。
RMAN 输入缓冲区被填满后会执行内存对内存的写操作把内容写入输出缓冲区。 输出缓冲区被填满时,通道进程调用sbtwrite2(),从而将输入缓冲区的内容写到磁带上。一般情况下,这种方式会在MM 服务器上使用设备代理来访问磁带自身。
当用于特定备份的所有输出缓冲区被清空,并且sbtwrite2() 调用的工作也完成时,通道会话会调用sbtclose2(), 该调用将彻底清空所有介质管理器缓冲区,并且将备份片提交给磁带。
完成备份后,通道进程调用sbtinfo2(),该调用确认介质管理器目录已经记录了备份片。Sbtinfo2() 调用向介质管理器目录请求备份的磁带,磁带位置和备份的完整时间,然后将备份片句柄写入介质管理器目录。
在确认备份片位置后,通道进程调用sbtend(),该调用清楚剩余的资源,并将他们释放,以用于其他数据库操作。最后执行的是收回通道进程的动作,它在目标数据库中完成。
五. 从磁带还原的全过程