1、RMAN体系架构
1.1、服务器管理的恢复与RMAN实用程序:
RMAN目的时实现SMR(服务器管理恢复)的工具,依赖于oracel rdbms内部代码实现功能,是在出于减少用户操作针对越来越复杂的数据库脚本维护所提出。
RMAN属于oracle一个单独的应用程序,数据库即使处于nomount状态,rman包任然可以启用。
RMAN本质为命令解释程序,用于提交你输入的内容到数据库,具体完成备份主要是使用目标数据库本身的进程和程序
RMAN实用程序
如不使用RMAN需要在安装数据库是不选择Runtime clinet选项,RMAN主要包含如下内容 (以下使用$ORACLEHOME指代数据库缺省安装位置)
-
RMAN可执行代码,用于于客户端交互.
-
$ORACLEHOME/rdbms/admin/recover.bsq,用于针对rman发出的所有命令显示其调用的过程和相关信息.
作为rman的神经中枢
-
$ORACLEHOME/rdbms/admin/dbmsrman.bsq,用于加载到数据库打包的dbms_rcvman头文件,该文件主要用于管理元数据
-
$ORACLEHOME/rdbms/admin/dbmsbkrs.bsq,用于加载dbms_backup_restore中于rman相关的所有注释内容,用于了解内部原理
-
数据库存储过程dbms_backup_restore和dbms_rcvcat,属于被调用rman内部文件
RMAN的权限
c版本新增sysbackup权限,以该用户身份进行连接时,连接模式为sys但是会收到一些权限限制,限制内容不影响用户的使用。使用rman的基本要求,就是连接用户至少处于sysbackup权限以上,否则在使用过程中会报出各种错误。
1.2、RMAN网络拓扑结构:
与SQL*Plus 类似,如果要远程运行 RMAN,可使用TNS 服务连接到数据库。当通过TNS远程连接到诸如SYSDBA 的特权账户时,数据库必须拥有一个口令文件。如果使用的是 RMAN,情况同样如此。所有 RMAN 连接必须使用特权账户,因此要通过OracleTNS使用RMAN,数据库必须拥有口令文件。
#c版本由于插拔式数据库概念,需要指定连入得数据库名称
rman target rmanpdb #此处指定连入数据库pdb名称
rmantest #按照提示输入数据库创建时得密码口令
RMAN进行使用需要共享服务器,一般oracle进行安装后默认会进行创建,无需考虑
1.3、RMAN与控制文件的关系
数据库内部得控制文件中记录内容分为两类,循环重用记录与非循环重用记录,前者主要是归档日志记录等持续性产生的内容而后者主要是数据文件列表或关键日志文件,在控制文件空间无法扩展的情况下,数据库会优先进行循环重用记录的删除。
而rman日志备份记录就是属于循环重用控制文件的一种,所以需要时刻关注控制文件的空间使用情况,及时清空或备份控制文件。
如果控制文件没有任何rman备份文件记录,就算我们持有rman备份文件也不能执行恢复操作,否则很容易就会造成严重后果
control_file_record_keep_time#此参数指定控制文件不会致使记录过期。默认7,单位天
#快照控制文件
#针对执行rman备份操作时不能进行数据的检查点前移、日志切换和产生新日志文件这三个实际上等于锁定控制文件的特性,rman提出快照控制文件的方式来模拟锁定操作。
#快照控制文件实际为控制文件的副本记录,只能在rman执行备份和同步操作时被使用,这样更新的就是副本记录而而不是数据库实际使用的控制文件,从而达到短暂锁定,副本记录只有在rman执行前才会进行刷新。
configure snapshot controlfile name to '<location\file_name>' #修改快照文件位置和名称 默认名称 SNCF<oracle_sid>.ora
#快照文件在多个rman会话中执行备份作业的情况中会报出,下面内容错误,原因是这几个rman会话在执行备份操作时互相锁定了快照文件,后面需要执行语句进行接触
#RMAN-08512: waiting for snapshot controlfileenqueue
SELECT s.sid,username AS "User", program, module, action, logon _time "Logon",1.*
FROM vSsession s, v$enqueue lock 1
WHERE 1.sid =s.sid and 1.type = 'CF'AND 1.id1= 0 and 1.id2 = 2;
#rman同时支持手动重建控制文件
create control file
1.4、RMAN服务器进程
rman在使用时产生的客户端连接会同时在创建两个服务器进程,
-
主进程。主要面向sys模式下数据包调用进而进行备份和恢复操作。主进程还会协调信道进程工作。
-
次要进程(影子进程)。 轮询rman中所有长事务,内部记录下可以看到具体执行情况(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
-
信道进程,RMAN会对每个执行备份或还原操作的信道单独创建一个进程,同时将该进程视为服务器进程。信道在执行备份时,备份只能写入磁盘或者磁带,这就引出了IO从属进程
1.5、RMAN使用的sys数据包
RMAN服务器进程在协调信道通道工作时会访问下面两个数据包,这两个数据包包含了rman的所有功能。(rman的恢复目录)
下述数据包会在创建数据库时默认安装,安装位置在oracle内核中所以即使数据库处于nomount状态,rman服务依旧可用
dbms_rcvman数据包
此数据包用来访问控制文件中的表然后将信息回传给rman,准许rman构建反应整个数据库结构的备份与还原操作。
在rman实际构建备份与还原命令前,会自动执行负载均衡与性能增强用以降低备份时的性能损耗。
dbms_backup_restore数据包
此包包含访问控制文件所需要校验必须信息,这些信息会回传给rman服务器进程,之后rman会基于recover.bsq rman实用程序创建包含此数据包调用的plsql块。
所谓调用,就是用数据包内容进程备份数据文件、控制文件和归档重做文件,此数据包实际为rman真正核心
v$session_longops 视图可以跟踪该数据包的使用情况
1.6、RMAN与块级别备份数据
rman由于是写入到oracle内核中进行的,所以与数据级别同级可以进行逻辑结构-块级别方式备份数据
去除开rman备份方式,数据库的备份方式多种多样。其中以文件级别备份方式最为常见简单,采取文件级别备份数据库基本不进行完整性检查,所以当数据文件内块结构受损,基本可断定备份文件同样受损,属于无法纠正修复的错误。
RMAN由于集成到rdbms中,基本与数据库同级别所以可以访问到最低级别逻辑结构块和实际os block逻辑结构。所以即便损坏也可以还原块
#块备份流程
1、rman在共享内存段内创建内存缓冲区,一般在各个rman的pga区域执行
2、通道(信道)服务器开始读取数据文件,在上述缓冲区中填充数据块
3、2中每完成一个数据块,该数据块就会从输入缓冲区进入到输出缓冲区。进行内存对内存的写操作
4、3中写操作会同时对块进行检测损坏,当输出缓冲区被填满,该区域内容就会被推送至备份区域(该内容成为备份集),直至备份区域达到一个备份片大小
5、达到备份片大小后,rman就是写入控制文件备份片完成时间和名称
#块备份优点
#1、空块压缩
由于块的header是可以写入含有数据的信息的使用空间,所以当header内针对块大小的字段为0,rman在执行检查后就会丢弃空块。
rman的空块压缩不存在删除空数据块的问题,由于实际rman在执行时为了不打开数据库,所以他只能读取文件头和数据块头去获取空间信息,如果目前备份的数据有存在一个被截断的表(或者说存在发生行迁移或行连接)#待定,
空块也会直接备份过来。
空快压缩与备份期间备份数据总量无关,不会影响时间。
除非是那种备份到位置的数据流较快,这种确实能有效节省时间
#2、未使用的块压缩
说人话是未使用的块不会备份,空块也不备份。在10版本后,使用过的块如果是null块也不会备份,(行链接和行迁移的null块也不会进行备份)。
#3、二进制压缩
在11g中,可使用Oracle 高级压缩,它提供了三个不同级别的压缩方法,可让二进制压缩与你所在的环境相吻合。
三个级别分别为高级、中级和低级。
高级,用于限制带宽的环境中,在这种环境中限制对网络资源的访问权是优先的;
中级,用于对CPU利用的压缩率的合并;
低级,CPU的使用成为网络带宽或备份片总大小的限制因素。
#4、块级别备份-性能提升
采取老式热备份会生成大量的重做与归档日志(前提归档有开启),这回造成频繁的日志切换、故障的检查点对空间管理带来大量伤害。
rman在备份时会要求使用归档模式,因为实际上rman不允许我们在open状态下进行数据文件备份,所以需要开启归档日志用作一个保险功能
初次之外rman还有以下非常有用的恢复选项
#块介质恢复
简单处理恢复损坏数据块并进行执行
#多段备份
将大空间的数据文件分段,同时并行处理备份操作。这可以大大提高速度
1.7、RMAN与数据库内存
内存缓冲区概述
由1.6我们可知道,rman在实际使用时会在SGA或PGA构筑缓冲区,同时通过1这些缓冲区将数据文件写入到块。这种缓冲区有实际分为两种
-
输入缓冲区,填充从备份文件中读取的数据块
#输入内存缓冲区 备份数据库时,输入内存缓冲区大小和数目取决于实际执行的备份命令,或者说时一个备份中多路复用的文件数量。每个信道通道的缓冲区总和计算是单独独立的 1、备份集内文件数少于4,则rman为每个文件分配4个1mb缓冲区,缓冲区总和小于等于16mb 2、备份集内文件数多于4少于8,贼每个文件分配4个512kb,还是不超过16mb 3、多路复用文件数量大于8个,则每个文件最多128kb大小,保证每个要备份文件占用512缓冲区内存 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; #监控备份运行时基于每个控制文件产生的缓冲区大小
-
输出缓冲区,执行内存对内存的写操作中备份数据块
#1、被分到磁盘时的内存缓冲区 rman根据输出源分配缓冲区,磁盘情况,rman将用缓冲区接收数据溢出到备份片前的输入区的缓冲数据块 #2、备份到磁带时的内存缓冲区 由于磁带设备io缓慢, #3、用于还原的内存缓冲区 rman进行备份还原时,rman也会创建输出内存缓冲区,每个信道标准四个输出缓冲区(128)和输入缓冲区(256) #4、多节备份和内存 此处指的是单个大文件的多通道备份。按理还是每个信道四个输入四个输出
RMAN对SGA与PGA的利用
RMAN在实际使用时会同时使用SGA与PGA,使用pga内存空间充当备份缓冲区,sga的大池充当内存缓冲区的数据加载
站在PGA与SGA角度审视RMAN
pga内存空间用于作为备份缓冲区同时用于通道进程的内存分配,当rman有设置参数dbwr_IO_slaves时,oracle才会对其分配四个从属IO来协调内存缓冲区内的数据块加载。而数据块加载这一过程必须要用到一个共享内存加载区,所以处理数据加载这一过程的内存缓冲区,如果sga有大池优先推到大池,没有默认推送到sga共享池
一般建议有设置rman或后续有使用到rman的邮箱创建大池,大池专门用户为备份分配通道总数
show parameter backup_tape_io_slaves
#此参数关联rman是否会为每个通道创建一个从属进程区协助备份工作(对内存缓冲区的数据进行加载加快备份进度),默认为false,需要设置为true。
#涉及到内存分配推入sga区域,是协调备份工作的参数
show parameter dbwr_IO_slaves
#该参数用于设置填充内存中输入缓冲区的异步IO从属,默认为0则不会分配从属进程协调进行块数据加载。
#设置为非0值,oracle才会配合rman自动生成四个io从属进程协调数据块加载工作
1.8、RMAN与恢复目录
恢复目录存储的是与RMAN相关的备份元数据,可以视为RMAN备份恢复所需要的控制文件的关键副本信息。(恢复目录不是FRA,两个东西)
一般情况下使用rman前都会先创建恢复目录,恢复目录包含以下内容
- 数据包、表、索引、视图以及控制文件
#使用恢复目录,需要连接到目标库里尽心创建
#g版本有server_name直接连入主库即可
rman> connect target / #依照登录用户名密码,创建恢复目录
rman> connect catalog rman/password@rcat
#一个恢复目录允许存储多个目标库的信息,实现集中管理多个不同数据库的备份
#恢复目录一旦被链接,就可以进行手动同步回复目录,允许隐性或采取调用目标库中的控制文件内容刷新恢复目录中表内信息
rman恢复目录中的含有dbms_backup_restore与dbms_rcvman之前介绍过的两个数据包,
由于目录数据库(包含恢复目录的数据库)也是潜在的目标数据库,所以这种目录数据库实际上是含有两种模式的dbms_rcvman数据包,一个是oracle数据库安装由catproc.sql创建的,另外一则是目录数据库普通用户下创建的,有本质区别,所以实际不会产生错误
处于恢复目录的保护作用,恢复目录中表实际并不重要,oracle本身创建了一堆RC开头的视图,这些视图会自动从恢复目录中获取信息,所以实际操作的是这些RC视图。而所有直接针对恢复目录对象的dml语句都是非常危险的
1.9、RMAN辅助数据库与RMAN兼容性问题
辅助数据库
辅助数据库(auxiliary database)指在进行表空间时间点恢复(TSPITR)、复制操作(克降数据库)或使用 RMAN 备份创建备用数据库时,为了还原目标数据库的文件而临时生成的实例。
另外也将辅助数据库用于Oracle Database 12c中的新功能,如从备份提取单独的表。
执行下面任何操作都需要对目标库和辅助库进行连接(包含后续介绍的12c新功能)
- 表空间时间点恢复
- 复制操作(克降数据库)
- 用 RMAN 备份创建备用数据库
- 备份提取单独的表(12c新功能)
执行上述任何一种任务时,我们都要在 RMAN 中同时连接目标数据库和辅助数据库,这样就可以利用目标数据库控制文件中的备份信息在辅助数据库位置调整这些备份的还原。下面所示的是连接到目标数据库(本地)和辅助数据库(使用Oracle Net连接)的连接:
connect target /
connect auxiliary sys/pwd@auxl
#辅助库一般创建时默认就是sysdba
#执行该命令后,rman会同时生成到每个数据库的连接,要求访问目标库与辅助数据库的dbms_backup_restore与dbms_rcvman两个数据包。
兼容性问题
RMAN兼容性分为五部分,每个部分各组有版本号
- rman可执行版本
- 目标数据库
- 恢复目录模式
- 恢复目录数据库
- 辅助数据库
RMAN兼容性规则
- rman客户端版本必须与目标数据库版本、辅助数据库版本、恢复目录版本保持一致
- oracle任意版本都可以还原有oracle早期创建的备份集或映像副本
1.10、RMAN备份的实际流程(整合)
-
rman生成连接到目标数据库,同时在该实例上生成一个服务器连接此时对数据库内部而言我们会被识别为sys用户,同时跟随一个用于执行备份操作信道进程。
-
rman调用sys.dbms_rcvman数据包,获取数据库(主要为目标库)的结构信息与版本信息,收集目标库的控制信息与控制文件本身、类型、序号、创建时间用于后续使用其快照文件。
-
rman获取目标库所有数据文件信息,判断离线在线文件,用于将注意力集中到需要创建成备份集的文件列表中
-
上述步骤结束后,rman开始执行备份进程,使用2中获取信息构建快照控制文件(准确说是更新原本快照文件,没有才会构建)。
-
之后rman会依照读取数据文件数量和通道数量对其分配内存缓冲区,默认一个文件四个输出缓冲四个输入缓冲,总和不会超过16mb
-
rman使用dbms_backup_restore数据包调用创建备份片,存放在 o r a c l e h o m e / d b s 或者 oracle_home/dbs或者 oraclehome/dbs或者oracle_home/database。一边进行初始化备份片、一边对输入到备份片的数据块增量分配空间一次50mb。
进行到此处时,rman已经不会对可使用空间进行检查,如果不够会自动报错,结束初始化进行、
6过充中除了对数据块的处理,同时还会对服务器参数文件spfile对文件备份。
-
当6中持续性插入块直至输出缓冲区被填满后,输出缓冲区的内容就会转存到备份文件位置处。
通道上进行的这一步操作称为预读,在这个操作过程中,一般情况下多个数据块会一起写入到内存,紧随其后会进行输入缓冲区到输出缓冲区的写操作—判断块头信息是否完整或者为0或者损坏,0的会被抛弃损坏的则会终止后续操作
-
rman获取到所有备份片构成一个备份集,产生多个转储文件。rman结束后生成的转储文件实际为无序状态,也叫储存桶buket。
只有在执行rman还原时,这些无序数据才会被RMAN影子进程恢复到原来的正确位置(影子进程通过轮询方式检查状态信息)文章来源:https://www.toymoban.com/news/detail-474702.html
#rman影子进程回怼目标库进行远程调用,将信息传递给v$session_longops视图中,用于检查每个信道(通道)完成的百分比
SELECT SID,SERIAL,CONTEXT,SOFAR,TOTALWORK,ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE" FROM V$SSESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%' and opname not like '%aggregate%' and totalwork !=0 and sofar <> totalwork;
下一章:DBA之路–RMAN备份与恢复02_RMAN配置、备份和恢复操作基础文章来源地址https://www.toymoban.com/news/detail-474702.html
到了这里,关于DBA之路--RMAN备份与恢复01_RMAN体系架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!