RMAN备份
一、RMAN备份原理
1、简介
RMAN备份是ORACLE数据库自带的在线热备工具,使用RMAN不需要安装,可会数据块进行压缩和检测,可备份数据块的变化量,是数据块级别的备份解决方案。
缺点:若数据库中出现坏块,RMAN会自动检测坏块并跳过坏块,造成一定数据的丢失,建议,采用expdp/impdp、ACTIVE DATAGUARD、ORACLE GOLDENGATE等在线逻辑迁移数据方案。
RMAN备份分为catalog和nocatalog两种:
nocatalog:直接进行备份,将备份信息直接记录到控制文件,会导致控制文件持续增长,若控制文件丢失,将导致备份不能恢复,控制文件存在风险,
可通过修改参数文件中的control_file__record_keep_time参数来确定控制文件数据过期时间,缺省值是7days。
恢复:nocatalog恢复,恢复数据库需要控制文件的记录信息,必须要现将数据库启动到mount阶段才能回数据库进行恢复,若控制文件损坏,需要先进行恢复。
-
建立oracle运行环境(包括init或sp文件)
-
文件方式恢复controlfile到init文件指定的位置
-
startup mount
-
rman,恢复datafile
-
alter database open resetlogs
catalog:需要创建单独的备份数据库、恢复目录和备份表空间,是将备份信息直接记录到备份数据库中,
-
建立oracle运行环境(包括init或sp文件)
-
rman ,restore controfile
-
alter database mount
-
rman, restore datafile
-
alter database open resetlogs
2、备份原理
备份进程:主进程 影子进程 通道进程
rman是集成在oracle数据库内部的免安装工具,是采用调用sys.DBMS_RCVMAN和sys.DBMS_BACKUP_RESTORE两个数据包来完成工作,由于这两个数据表不需要oracle数据库的支撑,所以数据库在nomount状态就可以启动RMAN。
RMAN备份原理:
当rman target /登录,首先会检测ORACLE_SID变量中的实例名,并在实例中生成一个RMAN服务器进程(通道进程)和主进程,影子进程。该通道进程会在pga(有时在sga)中分配内存,在内存中每个通道进程都会构建缓冲区(输入,输出),先将备份文件读入输入缓冲区,一个输入缓冲区写满会使用另一个输入缓冲区,然后RMAN确认备份的数据块并进行校验之后推入输出缓冲区,当输出缓冲区被填满,会将来自不同数据文件的数据混在一起写入磁盘或磁带。为通道进程工作提供内存;
然后RMAN主进程调动sys.DBMS_RCVMAN数据包用来访问控制文件,并在任何操作前设置TIME运算符和校验数据文件头的检查点信息,将此类信息返回给RMAN主进程;并且RMAN 在构建实际备份/还原命令之前自动执行负载均衡(load-balancing)算法和性能增强(performance-enhancing)算法。
然后RMAN主进程通过sys.DBMS_BACKUP_RESTORE数据包校验sys.DBMS_RCVMAN数据包传回来的控制文件和必须的一些信息,并将这些信息传回RMAN服务器进程(通道进程);
RMAN服务器进程(通道进程)会基于recover.sql文件的代码创建一个PL/SQL块来调用sys.DBMS_BACKUP_RESTORE数据包(备份的动力)备份数据文件,影子进程在通道之间进行轮询扫描并将信息返回给RMAN服务器进程(通道进程),RMAN主进程并在通道之间基于负载均衡算法分配进程工作。
RMAN进程内存原理:
RMAN登录产生通道进程,通道进程在pga中(有时在sga中)分配内存,在内存中每个通道进程都会构建缓冲区(输入,输出),先将备份文件读入输入缓冲区,一个输入缓冲区写满会使用另一个输入缓冲区,然后RMAN确认备份的数据块并进行校验之后推入输出缓冲区,当输出缓冲区被填满,会将来自不同数据文件的数据混在一起写入磁盘或磁带。
磁盘备份会使用PGA作为备份缓冲区用于通道进程内存分配。若OS没配置本地异步I/O,则可利用DBWR_IO_SLAVES参数使用I/O从属来填充内存的输入缓冲。
若DBWR_IO_SLAVES参数设置为非零,则RMAN会自动分配4个I/O从属来协调输入缓冲区数据加载。此时用于磁盘备份的内存缓冲区就会被退出共享池,若存在大池也会被推入大池。
如果没有使用磁带从属,则会在PGA中分配用于磁带输出缓冲区的内存。
为了保持合理范围的内存分配,根据一起备份的文件数,分配内存缓冲大小需要