oracle事务的隔离级别和锁

Oracle数据库中锁表的原因 例如,一个事务正在修改某个数据行,而另一个事务同时尝试删除或更新相同的数据行,这将导致其中一个事务被阻塞,并等待另一个事务完成。例如,一个事务正在修改某个数据行,而另一个事务同时尝试删除或更新相同的数据行,这将导致其中一个事务被阻塞,并等待另一个事务完成。然后,事务2尝试修改相同的数据行,但由于事务1持有锁,并且未释放,因此事务2将被阻塞,直到事务1完成并释放锁。然后,事务2尝试修改相同的数据行,但由于事务1持有锁,并且未释放,因此事务2将被阻塞,直到事务1完成并释放锁。 阅读详情

1. 事务的特性(ACID):

(1) 原子性 Atomicity: 事务所包含的数据库操作要么都做,要么都不做

(2) 一致性 Consistency: 事务前后,所有的数据都保持一致的状态

例如:事务之前A,B两个账户的总和是10万(A: 4W, B: 6W), 现在A转账2W给B (A: 2W, B: 8W)

A, B账户总和依旧是10W,如果不是10W的话,则事务前后对于账户总和这种资源是不一致的。

(3) 隔离性 Isolation: 事务对数据的操作不能够受到其他事务的影响

(4) 持续性 Durability: 数据库事务一旦提交,其对数据库中数据的改变应该是永久性的


2. 事务的结束方式包括:

commit, rollback


3. 破坏事务ACID特性的因素包括:

(1) 多个事务并行运行,不同的操作交叉执行

(2) 事务在运行过程中被强行终止


4. 并发事务带来的问题:

数据库并发的事务会带来以下问题:

(1) 脏读:事务a修改数据时,事务b读取了该数据,但是事务a由于某种原因取消了对数据的修改,使数据返回了原状态,这时事务b读取的数据与数据库中的数据就会不一致。

(2) 不可重复读:事务a读取数据库中的数据后,事务b更新了该数据,当事务a再次读取该数据时,就会发现数据已经发生了改变

(3) 幻影读:事务a基于某个条件读取数据后,事务b在同一个表中插入了一条数据,这时事务a基于相同的条件再次读取数据时,返回了不同的行


5. 事务隔离级别

为了保证数据的一致性,一般采用了事务隔离机制,又称为事务串行化,用来保证事务尽量按照串行的方式执行

级别1:读取未提交,这种并发性最高,但会导致上述三个问题

级别2:读取已提交,这是oracle的默认隔离级别

级别3:可重复读

级别4:串行,这种隔离级别最高,但数据库并发会受到很大的限制,可以避免上述三个问题,但项目中不会采用

 

6. 数据库锁

数据库是一个多用户使用的共享资源,当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个非常重要的技术,当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁,加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

两种锁机制:

共享锁(S锁):加了共享锁的数据库对象可以被其他事务读取,但是不能被其他事务修改。

独占锁(X锁):加了独占锁的数据库对象不能被其他事务读取和修改。

commit或rollback后,事务所使用的锁被释放。


7. 数据库锁的类型:

(1) DML锁(data locks 数据锁):能够防止同步冲突的DML和DDL操作的破坏性,是oracle主要的锁,又包括表级锁(TM锁)和行级锁(TX锁)

当oracle执行DML语句的时候,系统自动在所要操作的表上申请TM类型的锁,当TM锁获得后,系统再自动申请TX类型的锁。

当多个会话在表的同一条记录上执行DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态,当第一个会话提交后,TX锁会被释放,其他的会话才可以加锁。

当oracle数据库产生TX锁等待时,如果不及时处理常常会引起oracle数据库挂起或导致死锁的产生。


死锁:

当两个用户互相等待对方释放资源时,oracle认定为产生了死锁,将以牺牲一个用户作为代价,另一个用户继续执行,牺牲的用户的事务将回滚。

例子:

用户1对A表进行update,没有提交

用户2对B表进行update,没有提交

如果用户2此时对A表做update,则会发生阻塞,需要等待用户1的事务结束

如果此时用户1对B表做update,则产生死锁,此时oracle会选择其中一个用户进行回滚,使另一个用户继续执行操作。


(2) DDL锁(dictionary locks字典锁): 用于保护数据库对象的结构,如表、索引的结构定义


问题:既然有了锁,为什么还要隔离级别?

事务隔离级别是并发控制的整体解决方案,其实际上是综合利用各种类型的锁和行版本控制来解决并发问题。

锁是数据库并发控制的内部机制,是基础

对用户来说,只有当事务隔离级别无法解决一些并发问题和需求时,才有必要在语句中手动设置锁,不恰当的设置锁可能导致严重的阻塞和死锁。建议在完全了解锁机制的情况下,才可以再语句中手动设置锁,否则应该使用事务隔离级别。


http://sishuok.com/forum/blogPost/list/6366.html#22766

http://mousycoder.com/2016/02/19/explain-transaction-in-simple-language-3/

四种隔离级别与锁 数据库事务的四种隔离级别的特点描述,他们的使用热度,以及各种锁在隔离级别下的释放时机。 立即下载

相关推荐

独立游戏开发者的新武器:实测腾讯混元3D自动绑骨,搭配Mixamo让角色动画制作效率翻倍

本文实测腾讯混元3D自动绑骨功能与Mixamo动画库的协同使用,显著提升独立游戏开发者的角色动画制作效率。通过解决卡通角色绑骨偏差、优化骨骼权重及动画状态机配置,使原本两周的流程缩短至三天,并分享Unity中的性能优化与版权合规要点。

weixin_42662605的博客 497

一文搞懂Oracle 0 至 6 级锁(附案例详解)

把整个店的珠宝包下来,让别人参观,预定,但是不能买卖(这在ORACLE中叫只读锁,只允许别人读,也就是只允许第0,1,2类人来珠宝店,让别人只读方式的参观,不允许买卖,再来个第4类人,还是允许的,因为大家虽然都想包,但是大家的目的都是分享,而不是独占,所以是可以兼容的);比如用户A在表T上执行了UPDATE第1行,那么表t上有个表级的共享锁,那用户B在表T上执行了UPDATE第2行,那么也会在表t上有个表级的共享锁,虽然行上都是排它锁,但不是同一行,所以他们在行上没有冲突,在表上也没有冲突。

Ruishine的博客 6377

YooAsset可寻址模式避坑指南:从路径加载到Addressable的完整迁移方案

本文详细介绍了将Unity项目从传统路径加载迁移到YooAsset可寻址模式的完整方案。针对中大型项目在迁移过程中遇到的路径耦合、依赖管理、热更新等痛点,提供了从架构设计、环境配置、代码迁移到性能优化的实战指南,并分享了实际项目的改造案例与避坑经验,帮助团队高效完成资源管理系统的重构。

weixin_28304023的博客 511

oracle 间隙锁,数据库事务和锁

1、前言这次我们只谈数据库。以往遇到并发事务问题,总想着站在应用层面考虑问题,该如何实现悲观锁和乐观锁?但并不很清楚数据库中底层的实现原理。找几个晚上重新温习了一下大学课堂上的《数据库系统概览》,借这篇文章记下来这次读书的概要。2、四个特性 ACID如果想要说明一个数据库或者一个框架支持事务性操作,则必须要满足下面的四大特性。原子性(Atomicity):原子性是指事务是一个不可再分割的工作单元,...

weixin_31358991的博客 1029

博图编写温度程序_s7 smart200的CRC-16校验程序

最近做一个小项目,项目中采用485自由口通讯方式,使用一台西门子S7 smart200对一台冷水机做多个状态和温度做监控,并能对冷水机进行启停控制,和参数设置,因为冷水机的协议不是标准modbus格式,所以要自己编写通信协议。其中要用到CRC校验,在网上找了些别人写的程序,基本上用不了。只能自力更生了。首先,找到CRC校验的算法,并理解。 下面就是我找的算法(这个网上很多),1....

weixin_39539761的博客 3062

YOLOv11涨点改进| SCI一区2026 |独家创新首发、特征融合改进篇|引入FAFM特征对齐融合模块,通过特征对齐和融合两个阶段,助力多模态融合小目标检测,小目标检测,SAR图像目标检测高效涨点

🔥本文提出了一种改进YOLOv11网络模型的方法,通过引入FAFM(特征对齐融合模块)来解决多模态目标检测中的特征空间错位问题。FAFM模块采用可变形卷积和内容引导注意力机制,有效实现了跨模态特征对齐与融合,充分利用了不同模态间的互补信息。该方法在保持模型轻量化的同时,显著提升了目标检测精度和鲁棒性,特别是在复杂背景和模态差异较大的场景下表现突出。文章详细介绍了FAFM模块的结构、原理、优势,并提供了完整的代码实现和模型配置方案,为多模态目标检测任务提供了实用的技术参考。

Ai缝合怪、助力小伙伴高效发论文 269

mysql数据库事务传播特性_mysql事务隔离级别和传播特性

2.隔离级别实现上一节介绍了ANSI定义的3种异象,及根据禁止异象的个数而定义的事务隔离级别。因为不存在严格、严谨的“官方”定义,各主流2.1 Lock-based 隔离级别实现在展示Lock-based隔离级别实现前,先介绍几个与锁相关的概念:Item Lock:对访问行加锁,可以防止dirty/fuzzy read。Predicate Lock(gap lock):对search的范围加锁,全...

weixin_35728286的博客 722

AUTOSAR进阶图解==>AUTOSAR_EXP_VFB

AUTOSAR虚拟功能总线(VFB)摘要 AUTOSAR虚拟功能总线(VFB)是汽车开放系统架构中的核心抽象概念,为分布式电子系统提供统一通信模型。VFB允许软件组件在不了解底层物理通信机制的情况下交互,通过运行时环境(RTE)实现组件间的数据交换。系统配置过程将抽象的VFB视图转换为具体实现,包括组件到ECU的映射和通信机制选择。VFB采用"last-is-best"语义进行数据通信,并支持模式管理机制,使组件能根据系统状态调整行为。此外,VFB还支持与非AUTOSAR系统的交互,通常

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1117

Oracle中的锁机制及其类型。

了解Oracle中的各种锁机制对于设计高效且稳定的数据库应用程序非常重要。正确地应用这些锁可以帮助减少不必要的等待时间,并提高系统的整体性能。然而,不当使用或者过度依赖锁也可能导致性能瓶颈甚至出现死锁等问题,因此合理规划和优化是非常关键的。Oracle数据库使用锁机制来保证数据的一致性和完整性。当多个用户同时访问数据库时,锁可以帮助防止数据被不一致地修改。Oracle中的锁可以分为多种类型,这些类型的锁根据它们锁定的资源和作用范围不同而有所区别。

qq_33240556的博客 501

FortiOS 存在身份验证绕过导致命令执行漏洞(CVE-2024-55591)

FortiOS 是 Fortinet 公司开发的操作系统,作为 Fortinet 安全平台的核心,提供全面的网络安全功能。 它将网络和安全功能无缝集成,支持跨本地、云、混合和融合 IT/OT/IoT 基础设施环境的统一管理。 FortiOS 7.6 版本引入了生成式人工智能助手、数据保护、托管服务和单一代理等新功能,进一步增强了其安全性和性能。

缘梦未来的博客 1842

二十一、CANdelaStudio深入-SPRMIB的配置

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的肯定响应抑制位配置,欢迎各位朋友订阅、评论,可以提出宝贵意见,以持续输出更好的作品,同时会根据评论、私信不定期更新文章内容,以及专栏目录。订阅该专栏的朋友可私信小编免费答疑解惑(^U^)ノ~YO CANdelaStudio-从入门到深入目录 文章目录CANdelaStu

诊断协议那些事儿's blog 1870

关于oracle锁模式

ORACLE里锁有以下几种模式: 0:none 1:null      空 2:Row-S     行共享(RS):共享表锁  3:Row-X     行专用(RX):用于行的修改 4:Share     共享锁(S):阻止其他DML操作 5:S/Row-X   共享行专用(SRX):阻止其他事务操作 6:exclusive 专用(X):独立访问使用 数字越大锁级别越高, 影响的操作越多。

babymouse1212的博客 481

手把手教你学Simulink--进阶电机控制场景实例:基于Simulink的直流电机双闭环调速系统抗负载扰动仿真

摘要:本文基于Simulink平台构建直流电机双闭环调速系统,重点研究其在工业传送带场景下的抗负载扰动性能。系统采用转速外环(稳速)和电流内环(限流)的嵌套结构,通过工程法整定PI参数,实现了转速跌落<10%、恢复时间<0.5s的优异抗扰性能。仿真结果表明,相比单闭环系统,双闭环控制使转速跌落率降低47%,恢复时间缩短75%。文中详细介绍了数学模型建立、Simulink模块实现及参数优化方法,并提供了完整代码和模型文件,为电机控制系统设计提供实用参考。

MHD0815的博客 180

【Oracle】事务隔离级别和锁

转自:https://blog.youkuaiyun.com/zdp072/article/details/51100593 1. 事务的特性(ACID): (1) 原子性 Atomicity: 事务所包含的数据库操作要么都做,要么都不做 (2) 一致性 Consistency: 事务前后,所有的数据都保持一致的状态 例如:事务之前A,B两个账户的总和是10万(A: 4W, B: 6W), 现在A转账2W给B...

新青年1号 381

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

mysql,oracle,sql server中的默认事务隔离级别查看,更改 And SQLserver锁和事务隔离级别的比较与使用

未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据) 已提交读(数据库引擎的默认级别) 可重复读 可序列化(隔离事务的最高级别,事务之间完全隔离) 可串行化比较严谨,级别高; MySQL mysql默认的事务处理级别是'REPEATABLE-READ',也就是可重复读 1.查看当前会话隔离级别 select @@tx_isolation; 2.查看系统当前隔离...

paolei的笔记 970

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

mysql和oracle默认事务级别_mysql oracle默认事务隔离级别的说明

这篇文章主要介绍了mysql、oracle默认事务隔离级别的说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧1.事务的特性(ACID)(1)原子性(Atomicity)。事务中所涉及的程序对数据库的修改操作要么全部成功,要么全部失败。(2)一致性(Consistency)。事务执行前和执行后来源和去向保持平衡。(3)隔离性(Isolation)。并发时每个事务是隔离的,相互不影...

weixin_36484898的博客 1927

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Oracle 锁和事务

如果存储过程中有锁表(行)操作, 如不显式commit,则procedure会挂在那里,不会自动提交。通常情况下,oralce将整个存储过程作为一个事务整体,整个过程内的事务,要么都提交,要么都回滚。如果过程内部使用了commit命令或rollback命令,则存储过程就能够自行控制整个事务的结束时机,而不受整个会话的影响。oracle执行手动加锁操作时也会加上行锁+排他锁,表锁+共享锁。oracle锁可以分为共享锁和排他锁,或者称为读锁和写锁。oracle锁可以分为DML锁和DDL锁。

dongxinxingcool210的博客 286

MySQL事务的四大隔离级别

事务的概念 事务,由一个有限的数据库操作序列构成(sql语句),这些操作(sql语句)要么全部执行,要么全部不执行,是一个不可分割的工作单位。 假如userA转账给userB 1000 元,先从userA的账户里扣除1000 元,再在user B 的账户上加上 1000 元。 如果扣完userA的1000元后,还没来得及给userB加上,银行系统异常了,最后导致userA的余额减少了, userB的余额却没有增加。所以就需要事务,将userA的钱回滚回去。 事务的作用 保证了并发情况下操作数据的安全性 事

人丑就要多读书的博客 563

oracle事务讲解、事务隔离级别实例

今天温习oracle事务,记录如下:  事务定义            事务是保持数据的一致性,它由相关的DDL或者DML语句做为载体,这组语句执行的结果要么一起成功,要么一起失败。      我们知道SQL92标准定义了数据库事务的四个特点: 原子性 (Atomicity) :一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做 一致性 (Co...

LIXG425的专栏 270

mysql oracle 默认事务级别_mysql、oracle默认事务隔离级别的说明

1.事务的特性(ACID)(1)原子性(Atomicity)。事务中所涉及的程序对数据库的修改操作要么全部成功,要么全部失败。(2)一致性(Consistency)。事务执行前和执行后来源和去向保持平衡。(3)隔离性(Isolation)。并发时每个事务是隔离的,相互不影响。(4)持久性(Durubility)。一旦事务成功提交,应该保证数据的完整存在。2.事务隔离级别(1)read uncomm...

weixin_42355865的博客 268

mysql查事务隔离级别_mysql查询事务隔离级别

2.隔离级别实现上一节介绍了ANSI定义的3种异象,及根据禁止异象的个数而定义的事务隔离级别。因为不存在严格、严谨的“官方”定义,各主流2.1 Lock-based 隔离级别实现在展示Lock-based隔离级别实现前,先介绍几个与锁相关的概念:Item Lock:对访问行加锁,可以防止dirty/fuzzy read。Predicate Lock(gap lock):对search的范围加锁,全...

weixin_34073886的博客 818

Oracle锁机制和锁争用问题[转]

一、Oracle数据库的锁类型 根据保护对象的不同,Oracle数据库锁可以分为以下几大类: 1、DML锁 数据锁,用于保护并发情况下的数据完整性。 insert、update、delete操作时锁定表中数据,可以是表级别的或行级别的,是隐含的(implicit)、DML操作时Oracle自动添加的。 2、DDL锁 字典锁,用于保护数据库对象的结构。 创建、修改、删除表时在表上施加的锁,始终是表级...

Lissen_Gan的博客 776

数据库事务隔离级别与锁

数据库事务隔离级别与锁 关键字: 事务 一,事务的4个基本特征 Atomic(原子性): 事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要 么全部成功,要么全部失败。 Consistency(一致性): 只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初 状态。 Isolation(隔离性): 事务允许多个用户对同一个数据进行并发

djskl的专栏 948

数据库事务及锁总结

什么是事务? 事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元) 事务的四种特性(ACID) 1 、原子性(atomicity) 事务是数据库的操作的最小单元,不可分割。事务中包含的各操作要么都做,要么都不做 。 2 、一致性(consistency) 事务的执行使数据

99150的博客 393

锁、事务、隔离级别--readonly

为什么需要锁?因为数据库要解决并发控制问题。在同一时刻,可能会有多个客户端对Table1.rown进行操作,比如有的在读取该行数据,其他的尝试去删除它。为了保证数据的一致性,数据库就要对这种并发操作进行控制,因此就有了锁的概念。锁的分类从对数据操作的类型(读\写)分读锁(共享锁):针对同一块数据,多个读操作可以同时进行而不会互相影响。写锁(排他锁):当当前写操作没有完成前,它会阻断其他写锁和读锁。从

DevilDark的博客 1239
上一篇: oracle 表空间和schema
下一篇: jvm之类的加载、连接、初始化
zdp072
博客等级 码龄16年 689粉丝 519原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值