当前位置: 首页 > news >正文

oracle update 原理

Oracle 11g 中的 UPDATE 操作是数据库修改数据的关键机制,其核心原理涉及事务管理、多版本并发控制(MVCC)、Undo/Redo 日志、锁机制

1. 执行前的准备

  • SQL 解析与执行计划
    Oracle 解析 UPDATE 语句,生成执行计划,确定目标数据的位置(通过索引或全表扫描)。

  • 缓冲区缓存(Buffer Cache)检查
    Oracle 首先在内存的缓冲区缓存中查找目标数据块。

    • 若数据块已在缓存中,直接修改内存中的副本。

    • 若不在缓存中,从磁盘读取数据块到缓冲区缓存。

2. 事务启动与锁机制

  • 行级锁(Row-Level Lock)
    Oracle 对目标行加排他锁(Exclusive Lock),阻止其他事务修改同一行,但允许其他事务通过 SELECT 读取(读一致性由 MVCC 保证)。

  • 事务槽分配
    在回滚段(Undo 段)中分配事务槽,记录事务 ID(XID)和系统变更号(SCN)。

 

3. 生成 Undo 数据

  • 旧版本数据保存
    在修改数据前,Oracle 将原始数据(即修改前的值)写入 Undo 表空间,用于支持事务回滚和读一致性。

    • 例如,若执行 UPDATE employees SET salary=10000 WHERE id=1,原 salary=8000 会被写入 Undo 段。

  • Undo 的作用

    • 事务回滚时恢复原始数据。

    • 其他事务查询时,若数据已被修改但未提交,通过 Undo 数据提供一致性视图

4. 修改数据块

  • 更新缓冲区缓存中的数据块
    在内存中修改目标行的数据,标记数据块为“脏块”(Dirty Block)。

  • 行迁移(Row Migration)处理
    如果更新后的行长度超出原数据块的空闲空间,Oracle 可能将整行迁移到新数据块,并在原位置保留指向新块的指针(称为行链接或行迁移)

 

5. 生成 Redo 日志

  • 记录变更操作
    所有修改操作(包括数据块和 Undo 段的变更)会生成 Redo 日志条目,写入日志缓冲区(Log Buffer)。

    • Redo 日志确保事务的持久性(Durability),即使系统崩溃也能恢复。

  • 日志写入策略

    • 提交事务时,日志缓冲区中的 Redo 条目由 LGWR 进程写入磁盘的 Redo 日志文件。

    • 未提交的事务也可能部分写入 Redo 日志(由 LGWR 定期刷新)。

6. 提交事务

  • 事务提交(COMMIT)

    • 释放行级锁,但 Undo 数据仍保留(直到不再被读一致性查询需要)。

    • LGWR 将剩余 Redo 日志写入磁盘,确保事务持久化。

    • 更新数据块的 SCN(System Change Number),标记为已提交。

  • 快速提交优化
    Oracle 使用延迟块清除(Delayed Block Cleanout)机制,将部分清理工作推迟到后续访问数据块时执行,减少提交时的开销。

 

7. 数据持久化到磁盘

  • 脏块写入数据文件
    由 DBWn(Database Writer)后台进程将缓冲区缓存中的脏块异步写入磁盘数据文件。

    • 写入时机:检查点触发、缓冲区缓存不足、或定期刷新。

8. 多版本并发控制(MVCC)

  • 读一致性(Read Consistency)
    其他事务查询时,若目标数据正在被修改(未提交),Oracle 通过 Undo 数据构造该事务开始时的数据版本(基于查询的 SCN)。

  • 避免脏读
    未提交的修改对其他事务不可见,确保隔离性。

 关键组件协同

组件作用
Undo 表空间存储旧数据,支持回滚和读一致性。
Redo 日志记录所有变更操作,用于崩溃恢复。
Buffer Cache内存缓存数据块,减少物理 I/O。
DBWn将脏块写入磁盘数据文件。
LGWR将 Redo 日志写入磁盘日志文件。

 

相关文章:

oracle update 原理

Oracle 11g 中的 UPDATE 操作是数据库修改数据的关键机制,其核心原理涉及事务管理、多版本并发控制(MVCC)、Undo/Redo 日志、锁机制等 1. 执行前的准备 SQL 解析与执行计划: Oracle 解析 UPDATE 语句,生成执行计划&…...

优化项目缓慢卡顿

大家好,好久不见,因为最近在搞几个老项目,没怎么跟大家见面。在做老项目的时候发现了一些小问题拿出来跟大家分享分享。 因为这个问题是生产环境下面出现的,所以在开发环境的时候很难发现,而且网速快的话也很难发现&a…...

【黑客帝国连接虚拟与现实:数据采集系统(DAQ)硬核技术深度解析】

1. DAQ系统核心架构:从物理世界到数字域的精密映射 1.1 传感器与信号调理:物理量到电信号的精准转换 传感器的物理原理与非线性补偿 热电偶(Thermocouple):基于塞贝克效应,其输出电压与温度差的非线性关系…...

解决unity设置鼠标图标发布以后没有效果的问题

public Texture2D dragCursor; Cursor.SetCursor(dragCursor, Vector2.zero, CursorMode.Auto); 首先设置一个Texture2D的变量,用来保存自己想要设置的图,然后将鼠标设置为自己定义的图片。原本是很简单的功能,而且在编辑器里面运行也正常。…...

CExercise_10_1动态数组Vector

题目: 动手自己实现动态数组Vector,基于以下结构体定义和函数声明: typedef int ElementType; typedef struct { ElementType *data; // 指向堆空间的数组 int size; // 元素的个数 int capacity; // 数组的容量 } Vector; // 请实现下面方法…...

Nextra + TypeScript + MDX 项目的完整目录结构

典型的 Nextra TypeScript MDX 博客项目的完整目录结构。 Pages 架构 my-blog/ ├── components/ # React 组件 │ ├── HelloWorld.tsx # 示例组件 │ └── ... # 其他组件 ├── pages/ # 页面…...

MDM功能演示:远程锁定与数据擦除,保障企业移动设备安全

在当今高度互联的商业环境中,企业数据伴随着员工穿梭于不同城市、时区和设备之间。智能手机、平板电脑和笔记本电脑赋予员工随时随地办公的能力,但也带来了新的安全挑战:设备一旦遗失或落入不当之手,企业数据就面临泄露风险。 无…...

快速idea本地和推送到远程仓库

在你需要推送的那个文件夹打开 #创建本地仓库 git init#添加文件并首次提交 git add . git commit -m "Initial commit"#添加远程仓库地址 git remote add origin https://gitee.com/你的用户名/你的仓库名.git#查看远程仓库是否设置chengg git remote -v#原来远程仓…...

django数据迁移操作受阻

错误信息: django.db.utils.OperationalError: (1227, Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation)根据错误信息分析,该问题是由于MySQL用户 缺乏SYSTEM_VARI…...

使用Lombok的@Slf4j和idea构建:找不到log符号-解决

问题:在使用Lombok的Slf4j构建项目时提示如下内容: MvcConfiguration.java:26:9 java: cannot find symbol symbol: variable log location: class cn.edu.wynu.mrcinerec.mrserver.config.WebMvcConfiguration查了网上的方法都是改配置 但是使用Googl…...

物联网传感器技术架构与功能解析

物联网传感器作为物联网体系的关键组成部分,主要承担环境或物体状态信息的捕获与传输功能。其通过检测物理、化学或生物参数,将模拟信号转化为数字格式,并利用多种通信协议实现数据交互,最终服务于各类智能化应用。 核心功能模块分…...

wx213基于php+vue+uniapp的新闻资讯小程序

开发语言:PHP框架:phpuniapp数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:PhpStorm 系统展示 管理员登录界面 管理员功能界面 新闻类别管理 新闻信息管理 用户管理 管理员管…...

SOEM编译Ubuntu 22.04

下载SOEM源码 $ git clone https://github.com/OpenEtherCATsociety/SOEM.git编译源码 进入SOEM源码目录 $ mkdir build && cd build $ cmake .. $ make测试 eth1 位网卡名 $ cd test/linux/slaveinfo/ $ sudo ./slaveinfo eth1SOEM (Simple Open EtherCAT Master) …...

栈和队列(Stack和Queue)

栈和队列(Stack和Queue) 1:栈的概念 示意图: 2:创建一个类Stack,给定一个整形数组elem,数组已使用长度usedSize,默认长度default_size为10,再给定一个构造方法&#xff0…...

Django的定制以及admin

Django是一个全面的Python Web开发框架,具有丰富的功能,和众多开箱即用的接口。 简单使用 我们使用Django的django-admin工具创建项目: django-admin startproject project1 cd project1 django-admin startapp app1以后,一个简…...

LLM架构解析:编码器-解码器架构(Encoder-Decoder Architecture)(第四部分)—— 从基础原理到实践应用的深度探索

本专栏深入探究从循环神经网络(RNN)到Transformer等自然语言处理(NLP)模型的架构,以及基于这些模型构建的应用程序。 本系列文章内容: NLP自然语言处理基础词嵌入(Word Embeddings&#xff09…...

Unity VideoPlayer 播放无声音

增加一个videoPlayer下挂&#xff0c;audiorSource脚本 this.videoPlayer.EnableAudioTrack(0, true); this.videoPlayer.audioOutputMode VideoAudioOutputMode.AudioSource; this.videoPlayer.SetTargetAudioSource(0, this.videoPlayer.GetComponent<AudioSource>()…...

【Kafka基础】监控与维护:动态配置管理,灵活调整集群行为

1 基础配置操作 1.1 修改主题保留时间 /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-configs.sh --alter \--bootstrap-server 192.168.10.33:9092 \--entity-type topics \--entity-name yourtopic \--add-config retention.ms86400000 参数说明&#xff1a; retention…...

AutoGen深度解析:从核心架构到多智能体协作的完整指南

AutoGen是微软推出的一个革命性多智能体(Multi-Agent)框架&#xff0c;它通过模块化设计和灵活的对话机制&#xff0c;极大地简化了基于大型语言模型(LLM)的智能体系统开发。本文将深入剖析AutoGen的两个核心模块——core基础架构和agentchat多智能体对话系统&#xff0c;带您全…...

接口请求控制工具

接口请求控制工具 功能说明代理转发安全控制访问控制错误处理配置管理日志管理 技术栈快速开始环境要求配置说明启动服务 工具源码 功能说明 代理转发 支持多路由配置支持静态资源代理灵活的路由规则配置支持请求转发和响应处理支持负载均衡 支持多目标服务器配置提供多种负载…...

Git 实践笔记

这里写自定义目录标题 一、将当前改动追加到某次commit上二、git 强制修改分支位置 一、将当前改动追加到某次commit上 stash工作区中的当前改动 git stash假设需要修改的commit是 f744c32&#xff0c;将HEAD移动到需要改动的commit的父提交上 git rebase f744c32^ --interact…...

记一个Unity中Humanoid中骨骼与武器脱离的问题

在Untiy中&#xff0c;有时人物的Humanoid的骨骼对应上了&#xff0c;但是套用动画的时候武器等节点有时会脱离&#xff0c;这是因为Humanoid只包含了人物骨骼&#xff0c;不包括其他额外的骨骼&#xff0c;因此如果想要武器节点也跟随&#xff0c;需要在Humanoid中也绑定骨骼设…...

Python asyncio

一些Pre关键概念 asyncio 本质上还是单进程单线程的Python程序&#xff1b; 建立event_loop 概念&#xff0c;上面event_loop 可以理解为大脑&#xff0c;下面是若干个可执行的Task&#xff1b; Task 没有控制权&#xff0c;没有办法控制event_loop 执行某个Task&#xff0c;只…...

【前端分享】JavaScript异步编程详解!

JavaScript 的异步编程是其核心特性之一&#xff0c;主要用于处理非阻塞操作&#xff08;如网络请求、文件读写、定时任务等&#xff09;。由于 JavaScript 是单线程的&#xff0c;异步机制可以避免代码阻塞&#xff0c;提高性能和用户体验。以下是 JavaScript 异步编程的核心概…...

深度学习基础--CNN经典网络之InceptionV1研究与复现(pytorch)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 InceptionV1是提出并行卷积结构&#xff0c;是CNN的经典网络之一&#xff1b;本次任务是探究InceptionV1结构并进行复现实验&#xff1b;欢迎收藏 关注…...

用 Vue 3 + D3.js 实现动态数据流图

文章目录 一、项目背景与功能概览二、项目准备与依赖安装2.1 安装 Vue 3 项目2.2 安装 D3.js2.3 项目结构 三、实现动态数据流图3.1 创建 DataFlowChart 组件3.2 动态更新数据流3.2.1 动态更新边和节点位置3.2.2 动画效果 四、节点拖拽与编辑功能实现4.1 添加节点拖拽功能4.2 编…...

46、Spring Boot 详细讲义(三)

五、Spring Boot 与 Web 开发 1. 简介 Spring Boot 是基于 Spring Framework 开发的一个框架,旨在简化配置,快速构建应用。它内嵌 Tomcat 等 servlet 容器,支持 RESTful API 开发,处理静态资源,以及集成视图层技术如 Thymeleaf 和 Freemarker。 2. Spring MVC 集成 Sp…...

热门面试题第15天|最大二叉树 合并二叉树 验证二叉搜索树 二叉搜索树中的搜索

654.最大二叉树 力扣题目地址(opens new window) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大…...

为了避免unboundLocalError和为什么X的值一直不变呢?

## 1.为了避免unboundLocalError 发生unboundLocalError&#xff01; def generate_integer(level):if level 1:X randint(1,9)return X这里出错的原因在于&#xff0c;一旦if 后面的条件没有成立&#xff0c;然后X根本没出生&#xff0c;然后你去使用它&#xff0c;这是有…...

Express中间件(Middleware)详解:从零开始掌握(1)

1. 中间件是什么&#xff1f; 想象中间件就像一个"加工流水线"&#xff0c;请求(Request)从进入服务器到返回响应(Response)的过程中&#xff0c;会经过一个个"工作站"进行处理。 简单定义&#xff1a;中间件是能够访问请求对象(req)、响应对象(res)和下…...

Linux升级gcc版本

目录 1.安装 scl 工具集 2.安装新版本gcc 3.启用新版本 gcc 4.将启动新版本gcc指令写入配置文件 本文主要讲述如何去升级 linux 操作系统下的 gcc 编译器版本。 1.安装 scl 工具集 sudo yum install centos-release-scl scl-utils-build 由于作者已经安装过&#xff0c;…...

【概念】什么是UI(User interface)什么是UX(User experience)?

1. 软件生命周期管理 (Software Life Cycle Management) 解释&#xff1a; 中文&#xff1a; 软件生命周期管理是指从软件规划、设计、开发、测试、部署到后续维护甚至退役的整个过程。English: Software Life Cycle Management refers to the systematic process of plannin…...

【GIT】git pull --rebase 功能解析

1. git pull 命令基础 git pull 是一个常用的 Git 命令&#xff0c;用于从远程仓库获取最新的更改&#xff0c;并尝试将这些更改合并到当前分支中。这通常涉及两个步骤&#xff1a;首先&#xff0c;git fetch 命令从远程仓库下载最新的更改&#xff1b;然后&#xff0c;git me…...

难度偏低,25西电人工智能学院821、833、834考研录取情况

1、人工智能学院各个方向 2、人工智能学院近三年复试分数线对比 学长、学姐分析 由表可看出&#xff1a; 1、智能院25年院线相对于24年院线 全部专业下降比较多&#xff0c;其中控制科学与工程下降20分&#xff0c;计算机科学与技术下降20分&#xff0c;计算机技术[专硕]下降…...

L2-051 满树的遍历

L2-051 满树的遍历 - 团体程序设计天梯赛-练习集 (pintia.cn) 题解 数据结构选择 为了表示树的结构&#xff0c;我们可以使用邻接表。邻接表是一种常用的图和树的表示方法&#xff0c;它能够高效地存储每个节点的子节点信息。在本题中&#xff0c;我们可以使用一个数组 g&am…...

2025年电子电气与新材料国际学术会议

重要信息 官网&#xff1a;www.iceenm.org&#xff08;点击了解详情&#xff09; 时间&#xff1a;2025年4月25-27日 地点&#xff1a;中国-杭州 部分介绍 征稿主题 电子电气 新材料 电力电子器件和系统设计 可再生能源与电网集成技术 下一代半导体…...

数字人:打破次元壁,从娱乐舞台迈向教育新课堂(4/10)

摘要&#xff1a;数字人正从娱乐领域的璀璨明星跨界到教育领域的智慧导师&#xff0c;展现出无限潜力。从虚拟偶像、影视游戏到直播短视频&#xff0c;数字人在娱乐产业中大放异彩&#xff0c;创造巨大商业价值。在教育领域&#xff0c;数字人助力个性化学习、互动课堂和虚拟实…...

【Hyperlane 】轻松实现大文件分块上传!

【Hyperlane 】轻松实现大文件分块上传&#xff01; 痛点直击&#xff1a;大文件上传不再是难题 在云存储、音视频处理、文件协作等场景中&#xff0c;大文件上传常面临中断重试成本高、内存占用大、网络不稳定等挑战。传统方案要么复杂笨重&#xff0c;要么性能瓶颈明显。 现…...

【深入浅出 Git】:从入门到精通

这篇文章介绍下版本控制器。 【深入浅出 Git】&#xff1a;从入门到精通 Git是什么Git的安装Git的基本操作建立本地仓库配置本地仓库认识工作区、暂存区、版本库的概念添加文件添加文件到暂存区提交文件到版本库提交文件演示 理解.git目录中的文件HEAD指针与暂存区objects对象 …...

APP动态交互原型实例|墨刀变量控制+条件判断教程

引言 不同行业的产品经理在绘制原型图时&#xff0c;拥有不同的呈现方式。对于第三方软件技术服务公司的产品经理来说&#xff0c;高保真动态交互原型不仅可以在开发前验证交互逻辑&#xff0c;还能为甲方客户带来更直观、真实的体验。 本文第三部分将分享一个实战案例&#…...

第二节:React 基础篇-受控组件 vs 非受控组件

一、场景题&#xff1a;设计一个实时搜索输入框&#xff0c;说明选择依据 受控组件 vs 非受控组件 核心区别 特征受控组件非受控组件数据管理由React状态&#xff08;state&#xff09;控制通过DOM元素&#xff08;ref&#xff09;直接访问更新时机每次输入触发onChange提交…...

电脑的usb端口电压会大于开发板需要的电压吗

电脑的USB端口电压通常不会大于开发板所需的电压&#xff0c;以下是详细解释&#xff1a; 1. USB端口电压标准 根据USB规范&#xff0c;USB接口的标称输出电压为5V。实际测量时&#xff0c;USB接口的输出电压会略有偏差&#xff0c;通常在4.75V到5.25V之间。USB 2.0和USB 3.0…...

软件界面设计:打造用户喜爱的交互体验

在数字化飞速发展的当下&#xff0c;软件已渗透进生活的各个角落&#xff0c;从日常使用的社交、购物软件&#xff0c;到专业领域的办公、设计软件&#xff0c;其重要性不言而喻。而软件界面作为用户与软件交互的桥梁&#xff0c;直接决定了用户对软件的第一印象与使用体验。出…...

7、linux基础操作2

一、linux调度 1、crontab [选项] 1.1、了解 定时任务调度:指每隔指定的时间&#xff0c;执行特定的命令或程序。 基本语法&#xff1a;crontab [选项] 常用选项&#xff1a; e&#xff1a; 编辑定时任务l&#xff1a;查询定时任务r&#xff1a;删除当前用户的所有定时任务…...

大数据管理专业想求职数据分析岗,如何提升面试通过率?

从技能到策略&#xff0c;解锁高薪岗位的六大核心逻辑 在数字化浪潮席卷全球的今天&#xff0c;数据分析岗位的竞争愈发激烈。对于大数据管理专业的学生而言&#xff0c;如何从众多求职者中脱颖而出&#xff1f;本文结合行业趋势与实战经验&#xff0c;提炼出提升面试通过率的…...

移动端六大语言速记:第15部分 - 其他方面

移动端六大语言速记:第15部分 - 其他方面 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的其他重要特性,帮助开发者全面了解各语言的独特优势和应用场景。 15.1 语言特有功能 各语言特有功能对比: 语言特有功能描述Java注解(Annotat…...

3.1.3.4 Spring Boot使用使用Listener组件

在Spring Boot中&#xff0c;使用Listener组件可以监听和响应应用中的各种事件。首先&#xff0c;创建自定义事件类CustomEvent&#xff0c;继承自ApplicationEvent。然后&#xff0c;创建事件监听器CustomEventListener&#xff0c;使用EventListener注解标记监听方法。接下来…...

基于关键字定位的自动化PDF合同拆分

需求背景&#xff1a; 问题描述&#xff1a; 我有一份包含多份合同的PDF文件&#xff0c;需要将这些合同分开并进行解析。 传统方法&#xff08;如以固定页数作为分割点&#xff09;不够灵活&#xff0c;无法满足需求。 现有方法的不足&#xff1a; 网上找到的工具大多依赖手动…...

ssh连接远程Host key verification failed.

问题描述 在对已部署的项目进行维护过程中&#xff0c;遇到的一个小问题&#xff0c;记录一下。 SSH连接云服务器ssh xxx云服务器IP地址&#xff0c;提示&#xff1a; The authenticity of host xxxxxx (xx.xxx.123.321) cant be established. ECDSA key fingerprint is SHA…...

Matlab 汽车ABS的bangbang控制和模糊PID控制

1、内容简介 Matlab 197-汽车ABS的bangbang控制和模糊PID控制 可以交流、咨询、答疑 2、内容说明 略 摘要&#xff1a;本文旨在设计一种利用模糊控制理论优化的pid控制器&#xff0c;控制abs系统&#xff0c;达到对滑移率最佳控制范围的要求 &#xff0c;所提出的方案采用级联…...