首页 > Linux操作系统 > Linux操作系统 > RMAN笔记——综合概述
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 被设置为非0 值(1~32 )时,RMAN 为每个通道启用4 个从属进程来辅助磁盘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
l 4
l n>8 ,每个文件分配4 个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 当输出设备为磁盘时,每个通道分配4 个1M 的输出缓冲区,总大小4M ;
u 当输出设备为磁带时,每个通道分配4 个256K 的缓冲区,总大小为1M 。
16. 还原操作中,输出缓冲区为128K ,每个通道4 个。当设备为磁盘时,输入缓冲区为每个通道4 个1M 的,设备为磁带时,输入缓冲区为4 个大小为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博客 ” ,链接:https://blog.itpub.net/24465008/viewspace-688018/ ,如需转载,请注明出处,否则将追究法律责任。