ITPub博客

首页 > Linux操作系统 > Linux操作系统 > RMAN笔记——综合概述

RMAN笔记——综合概述

原创 Linux操作系统 作者:红叶DBA 时间:2011-02-27 09:57:51 0 删除 编辑

RMAN 综合概述

1.          RMAN 的核心是命令解释程序,接受用户输入的命令,并将这些命令转化为远程数据库上执行的远程过程调用(remote procedure call RPC )。

2.        RMAN 只做少量工作,是Database Utilities (一组命令行形式的程序)的一部分。

3.        RMAN 实用程序分为两部分:可执行文件、recover.bsq 文件,recover.bsq 实际上是库文件,可执行文件从recover.bsq 文件中吸取代码,来创建在目标数据库中执行的PL/SQL 调用,recover.bsq 是整个操作的中枢,这两个文件在逻辑上构成了RMAN 的客户端,他们的版本必须相同,否则不能正常工作。

4.        RMAN 需要访问目标数据库中sys 模式的各种数据包,所以要以sysdba 登录。

5.        RMAN 在整个备份期间都要使用到控制文件,为了整个备份时间间隔内的控制文件的一致性,Oracle 实用快照控制文件来解决这个问题,快照控制文件(snapshot controlfile )默认保存在dbs database 目录中,snapcf+SID.f 文件。快照文件在同一时间只能被一个进程锁定,如果在两个RMAN 工作中,就有可能出现RMAN-08512 waiting for snapshot controlfile enqueue 错误,使用如下脚本可以查询:

6.        Select s.sid,username,program,module,action,logon_time,l.* from v$session s,v$enqueue_lock l where l.sid=s.sid and l.type= CF and l.id1=0 and l.id2=2;

7.        I/O 从属,此时内存缓冲区在SGA 中,当dbwr_io_slaves 被设置为非值(1~32 )时,RMAN 为每个通道启用个从属进程来辅助磁盘IO 。当backup_tape_io_slaves=true 时,RMAN 也会为磁盘读写分配从属进程。

8.        RMAN 主要访问两个sys 包:dbms_rcvman dbms_backup_restore, 这两个包包含了RMAN 的所有功能,这两个包在catproc.sql 脚本中创建。

9.        Dbms_rcvman 包用来收集控制文件中的信息,并返回给RMAN 。然后RMAN 在通道间执行基于负载均衡的算法来分配工作,然后创建一系列的dbms_backup_restore 数据包的调用。每完成一个备份集,dbms_backup_restore 就会在控制文件中保存相关的备份信息,包括备份名,大小,开始时间,备份时间等。

10.     数据块备份的过程:RMAN PGA (有时在SGA ,如果使用了I/O 从属进程)中创建一系列的缓冲区,读取数据文件时,填充这些缓冲区,缓冲区被填满时,数据传到输出缓冲区,如果符合备份标准且无错误,就会保留在输出缓冲区,一旦输出缓冲区被填满,则写入到备份文件。当所有的文件都经过了这种过滤的时候,就完成了数据块的备份。

11.        关于空值压缩的误解:

1)       要删除空数据块:RMAN 只有从文件头和数据块头信息中推断数据块的内容,而不需要空间管理信息,因为空间管理信息在打开数据库时有效,而RMAN 不依赖数据库的打开与否。因此,如果截断一张表,那么所有存储过信息的空数据块都会备份,因为Oracle 只知道这个块被初始化过了,而不知道是否为空。

2)    备份期间的增量备份可以节约时间:RMAN 任然需要将每个数据块读入内存,如果设备(磁盘或磁带)很快,那么删除内存中数据的速度不见得会节约多少时间。

12.     10g 中,RMAN 使用空白压缩,提供了备份块自身的压缩,另外,块更改跟踪文件可以在备份期间跳过一些块,不将他们读入内存,从而节约备份时间。

13.     输入内存缓冲区:备份集内文件数目n

l  0,每个文件分配1M 缓冲区,总大小<=16M 

l  4,每个文件分配512K 缓冲区,总大小<=16K 

l  n>8 ,每个文件分配128K 缓冲区。

14.     可以从v$backup_async_io 视图中看出每个文件的缓冲区大小:

Select set_count,device_type,type,filename,buffer_size,buffer_count,open_time,close_time from v$backup_async_io;

15.     输出内存缓冲区:

u  当输出设备为磁盘时,每个通道分配1M 的输出缓冲区,总大小4M 

u  当输出设备为磁带时,每个通道分配256K 的缓冲区,总大小为1M 

16.     还原操作中,输出缓冲区为128K ,每个通道个。当设备为磁盘时,输入缓冲区为每个通道1M 的,设备为磁带时,输入缓冲区为个大小为blksize (通常为256K )。

17.     RMAN 50M 为增量分配磁盘空间,在第一个50M 填满以后,才开始分配第二个50M ,直到最后一个数据块备份完,然后释放最后一个备份块中的剩余空间。RMAN 在分配时不会检查是否有剩余空间可用,因为空值压缩和空白压缩都能减小所需要的空间,这是不可预测的大小,RMAN 在磁盘可用空间用完时会失败。

18.     可以从v$session_longops 视图中查看RMAN 备份的最新进程:

Select sid,serial#,context,sofar,totalwork,round(sofar/totalwork*100,2) %_complete from v$session_longops where opname like  RMAN%  and opname not like %aggregate%  and totalwork!=0 and sofar!=totalwork;

19.     如果想要进一步了解备份期间的RMAN 内部工作流程,可以打开RMAN 的调试选项(输出项目非常详细,可能会影响到备份的性能):

        rman target / debug trace=/xxx/rman.out

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

请登录后发表评论 登录
全部评论

注册时间:2010-08-19

  • 博文量
    54
  • 访问量
    70882