RMAN使用SYS数据包
RMAN服务器进程在协调通道的工作时要访问两个SYS数据包:DBMS_RCVMAN和DBMS_BACKUP_RESTORE数据包,这两个包包含了数据库中RMAN的所有功能
SYS.DBMS_RCVMAN包
DBMS_RCVMAN包用来访问控制文件中的表并将些信息传递给RMAN,使RMAN可以构建准确反映数据库结构的备份与还原操作。DBMS_RCVMAN包负责在执行任何操作前设置TIME运算符和校验数据文件头的检查点信息,并检查文件位置和大小,以及有关节点相似性(RAC环境中)和磁盘相似性的其它信息。
SYS. DBMS_BACKUP_RESTORE
DBMS_RCVMAN包访问控制文件并校验所有必需的信息。这些必需的信息被传递回RMAN服务器进程,RMAN服务器进程随后会基于recover.bsq文件中的代码创建一些PL/SQL块。这些PL/SQL块含有对DBMS_BACKUP_RESTORE包的调用。
在V$SESSION_LONGOPS视图中可以跟踪的是DBMS_BACKUP_RESTORE包的工作。它执行备份和还原操作,不可以以受限方式访问控制文件。备份完成后,DBMS_BACKUP_RESTORE包就会在控制文件的表中写入备份开始时间、备份时间、大小和备份名的信息。
内核中的RMAN数据包
创建数据库时,运行catproc.sql脚本可以默认安装上述两个数据包。数据库创建期间无法跳过这一步,因此在8.0.3版本后的Oracle库都存在这些数据包。这些数据包被硬编码到Oracle软件中,即使没有打开数据库也可以调用这些数据包。RMAN可以在数据库实例未加载模式或加载模式时编写对DBMS_BACKUP_RESTORE包的调用。
数据块备份
块级别的访问是RMAN区别其它备份工具的地方。基于通道数和同时备份的文件数,RMAN在Oracle共享内存段中创建一些内存缓冲区。通道服务器进程随后开始读取数据文件,并在RMAN缓冲区中填充这些数据块。填满后输入缓冲区被推入输出缓冲区。数据文件中的每个数据块都会发生这种内存对内存的写操作(memory-to-memory write)。输出缓冲区中的内容被推到备份位置(磁盘或是磁带)。
访问数据块时可以选择空值压缩(null compression)可以删除从来没有使用过的数据块(头为0)。并在内存对内存操作时丢弃这些块。从而执行有效的备份操作。
内存中的RMAN
备份数据库时,输入内存缓冲区的大小和数目取决于实际执行的备份命令,事实上它主要取决于在一个备份中多路复用(Multiplexing)的文件数。多路复用指在同一个备份片中备份数据块的文件数。为保持合理内存分配,分配时采用以下规则
Ø 如果备份集内的文件数小于或等于4个,为每个文件分配4个大小为1MB的缓冲区。缓冲区总大和小于或等于16MB。
Ø 如果备份集内的文件数多于4个但小于或等于8个,为每个文件分配4个大小为512KB的缓冲区。
Ø 如果备份集内的文件数多于4个,为每个文件分配4个大小为128KB的缓冲区。确保每个要备份的文件占用512KB的缓冲区内存。
可以使用如下查询来监控备份运行时基于每个文件的缓冲区大小
Select set_count,device_type,type,filename,buffer_size,buffer_count,open_time,close_time from v$backup_async_io order by set_count,type,open_time;
DBMS_RCVCAT包用于将备份完成信息写入Catalog Batabase。为了保护恢复目录,Oracle创建了一系列前缀为RC_的视图。RC_是库控制文件中相应V$视图的不同实现。
数据库操作步骤说明
C$ >rman
Rman>connect target /
Rman>backup database;
RMAN生成到目标数据库的bequeath连接,它会检查Oracle_SID变量中的实例名,并在该实例上产生一个服务器进程,然后作为SYSDBA用户登录。RMAN会立即产生一个用于执行备份操作的通道进程。在这个示例中,只会分配一个通道。没有使用I/O从属,因此通道进程会在PGA中分配内存。
随后,通过编译一个SYS.DBMS_RCVMAN调用,从目标数据库控制文件中请求数据库结构信息,先是确定目标数据库版本。RMAN从控制文件中收集版本信息和控制文件本身信息,控制文件本身信息包括控制文件类型、当前序列号及创建时间。
由于指定了完全备份,RMAN会请求数据库中每个数据文件信息,并判断是否存在离线的数据文件。这些数据文件信息中包括数据文件所在磁盘和工作方式的信息。编译包含在备份集内的文件列表。
RMAN准备开始备份进程。为保证一致性,必须构建快照控制文件。如果存在快照,RMAN会将这个文件重写为新的快照控制文件。对DBMS_BACKUP_RESTORE数据包调用,该调用可以创建备份片。备份片被构建在默认的文件位置中oracle_home/dbs。RMAN拥有文件列表,所以它可以为磁盘读取操作分配内存缓冲区。
分配内存后,初始化备份片。随后,开始备份。在数据库版本9.2、10.1和10.2中RMAN以50MB为单位分配磁盘空间,直至最后一个数据块转储到备份片。当备份完成时,释放最后一个50MB数据块中的剩余空间。RMAN不再检查是否存在用于成功备份操作的足够空间。这是由于空值压缩和10G空白压缩可极大地减少备份中的数据文件大小。相反,RMAN将运行它的备份直到空间用完后就失败。
一旦初始化了备份片,通道进程就开始数据库备份。RMAN会判断是否使用了SPFILE,如果使用了,自动被备份为备份集的一部分。只要备份SYSTEM表空间,就会自动备份当前控制文件。
完成服务器参数文件和控制文件备份后,就开始读取数据文件将数据块推入内存。为实现这一功能,通道进程在磁盘上执行预读(read-ahead)操作,并将多个数据块同时推入内存。随后是从输入缓冲区到输出缓冲区的内存间的写操作。期间会判断数据块是否被初始化,或者数据块头信息是否为零。未使用过就不会输出到输出缓冲区,同时丢弃这个块。如果使用过,在数据块上执行检验和(checksum)操作。如果数据块的头和脚注不匹配,RMAN会指出存在讹误的操作并中止备份。否则被写入输出缓冲区。
一旦输出缓冲区被填满,就会将输出缓冲区的内容转储到备份文件位置。由于缓冲区填充来自所有的数据文件的数据块,所以在转储文件中的数据是无序的。只有RMAN能够在还原时将这些数据块还原为正确的位置。
如果要进一步了解备份期间的流程,可以打开备份操作的调试选项,从而得到一个完整的进程列表: RMAN target / debug trace=/01/oradata/ramnbkup.out
这个列表非常详细,并可能妨碍备份操作的性能。最好只在测试时使用这个列表来调试。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22793690/viewspace-618282/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22793690/viewspace-618282/