RMAN备份恢复原理

作者:BraveHeart


rman的核心是命令解释程序,当你输入命令,命令解释程序将这些命令转换为数据库上的远程过程调用(RPC)。备份和恢复数据库一个数据库的具体工作实际上是由目标数据库上的进程完成的。

rman的程序由两部分组成:可执行文件和recover.bsq。

可执行文件从recover.bsq中析取代码来创建在目标数据库上执行的pl/sql调用。recover.bsq是库文件,是rman操作的中枢。这俩文件始终保持连接。

rman需要访问目标库sys模式中存在的各种包,还需要有启动关闭数据库的权限。所以rman要以管理员身份连接目标数据库。

rman是一个客户端程序,需要通过oracle NET 连接目标数据库。

rman连接目标数据库需要建立一个专用服务器进程连接目标库的tnsname.ora条目。


rman生成一个到目标库的客户端连接时会创建两个服务进程:

主要进程:生成对sys包的调用,从而执行备份和恢复操作,并协调工作。

次要进程:轮询rman的长事务并在内部记录信息。


rman的通道进程:

除默认上面连接时间里的2个进程。在备份和还原操作期间还会为分配的每个通道建立一个通道进程。

通道进程是目标数据库上的服务进程。

通道进程作用是在备份期间协调读取数据文件和写入指定位置的操作,在还原期间则协调读取备份位置和在数据文件位置写入数据块的操作。

通道分:磁盘和磁带通道2类。我们只能为一个备份分一个类型的通道。

 

rman通道服务进程在协调工作时要访问两个sys数据包BMS_RCVMAN和DBMS_BACKUP_RESTORE,这俩包包含rman在目标库操作的所有功能。

SYS.DBMS_RCVMAN用来访问控制文件中的表,并将此信息传递给rman服务进程,rman服务进程会基于recover.bsq文件中的代码创建一些pl/sql块。这些pl/sql块含有对SYS.DBMS_BACKUP_RESTORE的调用。SYS.DBMS_RCVMAN使rman可以构建准确反映数据库结构的备份与

还原操作。在任何操作前设置TIME运算符和效验数据文件头中的检查点信息,并检查文件位置大小,以及有关节点相似性(RAC)和磁盘相似信息。

rman是由接受到的SYS.DBMS_RCVMAN返回的信息,在通道间基于负载均衡分配工作,创建一系列SYS.DBMS_BACKUP_RESTORE的系统调用,以备份数据文件,控制文件(备份的是快照数据文件)和归档文件。一旦完成一个备份集SYS.DBMS_BACKUP_RESTORE会在控制文件的表中写入备份开始的时间,备份时间,备份大小和备份名等信息。

catproc.sql可以默认安装上面的两个包。


对于恢复目录也存在2个包:DBMS_RCVMAN和DBMS_RCVCAT

DBMS_RCVMAN包和上面的rman的DBMS_RCVMAN一样,DBMS_RCVCAT和上面的DBMS_BACKUP_RESTORE有一点不同就是信息写入信息的对象不同。DBMS_RCVCAT将信息写入目标库的控制文件,DBMS_BACKUP_RESTORE将信息写入恢复目录。


i/o丛属是在藏缓冲区写满后,将藏缓冲区内容写入磁盘时唤醒另外的dbwr从属来执行磁盘写操作。
只有os不支持异步i/o时,i/o从属才起作用。
dbwr_io_slaves可以配置磁盘i/o从属。
因为磁带不存在i/o异步,所以要为磁带配置i/o从属 backup_tape_io_slaves .

为了实现i/o从属功能rman必须利用一个共享内存区域,磁盘备份的内存缓冲区会被推入共享池,如果存在large池要推入large池。


以下例为例详细说明一下:

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\GAOYANG>rman

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Jan 14 08:43:43 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

RMAN> connect target /

connected to target database: RMAN (DBID=1562476476)

RMAN>backup database;


1 . C:\Documents and Settings\GAOYANG>rman
进入rman软件

2 . connect target /
通过oracle NET 连接目标数据库以sysdba连接目标数据库,rman连接目标数据库建立一个专用服务器进程,并创建两个服务进程主要进程和次要进程。

 

3 . backup database;
建立一个通道进程(应为现在使用的是默认设置),因为没有使用i/o从属,通道程序会在pga中分配。rman主要进程通过编译一个DBMS_RCVMAN调用,从目标库控制文件解析出数据库结构信息(确定目标库版本和控制文件信息(类型,当前序列号,创建时间))。
由于这个是数据库完全备份,所以rman会请求数据库的每一个数据文件的信息,判断是否离线,所在磁盘和数据文件工作方式。由于使用默认设置,只存在一个通道一个备份集。

编译文件列表后,rman就准备开始备份了。为了保持一致性rman会构建控制文件快照。如存在老控制文件快照,rman会重新写为新的快照控制文件。

rman创建对DBMS_BACKUP_RESTORE的调用,并根据数据文件数分配输入和输出缓冲区(分配内存)。分配了内存后,rman初始化备份片,备份片得到了一个唯一的默认名字。

当备份片初始化完成,通道进程开始数据库备份。rman会判断是否使用了spfile,如果用了spfile会自动备份spfile成为备份集的一部分。还要备份当前的控制文件(快照控制文件)。只要备份system表空间(数据文件1)就自动备份控制文件(打开控制文件自动备份)。

完成控文件制和spfile的备份,通道进程开始读取数据文件并将数据块推入输入缓冲区,之后从输入缓冲区到输出缓冲区的内存对内

存的写操作。在这个写操作期间,任满会判断块是否被初始化或数据块头信息是否为零。如果块用过(块头信息不为0),rman会在这个块上执行效验操作。如块头和脚注不匹配,rman会指出存在讹误的数据块并终止备份。如通过数据块被推入输出缓冲区。

一般输出缓冲区填满,就会把输出缓冲区的内容转存到备份文件位置。输出缓冲区里有来自各个数据文件的块杂乱无章,只有rman能在还原到正确位置。在备份片写入数据块时,可从rman的次要进程得到备份的状态信息,次要进程在目标数据库上检查远程过程调用信息。

一旦一个数据文件的所有数据块都被读入输入缓冲区并且确定了状态,rman就会通过将这个数据文件头写入备份片来结束该文件的备份操作。所有数据文件头都被写入备份片之后,rman会生成最后一个对DBMS_BACKUP_RESTORE的调用,这个调用想控制文件中写入备份信息,包含备份片名,启动备份操作时的scn,完备操作时间。

这就是备份的所有工作流程!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-615913/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-615913/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值