RMAN发出备份全库命令后,RMAN生成到目标数据库的bequeath连接,也就是说会检查ORACLA_SID变量中的实例名,并在该在实
例上产生一个服务器进程,然后作为sysdba登陆,然后会产生一个作为备份的通道,(在PGA或者是在SGA分配存储)。随后RMAN调用
SYS.DBMS_RCVMAN请求数据库结构信息,包括控制文件的信息(当前序列号,创建时间……)由于指定了备份全库,所以RMAN会请求
数据库中数据文件信息,并判断是否存在offline数据文件(包括所在的位置和工作方式)。
    RMAN开始备份,为了保持数据一致性RMAN必须构建控制文件快照,接下来RMAN调用DBMS _BACKUP_RESTORE数据包,该调用
可以创建备份片。RMAN拥有文件列表,所以它为数据文件读取操作分配内存缓冲区,分配缓冲区后RMAN初始化备份片。一旦初始化了备份片,
RMAN会判断是否使用了服务器参数文件,如果使用了则会做为备份的一部分,还要备份控制文件,之后才开始备份数据文件,并将其推至内存。
为了实现这一功能,通道进程在磁盘上执行预读取操作,并且将多个数据文件读入内存中,RMAN会判断数据块头信息是否仍然为零,如果数据块
没有被使用过,就不会发生到输出缓冲区的写操作,同时会丢弃这个数据块(这就RMAN为什么会只备份使用过的数据的原因,也是它的优点)
RMAN还会执行检查数据块有没有corruption操作。当检查通过了就被写入到输出缓冲区。一旦输出缓冲区填满了,就被推至备份文件位置。
    在备份数据块的时候,RMAN影子进程会得到备份状态信息。并将它传给V$session_longops视图。查询它能得到信息。
    当数据文件的所有数据块都被读入输入缓冲区并确定了状态之后RMAN就会通过将这个数据文件写入备份片来结束该文件的备份操作。所有
数据文件写入备份片之后,RMAN生成最后一个对SYS DBMS BACKUP RESTORE 数据包的调用,该调用在控制文件中写入备份信息(包括
备份片名,启动备份操作时的检查点的SCN和完成备份的时间)
    至此完成备份!