7

oracle dataguard的架构 -m6米乐安卓版下载

原创 杨露瑶 恩墨学院 2022-11-08
1774

table of contents

概述

primary database主库

处于open状态对外提供服务,用户在primary database 上进行操作,操作被记录在联机日志和归
档日志中。
需要设置 logging force 模式:
即使在归档模式下,也可能会有一些有nologging的操作不产生redo,这在dg下是不允许的,因此
必须启用数据库强制记录redo。

standby database备库

处于恢复状态,接收并应用主库传递过来的日志。

概述

dg的运行遵循一个很简单的原则:主库将redo日志传给备库,备库接受后验证并应用redo日志

  • dg只传输恢复数据库事务所需的redo日志,以便同步备库和对应的主库

    • redo由redo entries组成,一个redo entry由一组变更向量构成,每个向量描述数据库中的一个数据块的变更
    • redo entry : redo entry包含重新生成数据库更改所需的所有信息,例如雇员表中的薪水值
    • 变更向量:撤销段数据块的变化、撤销段的事务表的变化以及表的数据段块的变化
  • dg会在备库应用redo日志之前执行oracle验证,以免扩散主库中的受损的数据

  • 如果网络中断或者备库断电导致主备库的连接临时中断,dg会自动使用在主库上已经归档的redo日志重新同步备库

image.png

① 生成redo时,redo传输服务将redo日志从主库传到备库

② 应用服务验证redo日志并更新备库数据库文件

③ 独立于dg,dbwn进程更新数据库文件

④ 在网络中断或备库停运后,dg使用已在主库上归档的redo日志,自动重新同步备库

传输方式

redo transport service

redo transport service主要协调从主库到备库的redo传输过程

主要传输过程:

  1. 主库的lgwr进程将redo从sga的redo log buffer中写入到online redo log中
  2. 主库的lns(log network service)进程从sga的redo log buffer中读取数据,并交由oracle net服务传输到备库的rfs进程
  3. 备库的rfs(remote file server)进程接受lns传输的redo日志,然后将其写入standby redo log文件的顺序文件中

同步传输sync

同步传输(synchronous transport, sync)又称为“零数据损失”,使用同步传输可以使主库与备库随时处于同步状态,传输过程中主库要等到事务恢复所需的redo已被写入备库的磁盘里,才允许lgwr认可提交操作成功,具体的传输过程如下:

image.png

① 用户提交事务,事务再sga中创建一个redo entry。lgwr从redo log buffer中读取redo entry,写入online redo log,并等待lns的确认

② lns从redo log buffer中读取相同的redo entry,通过oracle net服务传给备库。备库上的rfs接受redo,然后将其写入备库的redo log中

③ 备库的rfs从磁盘接受到写完的消息,会传回一个确认消息给主库的lns,lns接着通知lgwr传输完成。lgwr向用户发送确认信息

同步传输的不足:

sync可以确保得到数据库提交确认的每个事务都得到保护,但这种方式会对主库的性能造成影响。主要的原因就是:lgwr只有等到数据已在备库受到保护的确认消息后,才能才是继续处理下一个事务

redo log的大小、可用的网络宽带、往返网络延迟(rtt)以及备库写入standby redo log的i/o性能都会对应用程序响应速度和数据库吞吐量。所以网络rtt随着距离的延长而增加,主库的性能也就会受到影响,实际上则会对主库与备库之间的距离形成限制

异步传输async

异步传输(asynchronous transport, async)与sync的最大的不同就在于lgwr不用等待来自lns的确认消息,无论主备库之间相距多远,都可以做到几乎不影响主库的性能

即使由于宽带有限,使得redo不能立即传给备库,lgwr也将继续确认提交操作成功完成。如果lns赶不上lgwr的提交进度,主库在lns将redo传给备库前就回收了redo log buffer,lns将自行转为从online redo log 读取和发送redo;当lgwr赶上进度后,将自行转回直接从redo log buffer中读取发送

① 用户提交事务,事务再sga中创建一个redo entry。lgwr从redo log buffer中读取redo entry,写入online redo log,并向用户发送确认信息

② lns从redo log buffer中读取相同的redo entry,通过oracle net服务传给备库。备库上的rfs接受redo,然后将其写入备库的redo log中

③ 主备库之间的日志传输出现异常等情况时,lns自动转为从online redo log读取和发送redo;恢复后自动转回从redo log buffer中读取和发送redo

异步传输的不足:

async最大的不足就在于增加了数据丢失风险。如果某个故障破坏了主库,而此时传输滞后尚未降低到0,那么传输滞后所包含的任何已提交事务都将丢失。所以在使用async时,提供足够打的网络宽带来处理峰值期间告诉产生的redo,可以最大限度地降低数据损失的风险

应用服务

dg提供了两种不同的方式在备库中应用redo:redo apply(物理备用)和sql apply(逻辑备用)

dg的宗旨是防止丢失数据,设计目标是让备库成为主库的同步副本。dg的设计纯粹的是为了实现对整个数据库的单向复制。因此,dg还嵌入了safeguard,以免在备库上对主库是上复制来的数据进行任何未授权的改动

dg的第二目标旨在高度分离主库和备库,以防主库上发生的问题影响到备库,进而危及数据的保护和可用性,这样做也可以防止备库上出现的问题影响到主库的可用性或性能

dg的第三目标是在主库出现故障时提供数据可用性和高可用性。**redo apply和sql apply都能将一个同步备库快速的转成主角色。**这样可以主库出现计划内或计划外中断后保护数据和恢复可用性

dg的最后一个目标是为备用系统、存储和软件投资提供高额回报,而不会影响“数据保护和可用性”这项重要使命。redo apply和sql apply都允许将仍担当备用角色的备库投入生产,同时不影响数据保护或实现恢复时间目标(recovery time objectives)的能力

redo apply

redo apply维护的备库是与主库逐块对应的精确的物理副本

当备库上的rfs进程收到从主库传来的redo,然后将其写入standby redo log时,redo apply使用戒指恢复将standby redo log中的redo entry写入内存,接着直接在备库上应用更改。

介质恢复包括一个mrp进程以及多个并行应用进程(pr0x)

mrp管理恢复会话,按照scn顺序合并来自多个实例的redo(在使用rac主实例的情形下)然后将redo解析到按应用进程划分的更改映射中。应用进程读取数据块,组装映射中的重做更改,然后将重做更改应用于数据块。redo apply将应用进程数量自动配置为比备库系统中的cpu数量少1。

oracle针对data gurad redo apply的基准测试表明,在承担oltp(联机事务处理)工作负荷时其速度高达47mb/s,在直接路径加载情形下速度高达112mb/s

redo apply可防止将主库上的物理损坏应用到备库,从而提供了卓越的保护能力。以sync或async模式直接从sga传输的redo与主站点上的组件故障造成的物理i/o损坏完全隔离

当备库使用redo apply应用redo时,将读取相应的数据块,并将scn(对应刚从主库中传过来的redo的scn,主库的scn)与redo log中的scn(保存在备库的redo log中的scn,备库的scn)进行比较,可能出现的比较结果如下:

  • 主备库相同:说明主备库数据同步正常
  • 主库的数据块scn小于备库的数据块scn:说明主库出现了写丢失,此时回报错ora-752,建议的响应操作是执行到物理备库的故障转移,然后重建主库
  • 主库的数据块scn大于备库的数据块scn:说明备库出现了写丢失,此时回发生内部错误ora-600 3020。如有可能,需要使用受影响的数据文件在主库的备份来修复备库;否则,必须重建备库。

sql apply

sql apply(逻辑备库)使用逻辑备用进程(lsp)将更改协调应用于备库。

dg 转换日志文件中的数据为sql语句在逻辑standby上执行sql语句,因为逻辑standby是通过sql语句来实现数据同步,所以在同步期间其必须保持打开状态。

保护模式

dg的三种保护模式

image.png

dg相关的进程

log transport service

在主节点上,日志传输服务主要使用如下几个进程:

  1. lgwr
    lgwr写联机重做日志
    在同步模式下,直接将redo信息直接传送到备库中的rfs进程,主库在继续进行处理前需要等待备库的确认在非同步情况下, 直接将日志信息传递到备库的rfs进程,但是不等待备库的确认信息主库进程可以继续进行处理。
  2. arch
    arch进程可以在归档的同时,传递日志流到备库的rfs进程,该进程还用于检测和解决备库的日志不连续问题(gap)。
  3. fal:(fetch archive log)
    fetch archive log只有物理备库才有该进程,fal进程提供了一个client/server的机制,用来解决检测在生产库产生的连续的归档日志,而在备库接受的归档日志不连续的问题,该进程只有在需要的时候才会启动,而工作完成后就关闭,因此在正常情况下,该进程无法看到,可以设置通过lgwr,arch进程去传递日志到备库,但是不能两个进程同时传送。
  4. lnsn(lgwr network server process)
    把日志通过网络发送给远程的目的地,每个远程目的地对应一个lns进程,多个lns进程能够并行工作。

log apply service

在备库节点上,日志应用进程主要使用如下的进程:

  1. rfs (remote file server)
    rfs进程主要用来接受从主库传送过来的日志信息
    对于物理备用数据库而言:
    可以直接将日志写进备用重做日志
    可以直接将日志信息写到归档日志
    为了使用备库重做日志,必须创建备用重做日志,一般和主库的联机日志大小一样, 组比主库多一组
  2. arch
    只对物理备库,arch进程归档备库重做日志,这些日志以后将被mrp进程应用到备库。
  3. mrp:(managed recovery process)
    该进程只针对物理备库,该进程应用归档日志到备库,如果我们使用sql语句启用该进程 alterdatabase recover managed standby database , 那么前台进程将会做恢复,如果加上 disconnect 语句,那么恢复进程将在后台进行,发出该语句的进程可以继续做其他的事情实现
最后修改时间:2022-11-09 15:30:55
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

网站地图