关于脏读分析

事实上,从目前的oracle的机制来看,Oracle是不支持脏读的,当事务A对某张表中的数据进行修改,并且尚没有Commit之前,若事务B去查询这张表的信息,看到的将是旧的数据,若此时事务B区对这张表的数据进行更新,会发现命令停在那里不执行下去了,产生了一个等待事件, 直到事务A进行Commit或者Rollback之后,事务B才会执行,这样做的目的就是为了保证数据的一致性。做个简单的测试如下,环境为oracle 10g:

1.新建测试表及插入数据

SQL> create table sonic_dirty_oracle (C1 varchar2(10));

Table created

SQL> insert into sonic_dirty_oracle values ('AAA');

1 row inserted

SQL> commit;

Commit complete

2.事务A做查询及更新操作(不提交)

SQL> select C1 from sonic_dirty_oracle;

C1

----------

AAA

SQL> update sonic_dirty_oracle set C1='BBB' where C1='AAA';

1 row updated

--这个时候没有Commit

SQL> select C1 from sonic_dirty_oracle;

C1

----------

BBB

3.事务B做查询、更新操作

SQL> select C1 from sonic_dirty_oracle;

C1

----------

AAA

SQL> update sonic_dirty_oracle set C1='CCC' where C1='AAA';此时事务B没能执行完成,停在那里不动

4.查询事务状态

SQL> select event,state from v$session where sid='38';

EVENT                                        STATE

-------------------------------------    -------

enq: TX - row lock contention    WAITING可见,事务A产生了一个TX Row Lock,只有等事务A做了Commit之后,事务B才会执行完这条命令

5.事务A提交后事务B才能正常完成

经过分析,系统不存在脏读现象,但存在另外一种现象,即事务A查询出结果后暂时停止操作,事务B对该条数据做删除操作,然后事务A对该条数据做修改操作,因为该条数据已经不存在,所以事务A的更新操作无法成功。解决办法:

1.在业务表中增加时间戳,记录上一次修改的时间,做更新前,把拿到的时间戳与最新数据的时间戳做比较,看是否一致,如果一致,证明是最新的记录,可进行操作;如果不一致,则需要重新获取最新的数据,进行相应操作。

2.在业务表中增加版本号字段,即记录修改次数。实现机制与1相同。

考虑到现有系统的并发性不是很大,且对相同数据进行操作的可能性非常小。修改

实现的成本和时间相对较高,代码的改动量非常大。目前阶段不予修改。如软件要做成

产品推广,这部分还是很有必要修改的。

oracle脏读如何解决,关于脏读分析相关推荐

  1. Oracle变异表解决方法--ORA-04091错误

    Oracle变异表解决方法--ORA-04091错误 原因:触发器(或者被语句中引用的用户自定义PL/SQL函数)视图去查询(或修改)一个被另一语句修改而触发的表. 解决方法:重写触发器(或函数)避免 ...

  2. oracle gc chain,ORACLE GC 类等待事件汇总分析

    ORACLE GC 类等待事件汇总分析 作者简介: ---------------------------------------------------------------------- @ 孙 ...

  3. windows平台下的oracle ORA-01031的解决方法

    windows平台下的oracle ORA-01031的解决方法 今天下午遇到一个很怪异的问题,在windows平台下sqlplus / as sysdba登陆数据库,提示权限不足, 当时就纳闷了,s ...

  4. Oracle后台专家解决library cache锁争用的终极武器

    今天来给大家分享一个Oracle使用中的小技巧. 当某条SQL语句或者对象被反复访问,过多的软解析可能会造成大量的"library cache:mutex X"争用,有什么样的方法 ...

  5. 关于计算机专业的调整与优化,基于oracle数据库系统性能调整与优化分析-计算机应用技术专业论文.docx...

    基于oracle数据库系统性能调整与优化分析-计算机应用技术专业论文 摘要 数据库系统的性能最终决定数据库的可用性和生命力.大多数数据库系统在 运行一段时间后都会存在一定的性能问题,主要涉及数据库硬件 ...

  6. Oracle数据库服务器IO高的分析方案和案例探讨

    Oracle数据库服务器IO高的分析方案和案例探讨 本文原题<ORACLE数据库服务器IO高的分析方案和案例探讨> 目录: 慧眼识珠--服务器磁盘这么繁忙,到底是谁干的? 谨记于心--OR ...

  7. CPU值满resmgr:cpu quantum造成的Oracle等待事件解决办法

    cpu quantum造成的Oracle等待事件解决办法 不少接触数据库的朋友有一个困扰已久的问题--resmgr:cpu quantum.已经遇过不少次这种CPU突然全绿的情况,通过隐含参数屏蔽了一 ...

  8. oracle11g ora 29927,【案例】Oracle内存泄漏 进行10046跟踪分析07445导致数据库宕机

    天萃荷净 在一次ORA-7445导致oracle数据库down掉故障分析中,发现sql因某种原因导致大量的sql area中很多内存泄露,最终导致数据库down掉.通过实验找出类此奇怪SQL. SEL ...

  9. 在Windows 7下安装Oracle 11g的解决方法

    在Windows 7下安装Oracle 11g的解决方法 前不久卸载掉了自己的Windows Vista系统,装上了Windows7 旗舰版,在装机过程中也遇到了很多问题,有些问题是自己不曾遇到过的, ...

最新文章

  1. Only the original thread that created a view hierarchy can touch its views.
  2. 史上最全的正则表达式
  3. 订阅了李笑来的“通往财富自由之路”栏目
  4. ALV调用标准GUI STATUS
  5. VTK:几何对象之Pyramid
  6. Android之封装倒计时页面
  7. js 将video的第一帧 转为图片
  8. 【Tomcat】安装Tomcat服务器Tomcat的目录结构
  9. BZOJ 1211: [HNOI2004]树的计数 purfer序列
  10. 华为2288H V5服务器安装win_server_2016问题解决过程
  11. 数据损坏了,怎么找回来?用超融合备份一体机啊
  12. 如何在程序中安装指定apk文件
  13. android 美妆相机,Android类似美妆相机高级美妆列表
  14. 文博会虚拟现实惊艳亮相 VR风暴蠢蠢欲动
  15. Windows10创建工作组、加入工作组、查看工作组包含的所有电脑
  16. 深度装N卡LINUX驱动 性能怎么样,讲解Deepin 20开源Nouveau和闭源NVIDIA驱动,附装闭源N卡驱动的方法...
  17. 安装DevExpress后如何在工具箱显示Dev控件
  18. 【安信可首款4G模组CA-01直连阿里物联网平台②】一机一密认证方式连接
  19. 手算前推回代求解潮流电压分布
  20. oracle的insert写法,Oracle中Insert语句的总结

热门文章

  1. 嵌入式(十三):嵌入式系统概念
  2. pc无线连接多台移动设备
  3. 热门商业模式解剖:哪个适合中国
  4. QQ远程协助,不能远程操作对方WIN7 旗舰版 电脑的系统组件
  5. 自定义firefox背景色(豆绿色)
  6. 使用CKRule实现PVC配方计算
  7. 软件开发中的思维僵化
  8. 你适不适合做UE交互设计师
  9. 《云计算和大数据时代网络技术揭秘》读后感
  10. 宋分题——Java实现登录窗口 和 信息录入窗口