rman体系结构

rman用户最关心的是共享池和大池。rman使用一些oracle pl/sql程序包来执行操作,这些程序包与其他ORACLE PL/SQL程序包相同,必须加载到共享池。
rman进程
rman生产一个到目标数据库的客户端连接,并创建两个服务器进程。
主要进程生产对sysmos中数据包的调用,从而执行备份和恢复操作,该进程会在备份和还原期间协调通道进程的工作。

另一个进程轮询rman中的所有长事物,并在内部记录信息.在V$SESSION_LONGOPS视图中可以看到下面的轮询结果:
select sid,serial#,context,sofar,totalwork,round(spfar/totalwork*100,2) "%_complete" from v$session_longps where opname like '%aggregate' and totalwork!=0 and sofar <> tatalwork
还可以在v$session视图中查看这些进程。
select sid,saddr,paddr,program,client_info from v$session where sid=16;
在动态性能视图v$process中,连接到数据库实例的每个操作系统进程各占一行。
v$session显示联接到数据库的每会话的附加信息。
rman使用字符串rman和通道名称填充v$seesion.client_info列。记住,每个rman通道对应于一个服务器进程,因此在v$session中,每个通道将占一行。
select sid,spid,client_info from v$process p join v$session s on (p.addr=s.paddr) where client_info like '%rman%';


动态性能视图v$session_longops也并非专门用于rman。oracle会在v$session_longops中记录任何运行时间超过6秒(绝对时间)的操作,包括rman备份和恢复操作。统计信息收集以及长查询。
rman在v$session_longops中填充两种不同类型的行:详细信息行,和汇总行。
详细信息行显示单个rman作业步骤的信息。n
汇总行适用於单个rman命令中应用的所有文件。
只有将初始化参数statistics_level设置为typical或all时,v$session_longops视图才会线索有关长时间运行的rman作业的信息。statistics_level的默认值是typical。
select sid,serial#,opname,sofar,totalwork from v$session_longops where opname like 'RMAN%' and sofar<>totalwork;






在备份或还原操作期间还会为分配的每个信道单独创建一个进程,rman将信道视为目标数据库上的服务进程,该进程在备份期间协调读取数据文件和写入指定位置的操作,在还原期间则协调读取备份位置和在数据文件位置写入数据块的材质。

rman使用的sys数据包
rman服务器进程在协调信道的工作时要访问两个sys数据包:DBMS_RCVMAN数据包和DBMS_BACKUP_RESTORE数据包
1.DBMS_RCVMAN数据包用来访问控制文件中的表并将此信息传递给rman,使rman可以构建准确反映数据库结构的备份与还原操作。DBMS_RCVMAN数据包负责在执行任何操作前设置TIME运算符和校验数据文件头中的检查信息,并检查文件位置和大小,以及有关节点相似性和磁盘相似性的其他信息。这种信息会影响rman的性能,并且rman在构建实际备份还原命令之前自动执行负载均衡算法和性能增强。
2.DBMS_BACKUP_RESTORE数据包访问控制文件并校验所有必需的信息,这些必需的信息被传递回rman服务器进程,rman服务器进程随后会基于recover.bsq文件中代码创建一些PL/SQL块,这些块含有对DBMS_BACKUP_RESTORE数据包的调用。实际上rman中是由DBMS_BACKUP_RESTORE数据包来创建系统调用以备份数据文件,控制文件和归档的重做日志文件,rman接收从dbms_rcvman数据包返回的信息,并在信道间基于负载均衡算法分配工作,然后创建一系列DBMS_BACKUP_RESTORE数据包的调用。

rman数据包还要一个重要的特性:他们被硬编码到oracle软件的库文件中,因此即使没有打开数据库也能调用这些数据包。
rman可以在数据库实例处于未加载模式或加载模式时编写对DBMS_BACKUP_RESTORE数据的调用。这是一个关键要素,其原因显而易见:需要在没有打开数据库时也能够备份和还原这个数据库。

内存中的rman
rman会在内存中构建一些缓冲区。然后通过这些缓冲区将数据块写入备份中。内存的利用与PGA(有时时SGA)的总体大小有关。
内存缓冲区分为输入缓冲区和输出缓冲区。
输入缓冲区:填充从备份文件中读取的数据块。
输出缓冲区:则在执行内存对内存的写操作时填充需要备份的数据块,一旦输出缓冲区被填满,输出缓冲区的内容就会被写到备份位置。

c$>rman
rman>connect target /
rman>backup database;

rman生产连接到目标数据库的连接,这就是说oracle会检查oracle_sid的实例名,并在该实例上产生一个
服务器进程,然后作为sys用户登陆。这样,我们被连接为内部数据库用户sys,rman会立即产生一个用于备份的信道进程。
随后,rman通过编译一个对sysy.dbms_rcvman的调用。(从目标数据库请求数据库的结构信息,先确定目标数据库的版本,rman从控制控制文件中收集版本信息和控制文件本身的信息,控制文件本身的信息包括控制文件类型,控制文件中的当前序列号,以及控制文件的创建时间)

由于指定了完整的备份,所以rman会请求数据库中每个数据文件的信息。并且判断是否存在离线数据文件。这些数据文件信息中包括每个数据文件所在磁盘和工作方式的信息。
 编译了文件列表后,rman就准备开始执行备份过程,为保证一致性,rman必须构建快照控制
文件。如果存在快照控制文件,则rman会将这个文件重写为新的快照控制文件。

接着,rman创建对DBMS_BACKUP_RESTORE数据包的调用。该调用可以创建备份片。(备份片在默认位置构建,linux默认位置ORACLE_HOME/dbs)

rman拥有文件列表,因此他可以为磁盘读取操作分配内存缓冲区。

分配了内存后,rman初始化备份片,备份片会得到一个唯一的默认名。随后,rman开始备份。

一旦初始了备份片,信道进程就可以开始数据库备份进程。rman会判断是否使用了服务器参数文件。如果使用了,rman会自动将该文件备份为备份集的一部分。rman还要在备份集中备份当前控制文件。只有备份了system表空间,就会自动备份当前控制文件。

完成服务器参数和控制文件的备份后,就开始读取数据文件并将数据块推入内存。
为了实现这一功能,信道进程在磁盘上执行预读操作,并且将多个数据块同时推入内存。随后发生的是从输入缓冲区到输出缓冲区内存对内存的写操作。
(在这期间,rman会判断数据块是否被初始化,或者数据块头信息是否仍然为零,如果数据块未被使用过,就不会发生输出缓冲区写操作,同时会丢弃这个数据块。如果数据块使用过,rman就会在这个数据块上执行检验和checksum操作。如果数据块头和脚本不匹配,则rman会指出在损坏的数据块并中止备份,如果数据块初始化并通过检验和操作,这个数据块就会被写入输出缓冲区)

一旦缓冲区被填满,就会将输出缓冲区中的内容转储到备份文件位置,由于rman缓冲区填充来自所有数据文件的数据块,
所以在转储文件中的数据块是杂乱无序的,转储文件只是一个存储段,只有rman能够在还原时将这些数据块还原为正确的位置,在备份片中写入数据块时。rman会生成最后一个对DBMS_BACKUP_RESTORE数据包的调用。该调用在控制文件中写入备份信息,这些信息包括备份片名,自动备份操作时的检查点的scn和完成备份操作的时间。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章