Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(1):Oracle Dataguard 工作原理

Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(1):Oracle Dataguard 工作原理

目录

  • Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(1):Oracle Dataguard 工作原理
    • 一、Oracle Dataguard 工作过程
    • 二、Oracle Dataguard 日志传送方式
        • 1、使用 ARCH 进程传送日志
        • 2、使用`LGWR`进程传送日志
        • (1)使用` LGWR` 进程的` SYNC` 方式
        • (2)使用 `LGWR` 进程的 `ASYNC` 方式
    • 三、standby redo log 的作用分析
    • 四、Oracle Dataguard 日志接收过程
    • 五、Oracle Dataguard 日志应用过程
    • 六、Oracle Dataguard 数据保护模式
        • 1、最大保护模式:`Maximum Protection`
        • 2、最大可用模式:Maximum Availability
        • 3、最大性能模式:Maximum Performance
        • 4、定义数据保护模式

Oracle Dataguard 是保证企业数据的高可用性(high availability,HA)、数据保护(data protection)与灾难恢复(disaster recovery)的集成化灾难恢复解决方案。

Oracle Dataguard 针对生产数据库创建一个或多个同步备份,由一个生产数据库和若干个备用数据库组成,形成一个独立的、易于管理的数据保护方案。

一、Oracle Dataguard 工作过程

1、当某次事务更改主库中的数据时,Oracle 在联机重做日志文件(redo log)中记录此次更改。Oracle Dataguard使用日志写入器进程(LGWR)或归档器进程(ARCH)收集重做日志信息。

2、主库除了把日志记录到本地的联机日志文件和归档日志文件中,还通过网络,把日志信息发送到远程的备库服务器。

备用日志文件写入过程可以实时同步(SYNC,最大保护模式),以实现零数据丢失。也可以是异步(ASYNC,最大可用性模式)的,以减少对网络带宽的压力。或者通过归档日志文件的批量传输模式(最大性能模式),以减少对生产系统的性能影响。

3、在备库上,Oracle Dataguard使用远程文件服务器(RFS)进程从主库接收重做日志(redo log)信息,使用管理恢复进程 (MRP)将重做日志信息应用到物理备库中。使用逻辑备用进程(LSP)将经过SQL转换的重做日志信息应用到逻辑备库中。

4、当主库打开并处于活动状态时,备库可以执行恢复操作。如果主数据出现了故障,备库即可以被激活并接管主库的工作。

下图为一个Oracle Dataguard的模型。

在这里插入图片描述

上图中,主库在运行时会不断产生redo log,这些日志会通过网络传送到备库,这个传送动作,可以由ARCH完成,也可以由LGWR完成,选用哪种进程,对数据库的可用性和DG的保护能力有着很大的区别。

二、Oracle Dataguard 日志传送方式

1、使用 ARCH 进程传送日志

主库不断的产生redo log,这些日志被LGWR写进联机日志,当一组联机日志被写满,会发生日志切换,并且ARCH会将其归档,ARCH进程还会通过网络把归档日志传送给备库的一个叫做RFS的进程,备库接受日志并写入到归档日志,然后备库的MRP进程(redo apply)或者LSP进程(SQL apply)在备库上应用这些日志,于是数据就同步了。

默认情况下,主库使用ARCH进程传送日志,不需要特别的设置。

2、使用LGWR进程传送日志

LGWR又分为SYNC(同步)和ASYNC(异步)两种方式:

(1)使用 LGWR 进程的 SYNC 方式

主库产生redo log要同时写入到日志文件和网络,即LGWR把日志写到本地联机日志文件的同时,还发送给本地的LNSN进程(Network Server Process),然后LNSN进程把日志内容通过网络发送到备库。

LGWR必须等待写入本地联机日志和LNSN进程传送成功,主库的事务才能提交,这就是实时同步的原理。

备库的RFS进程把接收到的日志立刻写入standby redo log中。

备库的恢复方式可以是实时恢复,也可以是完成对standby redo log的归档后恢复。

NET_TIMEOUT参数单位为秒,作用是该段时间网络无响应,LGWR会抛出错误。

LOG_ARCHIVE_DEST_2 = 'SERVICE=ST LGWR SYNC NET_TIMEOUT=30'
(2)使用 LGWR 进程的 ASYNC 方式

使用LGWR SYNC方式也有弱点,如果在发送给standby db过程中出错,LGWR会报错,主库事务无法完成,主库LGWR过分依赖网络状态。

LGWR ASYNC方式的工作过程如下:

主库产生redo log之后,LGWR进程把日志写到本地联机日志文件的同时,发送给本地的LNSN进程,和LGWR SYNC方式相比,LGWR只需要成功写入日志文件,事务即可提交,不必等待LNSN进程传送成功。

主库联机日志写满后归档,也会触发备库的standby redo log归档,然后触发MRPLSP进程恢复归档。

由于LSWR不会等待LNSN,所以无需配置NET_TIMEOUT参数。

三、standby redo log 的作用分析

standby redo logSRL),和传统的online redo logORL)相比,有以下特点:

1、SRLORL两种文件是完全相同的,只是两者发挥的作用和场景不同。

2、SRL只在备库上起作用(虽然主库也可以配置SRL),当数据库处于主库角色时,SRL是不活动的,只有经过了角色切换,变成了备库角色时,SRL日志才会变成活动的。

3、对于处于备库角色的数据库来说,ORL不是必须的,也不会起作用,只有当角色切换,变成主库角色时,ORL文件才起作用。

4、对于处于备库角色的数据库来说,从主库接收到的日志可以记录在SRL文件中,也可以记录在归档日志文件中,具体写在哪个文件中取决于具体配置,但是不会写在ORL中。

5、SRL必须和ORL大小完全一致,否则SRL也不会被用到。其次,从数量上,应该按照每个实例或日志线程N+1的数量关系来配置,例如2个实例的RAC,如果每个实例3组日志,则SRL应该是(3+1)*2=8组。

5、是否使用SRL,关键区别在于RFS把接收到的日志,是写在归档日志里,还是写在SRL里。

四、Oracle Dataguard 日志接收过程

备库的RFS进程接收到日志后,把日志写到standby redo log或者archived log file文件中。

归档日志的位置取决于standby database归档路径的选择:

1、如果配置了standby_archive_dest,则使用这个参数指定的目录;

2、如果配置了log_archive_dest_n,该参数明确定义了VALID_FOR=(STANDBY_LOGFILE,*),则使用这个参数指定的目录;

3、如果standby_archive_destlog_archive_dest_n参数都没有配置,使用缺省的standby_archive_dest参数,这个缺省值是$Oracle_HOME/dbs/arch

五、Oracle Dataguard 日志应用过程

日志应用就是在备库上重演主库的日志,从而实现两个数据库的数据同步。

Oracle Dataguard 将主库的redo log传输给备库,然后将redo log数据应用到备库,从而实现两个数据库的数据同步。

Oracle Dataguard提供两种方法将redo log数据应用到备库,这两种方法与Oracle Dataguard支持的两种类型的备库对应:

1、物理备库(重做应用):使用media recovery技术,在数据块级别进行恢复。这种方式没有数据类型的限制,可以保证两个数据库完全一致。

2、逻辑备库(SQL apply):使用logminer技术,通过把日志内容还原成SQL语句,然后SQL引擎执行这些语句。

就从主库进行的数据传输而言,这两种类型的备库之间没有差别。一旦redo log数据到达备库,这两种类型的备库在将redo log数据应用到备库的方式上就存在差异了。

根据日志应用发生的时间可以分为2种:

1、实时应用(Real-Time Apply):这种方式必须有standby redo log,每当日志被写入standby redo log时,就会触发恢复。

实时应用使备库与主库保持密切同步,可以减少数据库切换的时间。

要启用物理备库的实时应用,在物理备库执行以下命令:

alter database recover managed standby database using current logfile disconnect;

要启用逻辑备库的实时应用,在逻辑备库执行以下命令:

alter database start logical standby apply immediate;

查看备库是否应用了实时应用:

SQL> select recovery_mode from v$archive_dest_status;RECOVERY_MODE
-----------------------
MANAGED REAL TIME APPLY

2、归档时应用:这种方式在主库发生日志切换之后,才触发备库的归档,归档完成后再触发恢复,这也是默认的方式。

六、Oracle Dataguard 数据保护模式

Oracle Dataguard提供三种数据保护模式(最大保护、最高可用性、最高性能)来平衡成本、可用性、性能和事务保护。

下表从数据丢失风险的角度概述了各种模式的适用性。

保护模式在出现灾难时数据丢失的风险重做传输机制
最大保护零数据丢失;双重故障保护LGWR SYNC
最高可用性零数据丢失;单故障保护LGWR SYNC
最高性能最小数据丢失——通常从 0 到几秒LGWR ASYNC 或 ARCH

这三种模式的区别在于,当主库发生故障时,备库的数据会和主库有多大的差距。

1、最大保护模式:Maximum Protection

这是最高的数据保护级别,这个模式的规则是即便牺牲主库的可用性,也要保证不出现数据丢失。这个级别保证备库和主库的数据是完全同步的,即使主库突然宕机,在备库上也不会出现任何数据丢失。

最大保护模式要求备库必须配置SRL,主库必须使用LGWRSYNCAFFIRM方式归档到备库。

最大保护模式下,主库上的每个事务的redo log必须在和本地和备库上都写入日志文件后才允许提交。如果不能写入到备库,主库就会自动关闭以方式数据丢失,主库不再生成任何redo log,并且不断地尝试连接备库,这一段时间内LGWR不再生成任何redo log,整个数据库表现为挂起。

最大保护模式下,至少要有一个备库是正常的,主库才能正常打开,否则主库无法打开。

如果主库是RAC环境,如果一个实例和备库之间网络发生问题,那么在最大保护模式下,这个实例是crash,继而触发其他实例的crash recovery,完成recovery之后,Oracle Dataguard会忽略这个实例,而主库其他实例也能继续处理业务,并发送日志进行同步。除非所有实例连接备库都出现了问题,才会出现所有实例crash,最终导致整个数据库的crash

2、最大可用模式:Maximum Availability

这是另外一种能实现零数据丢失的数据保护方案。这种模式需要至少有一个备库是通过SYNCAFFIRM方式传送数据,并且要使用SRL文件才行。

在这种模式下,主库发送redo log、并等待备库确认,备库收到redo log,并记录到SRL中,并返回确认给主库,这时,主库上的事务才能结束。这是和最大保护模式一样的地方。

如果主库在该段时间(默认30秒)没有收到任何反馈信息,这个备库就会被标记成failedLGWR会继续写日志,但是会忽略掉这个failed的备库。

一旦备库被认为是failed,那么主库就会强制进行一次日志切换,以明确的标识出发生failed的时间点,也就是达到零数据丢失的时间点,而在这以后产生的redo log就不再向备库发送了。

RAC环境下,如果一个实例认为备库是failed,则自动触发的日志切换会导致所有的实例都停止发送redo log,即便其他实例能够连接到备库。

3、最大性能模式:Maximum Performance

最高性能模式是默认的保护模式。在此种模式下,主库上事务的redo log只要写到本地日志文件就可以提交,不必等待到备库传递完成。主库的redo log以异步发送到备库。备库的任何故障,以及两者之间的网络故障都不会影响主库的活动,即便网络出现问题,主库也只不过暂时停止redo log传送,并等待ARCH进程通过PING机制发现连接恢复之后,继续重传。

这种模式可以使用LGWR ASYNC或者ARCH实现,备库也不要求使用SRL

如果主库是RAC,并且工作在最大性能模式下,如果只是RAC的某个实例和备库的日志传递发生故障,那么也只有该实例的日志传递被中止。而其他实例的日志传递仍然继续。发生中断的实例上的ARCH进程会不断地通过ping机制来检查连通性,一旦发现连接恢复,这个实例上的gap会自动发送给备库,但是LGWR进程却并不会立即启动LNS进程去发送当前的redo log数据,而是直到下一次日志切换时,LGWR才会启动LNS,开始传递redo log数据。

4、定义数据保护模式

保护模式是针对主库进行设置的,这个设置是告诉主库必须要遵守的规则。对备库没有作用。

数据保护模式在定义数据保护级别的同时,也同时定义了两个重要信息:

(1)主库如何向备库传送redo log

(2)当备库发生故障或网络出现故障,主库应该怎么做。

在主库上执行下面的SQL语句可用于设置三种数据保护模式:

ALTER DATABASE SET STANDBY TO MAXIMIZE PROTECTION;    -- 最大保护
ALTER DATABASE SET STANDBY TO MAXIMIZE AVAILABILITY;  -- 最高可用性
ALTER DATABASE SET STANDBY TO MAXIMIZE PERFORMANCE;   -- 最高性能-- 修改数据保护模式:
alter database set standby to maximize availability;SQL> select protection_mode,protection_level from v$database;PROTECTION_MODE      PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

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

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

相关文章

Windows系统安装Docker Desktop

文章目录 注意事项安装步骤官网下载软件安装到其它盘符操作(如果就想安装到C盘可以跳过这个步骤, 直接执行文件)等待出现软件安装界面Windows系统的配置软件的一些必要设置(以下设置需要点击apply才能生效,如果点不了,那就是安装后,出现了错误…

从零开始RTSP协议的实时流媒体拉流(pull)的设计与实现(一)

此文为系列文章,此系列主要讲解RTSP客户端的拉流及播放,文章持续更新,会从rtsp的基本协议讲起,如何一步步实现音视频的拉流过程,包括一系列涉及到的协议,rtsp,sdp, rtp(本…

让私域用户付费的三个关键要素

在吸引私域用户付费的过程中,有三个关键要素是不可忽视的。 下面,就一起来看看是哪三个要素,帮助你更好地挖掘私域用户的潜力。 价值提供:真正解决用户的问题 简单来说,用户愿意为他们认为有价值的东西付费。当你的…

Qt:子线程在程序退出时的操作

在Qt中可以使用线程指针对子线程进行操作。子线程可以使用使用基本指针&#xff0c;shared_ptr&#xff0c;两种指针进行操作&#xff08;QSharedPointer指针操作有问题还未解决&#xff0c;先不讲&#xff09;。 // c标准库 shared_ptr<QThread> thread_;// 基本指针 Q…

特殊车辆检测数据集VOC+YOLO格式2730张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2730 标注数量(xml文件个数)&#xff1a;2730 标注数量(txt文件个数)&#xff1a;2730 …

LookingGlass使用

背景 Looking Glass 是一款开源应用程序&#xff0c;可以直接使用显卡直通的windows虚拟机。 常见环境是Linux hostwindows guest&#xff0c;基本部署结构图&#xff1a; 编译 git clone --recursive https://github.com/gnif/LookingGlass.git编译client mkdir client/b…

Ceph 手动部署(CentOS9)

#Ceph手动部署、CentOS9、squid版本、数字版本19.2.0 #部署服务:块、对象、文件 一、部署前规划 1、兼容性确认 2、资源规划 节点类型节点名称操作系统CPU/内存硬盘网络组件安装集群节点CephAdm01CentOS94U/8GOS:40G,OSD:2*100GIP1:192.169.0.9(管理&集群),IP2:…

如何优化亚马逊广告以提高ROI?

在竞争激烈的亚马逊市场中&#xff0c;优化广告以提高投资回报率&#xff08;ROI&#xff09;是卖家的关键任务。以下是一些实用的策略&#xff1a; 一、精准的关键词研究与选择 深入了解产品特性和目标受众 详细分析产品的功能、用途、优势和适用人群。例如&#xff0c;如果你…

CSS学习记录23

CSS用户界面 CSS调整大小 resize 属性规定元素是否应&#xff08;以及如何&#xff09;被用户调整大小。下例只允许用户调整 <div> 元素的宽度&#xff1a; div {resize: horizontal;overflow: auto; } 下例只允许用户调整 <div> 元素的高度&#xff1a; div {…

Linux菜鸟级常用的基本指令和基础知识

前言:很多Linux初学者都会头疼于指令太多记不住&#xff0c;笔者刚学习Linux时也是如此&#xff0c;学习Linux指令时&#xff0c;学了后面的指令&#xff0c;前面的指令也会忘的差不多了&#xff0c;针对于以上这些情况&#xff0c;笔者今天来分享一篇Linux菜鸟级的常用指令的博…

【数据仓库】hive on Tez配置

hive on Tez 搭建 前提是hive4.0hadoop3.2.2数仓已搭建完成&#xff0c;现在只是更换其执行引擎 为Tez。搭建可参考【数据仓库】hive hadoop数仓搭建实践文章。 Tez 下载 下载地址 https://archive.apache.org/dist/tez/ 官网地址 https://tez.apache.org/releases/apac…

《机器学习》--线性回归模型详解

线性回归模型是机器学习中的一种重要算法&#xff0c;以下是对其的详细解释&#xff1a; 一、定义与原理 线性回归&#xff08;Linear Regression&#xff09;是利用数理统计中回归分析&#xff0c;来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。线性回归…

电子价签会是零售界的下一个主流?【新立电子】

电子价签&#xff0c;作为一种能够替代传统纸质标签的数字显示屏&#xff0c;已经在零售行业中展现出其巨大的潜力。它具有实时更新、集中管理、高效节能的特点&#xff0c;实现价格的实时更新&#xff0c;大大减少更新价格的工作量和时间。为消费者带来更加便捷、准确的购物体…

sql server期末复习

表操作 创建create 删除drop 修改alter 数据操作 查询 select from <tableName> 插入 insert into <tableName> values 修改 update <tableName> set 删除 delete from <tableName> 授权与收回对数据的操作权限 授予 grant <权…

用python编写一个放烟花的小程序

import pygame import random # 代码解释及使用说明&#xff1a; # 首先&#xff0c;导入 pygame 和 random 库。pygame 用于创建游戏窗口和图形绘制&#xff0c;random 用于生成随机数。 # 初始化 pygame&#xff0c;并设置屏幕尺寸为 800x600 像素&#xff0c;设置窗口标题为…

dns网址和ip是一一对应的吗?

DNS网址和IP地址是一一对应的吗&#xff1f;我们在上网时&#xff0c;为什么总是使用网址而不是一串数字&#xff1f;这些问题其实涉及到互联网的基本运作原理。DNS&#xff08;域名系统&#xff09;是我们日常上网过程中一个不可或缺的部分&#xff0c;它帮助我们将人类易于记…

Json与jsoncpp

目录 一、关于Json 1.数据类型 2.语法规则 二、写Json相关API 1.Json::Value类 2.append方法 3.toStyledString方法 三、读Json相关API 1.Json::Reader类 2.parse方法 3.类型判断方法 4.类型转换方法 5.getMemberNames方法 四、完整代码 一、关于Json Json是一种轻…

【管道——二分+区间合并】

题目 思路 区间合并 1、按照左端点排序2、遍历窗口&#xff0c;若窗口非法&#xff0c;继续遍历&#xff1b;否则执行33、若是第一个窗口&#xff0c;设定合并结果初值&#xff0c;判断结果左端点是否造成“起点过大”&#xff0c;是&#xff0c;FALSE退出&#xff1b;否则执行…

语雀导入md文件图片丢失

经常被困扰是&#xff0c;从语雀导入md文件&#xff0c;即使知道把md文件和本地图片文件夹打包成zip进行导入&#xff0c;还是出现图片丢失 解决方式1&#xff1a; 把图片和md文件放到同个目录下&#xff0c;重新打包成zip文件&#xff0c;导入后有图片了 解决方式2&#xf…

Python爬虫入门指南:从零开始抓取数据

Python爬虫入门指南&#xff1a;从零开始抓取数据 引言 在大数据时代&#xff0c;数据是新的石油。而爬虫作为获取数据的重要手段&#xff0c;受到了越来越多的关注。Python作为一门强大的编程语言&#xff0c;其简洁易用的特性使得它成为爬虫开发的首选语言。本篇文章将带你…