OracleDG原理

一、DataGuard架构介绍

1、基本介绍

在DG环境中,至少会有两个数据库,一个数据库处于Open状态,对外提供服务,这个数据库叫做primary Database。第二个数据库处于恢复状态,叫做Standby Database。

运行时Primay Database对外提供服务,用户在Primary Database上进行操作,操作被记录在日志文件中。这些日志通过网络传送到Standby Database。这些日志会在Standby Database上重演,从而实现了数据的同步。

Oracle 的DG对这个过程进一步的优化设计,使得日志的传送、恢复工作更加自动化、智能化。

如果是可预见因素需要关闭Primay Database,例如软硬件的升级,可以把Standby Database切换为Primary Database继续对外提供服务,并且数据不会丢失。
如果是因为异常原因导致Primary Database不可用,也可以把Standby Database强制切换为Primary Database继续对外提供服务,这时数据损失程度和配置的数据保护级别有关系。

上面一大段话可以总结为以下三点:
1:primary Database上产生日志
2:primary Database将日志传给Standby Database
3:Standby Database根据接受到的日志进行重演
下面附上一张DG架构图,咱们就能更清晰的了解内部机制。

在这里插入图片描述

图中的data guard其实分为两种结构:

  • 通过LGWR发送日志和通过ARCH发送日志。
    • 通过ARCH则不必要非常好的网络资源,但数据实时性也大打折扣。
  • 通过LGWR也就意味着具有更高的实时性,数据丢失率较低。但也非常依赖网络资源,同样也受数据保护模式的影响。

2、DG相关的后台进程

ARCH (archiver) :心跳检测,探测对方
LNS (log-write network-server) :log传送
RFS (remote file server) :远程接数据
FAL (Fetch Archive Log ) :解决Redo的间隔Gap
MRP (Managed Recovery Process) :日志被应用,恢复的过程
LSP (Logical Standby Process):逻辑数据库的后台进程,SQL转换

FAL介绍:

FAL(Fetch Archive Log)是 Oracle Data Guard 中的一个关键特性,它的作用是在备用数据库(Standby Database)上自动检测并解决归档日志的间隔(Gap)问题。这个过程确保了备用数据库能够持续与主数据库(Primary Database)保持同步,即使在归档日志传输过程中出现丢失或延迟的情况。

FAL 工作原理:

  1. 归档裂缝(Archive Gap):当主数据库上的事务日志(Redo Logs)由于某些原因未能及时传输到备用数据库时,就会在备用数据库上形成归档裂缝。这可能是由于网络问题、磁盘空间不足或其他原因导致的。
  2. 裂缝检测:备用数据库会定期检测归档日志的完整性,一旦发现裂缝,即日志序列中断,就会触发 FAL 进程。
  3. 日志请求:作为 FAL_CLIENT 的备用数据库会向配置为 FAL_SERVER 的主数据库或其他备用数据库发送请求,以获取缺失的归档日志。
  4. 日志传输:FAL_SERVER 接收到请求后,会从其归档日志存储中检索出缺失的日志,并通过网络发送给 FAL_CLIENT。
  5. 日志应用:备用数据库上的 FAL_CLIENT 接收到缺失的归档日志后,会将其传输给负责日志应用的进程(如 RFS - Redo File Services),这些进程将日志写入备用数据库的归档日志或在线重做日志中。
  6. 数据同步:随后,备用数据库上的 MRP(Managed Recovery Process)或 LSP(Log Writer Process)进程会应用这些日志,以确保备用数据库的数据与主数据库保持一致。

FAL 的重要性:

数据一致性:通过自动解决归档裂缝,FAL 确保了备用数据库的数据与主数据库保持同步,这对于数据保护和灾难恢复至关重要。
高可用性:FAL 减少了人为干预的需求,提高了系统的自动化程度,从而增强了整个系统的可用性。
减少停机时间:在主数据库发生故障时,由于备用数据库始终保持最新状态,可以快速切换到备用数据库,最小化业务中断时间。

3、功能划分

相关服务按功能区分:

  • 日志发送 (redo send):
    Primary Database 运行过程中,会源源不断地产生Redo 日志,这些日志需要发送到Standy Database。 这个发送动作可以由Primary Database 的LGWR 或者ARCH进程完成, 不同的归档目的地可以使用不同的方法,但是对于一个目的地,只能选用一种方法。 选择哪个进程对数据保护能力和系统可用性有很大区别。
  • 日志接收 (redo recieve):
    Standby Database 的RFS(Remote File Server)进程接收到日志后,就把日志写到Standby Redo Log或者Archived Log文件中,具体写入哪个文件,取决于Primary 的日志传送方式和Standby database的位置。如果写到Standby Redo Log文件中,则当Primary Database发生日志切换时,也会触发Standby Database上的Standby Redo Log 的日志切换,并把这个Standby Redo Log 归档。 如果是写到Archived Log,那么这个动作本身也可以看作是个归档操作。
  • 日志应用 (redo apply):
    日志应用服务,就是在Standby Database上重演Primary Database日志,从而实现两个数据库的数据同步。 根据Standby Database重演日志方式的不同,可分为物理Standby(Physical Standby) 和 逻辑Standby(Logical Standby)。

4、DATA GUARD的三种数据保护模式

所谓数据保护模式是指在Standby Database和Primary Database之间数据同步的程度。Data Guard允许定义三种数据保护模式,分别是最大保护(maxmium protection)、最大可用(maxmium availability)、最大性能(maxmium performance)。

最大保护模式(maxmium Production)
这个级别保证Standby Database和Primary Database的数据是完全同步的,即使Primary Database突然宕机,在Standby Database上不会有任何数据丢失。
这种模式下,Primary Database上的每个事务的Redo日志必须在本地和Standby Database上都写入日志文件后才能提交,如果不能写入到Standby Database,Primary Database就会自动关闭以防止数据丢失。
这种方式要求Standby Database必须配置Standby Redo log,而Primary Database必须使用LGWR、SYNC、AFFIRM方式归档到Standby Database。(AFFIRM,磁盘io控制,保证主备库日志同时写完)

最大性能(Maxmium Performance)
这个模式是缺省模式,他更加侧重对Primary Database的可用性不造成任何影响。
Primary Database上的事务的Redo日志只要写到本地日志文件就可以提交,不必等待到Standby Database的传递完成。
Primary Database的Redo流可以异步的发送到Standby Database。
这种模式通过LGWR ASYNC或者ARCH实现,Standby Database也不要求使用Standby Redo Log。

最大可用性(Maxmium Availability)
这种模式会尽量避免数据丢失,Primary Database每个事务的Redo日志要写到本地和Standby Database中才能提交。
这个和最大保护模式不同的是,如果写入到Standby Database失败,Primary Database不会自动关闭。这时Primary Database会自动转换为Maxmium Performance模式,等待问题解决并且Standby Database再次和Primary Database同步之后,Primary Database会自动的转换为Maxmium Availability。
这种模式会尽量的避免数据丢失,但不能绝对保证数据完全一致。
这种模式要求Standby Database必须配置Standby Redo log,而Primary Database必须配置为LGWR、SYNC、AFFIRM方式归档。

如果要修改数据保护模式,则可以按照以下操作进行。

shutdown immediate;
startup mount;
# 修改模式(这里以最大可用性为例)
alter database set standby database to maxmium availability;
# 打开数据库
alter database open;
# 确认模式已经修改
select protection_mode,protection_level from v$database;

二、DG原理

tip:ARCH的结构和LGWR的结构均为日志发送 (redo send)内容

1、ARCH的结构

在这里插入图片描述

1、Primary Database不断的产生Redo Log,这些日志被LGWR进程写到联机日志
2、联机日志写满以后,发生日志切换,触发ARC0完成本地归档
归档位置采用LOG_ARCHIVE_DEST_1=‘LOCATION=/path’
3、完成本地归档以后,联机日志可以被覆盖重用
4、ARCH1进程通过Net把归档日志发送给Standby Database的RFS进程
5、Standby Database端的RFS(Remote File Server)进程把接受到的日志写入到归档日志
6、Standby Database端的MRP(media recover process)进程(Redo Apply)或者LSP进程(SQL Apply)在Standby Database上应用这些日志,进而同步数据

这种方式最大的问题是:
Primary Database只有在发生归档时才会发送日志到Standby Database,如果Primary Database异常宕机,联机日志中的Redo内容会丢失,因此这种方式没法避免数据丢失的问题。
要想避免数据丢失,就必须使用LGWR,而使用LGWR又有SYNC和ASYNC两种方式。

2、LGWR的结构

在这里插入图片描述

LGWR又分为同步(SYNC)和异步(ASYNC)两种方式,下面分别介绍一下这两种方式

LGWR SYNC 同步方式

1、Primary Database产生的Redo日志要同时写到日志文件和网络。也就是说LGWR进程把日志写到本地日志文件的同时还要发给本地的LNSn进程(Network Server Process),再由LNSn进程把日志通过网络发送到远程目的地,每个远程目的地对应一个LNS进程,多个LNS进程能够并行工作。
2、LGWR必须等待写入本地日志文件的操作和通过LNSn进程的网络传送都成功,Primary Database上的事务才能够提交,这也是SYNC的含义所在。
3、Standby Database的RFS进程把接收到的日志写入到Standby Redo Log日志中
4、Primary Database的日志切换也会触发Standby Database上的日志切换,即Standby Database对Standby Redo Log的归档,然后触发Standby Database的MRP或者LSP进程恢复归档日志

因为Primary Database的Redo是实时传送的,于是Standby Database端可以使用两种恢复方式:
实时恢复(Real-Time Apply),只要RFS把日志写入Standby Redo Log就会立即进行恢复;
归档时恢复,在完成对Standby Redo Log归档才触发恢复。
Primary Database默认使用ARCHN进程,如果使用LGWR进程必须明确指定。使用LGWR SYNC方式时,可以同时使用NET_TIMEOUT参数,这个参数单位是秒,代表如果多长时间内网络发送没有响应,LGWR进程就会抛出错误。

LOG_ARCHIVE_DEST_2=‘SERVICE=ST LGWR SYNC NET_TIMEOUT=30’

使用LGWR SYNC方法的可能问题在于,如果日志发送给Standby Database过程失败,LGWR进程就会出错,也就是说Primary Database进程依赖于网络状况。一般也可以使用异步的LGWR模式,也就是LGWR ASYNC。

LGWR ASYNC 异步方式

1、Primary Database一端产生Redo日志后,LGWR把日志同时提交给日志文件和本地LNS进程,但是LGWR进程只需要成功写入日志文件即可,不必等待LNSn进程的网络传送成功。
2、LNSn进程异步地把日志内容发送到Standby Database,多个LNSn进程可以并发发送
3、Primary Database的Online Redo Log写满后发生Log Switch,触发归档操作,也触发Standby Database对Stand Redo Log的归档,然后触发MRP或LSP进程恢复归档日志

因为LGWR进程不会等待LNSn进程的响应结果,所以配置LGWR ASYNC方式时不需要NET_TIMEOUT参数

LOG_ARCHIVE_DEST_2=‘SERVICE=boston LGWR ASYNC’

3、日志接收(Redo Receive)

Standby Database的RFS进程接收到日志后,就把日志写到Standby Redo Log或者Archived Log文件中,具体写入哪种文件,取决于Primary的日志传送方式和Standby Database的配置。
如果是写到Standby Redo Log文件中,则当Primary Database发生日志切换时,也会触发Standby Database上的Standby Redo Log的日志切换,并把这个Standby Redo Log归档。
在日志接收中,需要注意的是归档日志被放在什么位置,Standby Database选择归档目录的算法如下。
在这里插入图片描述

1、如果配置了STANDBY_ARCHIVE_DEST参数,则使用这个参数指定的目录
2、如果某个LOG_ARCHIVE_DEST_n参数明确定义了VALID_FOR=(STANDBY_LOGFILE,*)选项,则使用这个参数指定的目录
3、如果数据库的COMPATIBLE参数大于等于10.0,则选取任意一个LOG_ARCHIVE_DEST_n的值
4、如果STANDBY_ARCHIVE_DEST_n和LOG_ARCHIVE_DEST_n参数都没有配置,使用缺省的STANDBY_ARCHIVE_DEST参数,这个缺省值是$ORACLE_HOME/dbs/arch

4、日志应用(redo apply)

日志应用服务,就是在Standby Database上重演Primary Database的日志,从而实现两个数据库的数据同步。

根据应用方式划分

根据Standby Database重演日志方式的不同,可分为物理Standby(Physical Standby)和逻辑Standby(Logical Standby)两种类型。
Physical Standby使用的是Media Recovery技术(MRP)),在数据块级别上进行恢复,这种方式没有数据类型的限制,可以保证两个数据库完全一致。Physical Standby数据库只能在Mount状态下进行恢复,也可以打开,但是只能以只读方式打开,并且打开时不能进行恢复操作。
Logical Standby使用的是Logminer技术(LSP),通过把日志内容还原成SQL语句,然后SQL引擎执行这些语句,Logical Standby不支持所有数据类型,可以在视图dba_logstdby_unsupported中查看不支持的数据类型。如果使用了这种数据类型,则不能保证数据完全一致。Logical Standby数据库可以在恢复的同时进行读写操作。
Physical Standby的SCN号和主库保持一致,而Logical Standby仅保持数据层面的一致。一般在应用过程中BUG会较多,建议使用Physical Standby。

根据发生时间划分

根据Redo Apply发生的时间又可以分成两种

一种是实时应用(Real-Time Apply),这种方式必须使用Standby Redo Log。每当日志被写入到Standby Redo Log时,就会触发恢复,使用这种方式的好处在于可以减少数据库切换的时间(Switchover或Failover),因为切换时间主要用在剩余日志内容的恢复上。
另一种是归档应用,这种方式是在Primary Database发生日志切换,触发了Standby Database的归档操作,归档完成后会触发恢复,这也是缺省的恢复方式。
如果是Physical Standby,可以使用下面的命令启用Real-Time:

 alter database recover managed standby database using current logfile;

如果是Logical Standby,可以使用下面的命令启用Real-Time:

 alter database start logical standby apply immediate;

查看是否使用Real-Time Apply:

select recovery_mode from v$archive_dest_status;

5、自动裂缝检测和解决

当Primary Database的某些日志没有成功发送到Standby Database,这时候发生了归档裂缝(Archive Gap)。
缺失的这些日志就是裂缝(Gap)。Data Guard能够自动检测,解决归档裂缝,不需要DBA的介入。这需要配置FAL_CLIENT,FAL_SERVER 这两个参数(FAL: Fetch Archive Log)。

从FAL 这个名字可以看出,这个过程是Standby Database主动发起的“取”日志的过程,Standby Database 就是FAL_CLIENT. 它是从FAL_SERVER中取这些Gap, 10g中,这个FAL_SERVER可以是Primary Database, 也可以是其他的Standby Database。
如:FAL_SERVER=‘PR1,ST1,ST2’;
FAL_CLIENT和FAL_SERVER两个参数都是Oracle Net Name。FAL_CLIENT 通过网络向FAL_SERVER发送请求,FAL_SERVER通过网络向FAL_CLIENT发送缺失的日志。 但是这两个连接不一定是一个连接。 因此FAL_CLIENT向FAL_SERVER发送请求时,会携带FAL_CLIENT参数值,用来告诉FAL_SERVER应该向哪里发送缺少的日志。 这个参数值也是一个Oracle Net Name,这个Name是在FAL_SERVER上定义的,用来指向FAL_CLIENT.

当然,除了自动地日志缺失解决,DBA 也可以手工解决。 具体操作步骤如下:

1) 查看是否有日志GAP: 
SQL> SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG; SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; 
2) 如果有,则拷贝过来
3) 手工的注册这些日志: 
SQL> ALTER DATABASE REGISTER LOGFILE '路径';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue从入门到精通(四):MVVM模型

一,MVVM MVVM(Model–view–viewmodel)是一种软件架构模式。MVVM有助于将图形用户界面的开发与业务逻辑或后端逻辑(数据模型)的开发分离开来。详见MVVM 二,Vue中的MVVM Vue虽然没有完全遵循 MVVM 模型,但是 Vue 的设…

手机相册怎么恢复?如何挽救误删的照片?

手机相册成为我们存储和分享照片的主要途径,这些照片可能代表着我们的美好回忆、重要时刻或珍贵的瞬间。然而,有时候我们会因为误操作或一时冲动,将一些珍贵的照片误删,并且很难找回来。手机相册怎么恢复呢?本文将为你…

基于Tensorflow+Keras的卷积神经网络(CNN)人脸识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 人脸识别是计算机视觉领域的一个重要研究方向,广泛应用于安全监控、身份验证、人机…

Android 性能为王时代SparseArray和HashMap一争高下

文章目录 一、SparseArray 源码分析1. **类定义和构造函数**2. **基本方法**2.1 put(int key, E value)2.2 get(int key)2.3 delete(int key)2.4 removeAt(int index)2.5 gc()2.6 size()2.7 keyAt(int index) 和 valueAt(int index) 3. **辅助方法**3.1 binarySearch() 二、使用…

最新AI智能问答创作系统ChatGPT网站源码V4.20版本,GPTs、AI绘画、AI换脸、垫图混图+(GoMaxAI系统搭建部署教程文档)

Midjourney(人工智能图像生成器),仅用了一年时间就已经火爆全球。它就像是一个想象力的助力器,总能带给人们一些不可思议的奇妙的作品。Midjourney虽然是一款最强的AI绘画工具,但对于很多人来说Midjourney怎么用&#…

使用JavaScript日历小部件和DHTMLX Gantt的应用场景(三)

DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件,这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用…

匝间冲击耐压试验仪产品介绍及工作原理

产品简介 武汉凯迪正大KD2684S匝间冲击耐压试验仪适用于电机、变压器、电器线圈等这些由漆包线绕制的产品。因漆包线的绝缘涂敷层本身存在着质量问题,以及在绕线、嵌线、刮线、接头端部整形、绝缘浸漆、装配等工序工艺中不慎而引起绝缘层的损伤等,都会造…

在线投票系统源码 网上投票平台创建 安全稳定 支持自定义投票规则+礼物道具功能

分享一款在线投票系统源码,是一款功能丰富、安全稳定的网络投票平台解决方案。通过本源码,用户可以轻松创建并管理各种在线投票活动,支持自定义投票规则,同时集成礼物道具功能,增强用户参与度和投票活动的趣味性&#…

2024 年 电工杯(B题)大学生数学建模挑战赛 | 平衡膳食食谱 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 CS团队倾注了大量时间和心血,深入挖掘解决方案。通…

常用的框架——— Android UtilCode

AndroidUtilCode是一个功能强大且易于使用的Android库。该库封装了Android开发中经常使用的具备完整演示和单元测试的功能。经过使用其封装的API,能够大大提升开发效率。该程序主要由两个模块组成,utilcode(一般在开发中使用)和su…

【真人Q版手办风】线稿手绘+ AI绘图 Stable Diffusion 完整制作过程分享

大家好,我是设计师阿威。 今天给大家分享一篇【真人Q版卡通手办】风格的制作过程,话不多说,进入正题。 成品预览 手绘线稿 首先,我使用的是老款手绘软件【SAI】,用[钢笔工具]进行了人物的线稿Q版描绘。&#x1f447…

巨控无线通讯模块在煤化工皮带保护系统中的应用

一、项目介绍 近年来由于煤矿化工行业在实际生产过程中事故频发,国家安监部门自2022年起开展了为其三年的专项整治行动,皮带运输系统作为煤矿化工行业自动化系统的重要组成部分成为此次专项整治重点。 兖矿新疆能化有限公司作为山能集团在新疆分部的龙…

如何为海量计数场景设计缓存体系?no.34

计数常规方案 计数服务在互联网系统中非常常见,用户的关注粉丝数、帖子数、评论数等都需要进行计数存储。计数的存储格式也很简单,key 一般是用户 uid 或者帖子 id 加上后缀,value 一般是 8 字节的 long 型整数。 最常见的计数方案是采用缓存…

常见的100个Shell命令,超级实用!

在大多数的Linux和Unix系统、及其他类Unix系统中,Shell是用户与操作系统内核交互的主要方式。作为一种强大的命令行解释器,它也支持编程功能,用户可以写脚本来处理各种任务。 熟悉shell脚本,首先要对shell指令熟悉,今…

Vue3学习-用 vite@latest 初始化项目后,遇到无法识别 .vue 文件

引入app界面遇到 我的解决方案 1.根目录创建 env.d.ts&#xff0c;添加 declare module "*.vue" {import type { DefineComponent } from "vue"const vueComponent: DefineComponent<{}, {}, any>export default vueComponent }2.在 tsconfig.json…

基于ARM|DSP+FPGA+NVIDIA AI平台的摄像头ISP图像画质调试定制服务

基本框架及算法介绍 ISP(Image Signal Processor)&#xff0c;即图像处理&#xff0c;主要作用是对前端图像传感器输出的信号做后期处理&#xff0c;主要功能有线性纠正、噪声去除、坏点去除、内插、白平衡、自动曝光控制等&#xff0c;依赖于ISP才能在不同的光学条件下都…

scroll-snap-type——有滚动容器下吸附至吸附点的严格程度——css基础

scroll-snap-type有滚动容器下吸附至吸附点的严格程度&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/scroll-snap-type 此属性不为吸附点指定任何确切的动画或运行规律&#xff0c;留待用户代理处理。 //不吸附 scroll-snap-type:none; //表示吸附轴的关键字…

IPD在卷烟工业企业研发管理中应用

一、 什么是IPD IPD是Integrated Product Development几个英文单词的缩写&#xff0c;译成汉语就是“集成产品研发”&#xff0c;是上世纪九十年代以来世界上盛行的企业产品研发管理的成功模式。下文中汉捷咨询对IPD的由来进行分享。 最先将IPD付诸实践的是美国IBM公司。1992…

AI绘图副业创收,热门擦边变现赛道怎么玩?网友:瑟瑟才是人类前进的动力!

大家好&#xff0c;我是设计师阿威 今天给大家介绍一个用 AI 搞擦边的变现赛道 而且可以说是0 成本变现的 现在真的越来越多的人都想 0 成本变现&#xff0c;那么 0 成本到底能不能变现&#xff0c;变现的上下限又是多少&#xff1f; 今天这个案例就可以很好的进行说明 可以…

路由引入实验(华为)

思科设备参考&#xff1a;路由引入实验&#xff08;思科&#xff09; 技术简介 路由引入技术在网络通信中起着重要的作用&#xff0c;能够实现不同路由协议之间的路由传递&#xff0c;并在路由引入时部署路由控制&#xff0c;实现路径或策略的控制 实验目的 不同的路由协议之…