RMAN系列(一),RMAN体系结构概述(四)

2014-11-24 16:45:34 · 作者: · 浏览: 2
冲区。 数据文件中的每个数据块都会发生这种内存对内存的写操作(memor-to-memory write)。 如果数据块复合备份的标准并且内存对内存的写操作没有检测到讹误(corruption),则这些数据块会保留在输出缓冲区中直至输出缓冲区被填满。 一旦输出缓冲区被填满,输出缓冲区就会被推至备份位置(磁带或者磁盘)。
一旦所有文件已通过内存缓冲区过滤,就完成了备份片,同时RMAN 会在目标数据库的控制文件中写入备份片的完成时间和备份片的名称。
7.2 块级备份的优点
每个数据块从磁盘移入内存时都会发生内存对内存的写操作,在这个操作期间会检查数据块的讹误。讹误检查是RMAN的一个重要特性。 要注意的是: 执行代理复制操作时是不会使用数据库检查的。
访问数据块时可以选择 空值压缩(null compression),我们可以删除从来没有使用过的数据块(头为0),并在执行内存对内存的写操作时丢弃这些数据块,因此,我们只需要备份使用过的数据块,从而执行更有效的备份操作。块级备份从生成redo 的角度来说也提供了性能增益。如果是老式的热备份方法,运行热备份模式的表空间生成的redo log数量有时会呈指数增长,这会造成过多的redo 切换,检查点故障和生成大量的redo log。巨量的archive log会给日志归档位置上的空间管理带来一定困难。另一方面,由于在备份期间不要求保证数据块的一致性,所以RMAN不要求用热备份模式。RMAN 对数据块的访问允许RMAN 与写‘脏’缓冲区的DBWR进程协调,并且在将这个数据块读入内存以前,它可以等待直至数据块达到一致,因此数据块不会被转存为redo,并且备份中的数据块总是一致的。
当然,RMAN 也不要求用archive log 模式,但是如果是非归档模式,rman 不允许我们在数据库打开时备份一个数据文件,否则会报如下错误:ora-19602:cannot backup or copy active file in NOARCHIVELOG mode。
RMAN 可以使用块级备份提供进一步的恢复新选项:块介质恢复(block media recovery)。如果出现: ora-1578:block corruption detected, 就不需要恢复整个文件以及执行恢复操作,RMAN 可以简单的恢复坏数据块并执行恢复操作,也就是说数据文件中的其他数据在恢复期间仍然可用。
八.内存中的RMAN
RMAN 会在内存中构建一些缓冲区,然后通过这些缓冲区将数据块写入到备份中。 内存的利用与PGA(有时是SGA)的总体大小有关。 内存缓冲区分为输入缓冲区和输出缓冲区。 输入缓冲区(input buffer)填充从备份文件中读取的数据块;输出缓冲区(output buffer)则在执行内存对内存的写操作时填充需要备份的数据块,一旦输出缓冲区被填满,输出缓冲区的内容就会被写到备份位置。
8.1 输入内存缓冲区
备份数据库时,输入内存缓冲区的大小和数据取决于实际执行的备份命令,事实上它主要取决于在一个备份中多路服用(multiplexing)的文件数。 多路复用指的是在同一个备份片中备份某数据块的文件数。为了保持合理范围的内存分配,根据一起备份的文件数,分配内存缓冲大小需要应用下面的规则。
1) 如果备份集内的文件数小于或者等于4个,RMAN 会为每个文件分配4个大小为1MB的缓冲区。缓冲区总和小于或者等于16MB。
2) 如果备份集内文件数多余4个但少于等于8个,RMAN 会为每个文件分配4个大小为512KB的缓冲区。缓冲区总和确保少于或者等于16MB。
3) 如果多路复用的文件数多余8个,RMAN 会为每个文件分配4个大小为128KB的缓冲区。这就确保每个要备份的文件占用512KB的缓冲区内存。
一定要记住在每个通道基础上分配内存大小。因此,如果分配两个通道来备份具有32个数据文件的数据库,RMAN会根据负载均衡来分配两个通道,而不是为每个通道分配16个文件。 如果某些文件比另外的文件大的多,我们可能在一个备份集内备份8个文件,在另一个备份集内备份24个文件。 如果是这样,则用于第一个通道(8个文件)的缓冲区会分配16MB的输入缓冲区(8个文件,每个文件有4个缓冲区,每个缓冲区512Kb),用于第二个通道(24个数据文件)的缓冲区会分配12MB的输入缓冲区(24个文件,每个文件的缓冲区为512KB)。
可以使用如下的查询来监控备份运行时基于每个文件的缓冲区大小:
=========================================================
/* Formatted on 2010/6/9 9:37:52 (QP5 v5.115.810.9015) */
  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,
           close_time;
=========================================================

8.1.1 备份到磁盘时的输出内存缓冲区
除了输入缓冲区之外,RMAN还会根据输出设备分配输出缓冲区。如果备份到磁盘,则RMAN 将分配输出缓冲区以在数据溢出到备份片之前接收来自输入缓冲区的数据块。此时,每个通道有4个输出缓冲区,每个输出缓冲区大小为1MB,因此每个通道的内存区域通常为4MB。
8.1.2 备份到磁带时的输出内存缓冲区
备份到磁带时的内存分配是不同的,这是由于磁带设备的I/0速率较慢。在磁带上备份或从磁带上恢复时,RMAN会为每个通道进程分配4个输出缓冲区,每个缓冲区的大小为256KB,因此每个通道的内存区域通常为1MB。
8.2 用于还原的内存缓冲区
还原操作期间的内存分配与备份操作期间的内存分配稍有不同,这是因为他们的作用是相反的:备份操作是读取数据文件并写入备份位置,而还原操作则是读取备份位置并写入数据文件。 还原磁盘备份时,输入缓冲区的大小为1MB,同时RMAN 会为每个通道分配4个缓冲区。 还原磁带备份时,RMAN 会分配4个输入缓冲区,每个缓冲区的大小等于blksize参数的值(默认值为256kb)。用于还原的输出缓冲区通常为128kb,并且每个通道有4个输出缓冲区。
8.3 RMAN内存利用: PGA 和 SGA
在磁盘上的备份会使用PGA内存空间作为备份缓冲区,PGA 内存空间从用于通道进程的内存空间中分配。如果操作系统没有配置本地异步I/O,可以利用DBWR_IO_SLAVES参数使用I/O从属来填充内存中的输入缓冲区。如果设置DBWR_IO_SLAVES 参数为任意的非零值,RMAN 会自动分配4个I/O 从属协调输入缓冲区内存中的数据块加载。为了实现这一功能,RMAN 必须利用一个共享内存区域。因此,用于磁盘备份的内存区会被推入共享池,如果存在large池,则被推入