请教脏数据库防止脏读与脏读的概念

脏读指一个事务读取其他事务正在更新的数据,如果第二个事务的更新过程尚未完成,则第一个事务所读取到的只是一个过程中的数据,而并非真实的数据。
脏数据在临时更新(脏读)中产生。事务A更新了某个数据项X,但是由于某种原因,事务A出现了问题,于是要把A回滚。但是在回滚之前,另一个事务B读取了数据项X的值(A更新后),A回滚了事务,数据项恢复了原值。事务B读取的就是数据项X的就是一个&临时&的值,就是脏数据。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:133944次
积分:2383
积分:2383
排名:第13201名
原创:96篇
转载:40篇
评论:12条
(3)(1)(1)(1)(1)(2)(1)(3)(2)(1)(5)(7)(7)(1)(4)(1)(1)(2)(1)(4)(6)(7)(3)(19)(2)(1)(1)(1)(2)(7)(7)(22)(4)(2)(8)查看: 10182|回复: 28
请教脏数据与脏读的概念
论坛徽章:6
脏数据与脏读,,,既然脏读是用户正在修改的数据,,别的用户不能脏读,,那为什么CHECKPOING却把这些脏数据写入数据文件呢?
按理说,,CHECKPOING写入数据文件这些脏数据都是已经COMMIT的呀?
论坛徽章:86
原帖由 smalltom30 于
14:51 发表
按理说,,CHECKPOING写入数据文件这些脏数据都是已经COMMIT的呀?
哪里有这个说法?
论坛徽章:7
oracle不读脏数据!
论坛徽章:2
脏数据与脏读是完全木有联系的
脏数据是用户修改过,commit了但没有写到硬盘的数据
脏读是与实务隔离级别相关的,就是说,用户修改了数据,没有commit,但其他人能读这个没有commit的数据,oracle不支持脏读
论坛徽章:6
回复 #2 sundog315 的帖子
还请详细说明一下,没有提交的数据也会写回数据文件吗?
认证徽章论坛徽章:41
在别的数据库中有脏读,但是一般也就是对OLAP系统,OLTP系统可不敢,oracle里没有脏读的说法
论坛徽章:6
回复 #4 fflush 的帖子
#脏数据是用户修改过,commit了但没有写到硬盘的数据 #
在实例恢复的时候,先从REDO里面找到COMMIT和没有COMMIT的数据写到DISK,做rollback forward,然后,从UNDO中找到前印象用于回滚那些没有COMMIT的事务,,但UNDO中的事务有些是在内存里跑的,比如主机掉电后要做实例恢复,这部份UNDO数据丢失了,那拿什么来回滚呢?
论坛徽章:44
原帖由 fflush 于
17:07 发表
脏数据与脏读是完全木有联系的
脏数据是用户修改过,commit了但没有写到硬盘的数据
脏读是与实务隔离级别相关的,就是说,用户修改了数据,没有commit,但其他人能读这个没有commit的数据,oracle不支持脏读
脏数据应该是更改了但是还没有提交的数据呀!
COMMIT了就不再是脏数据了
--数据更改的时候,更改前数据保存在UNDO中。。。
论坛徽章:6
回复 #8 jlliuyi 的帖子
在实例恢复的时候,先从REDO里面找到COMMIT和没有COMMIT的数据写到DISK,做rollback forward,然后,从UNDO中找到前印象用于回滚那些没有COMMIT的事务,,但UNDO中的事务有些是在内存里跑的,比如主机掉电后要做实例恢复,这部份UNDO数据丢失了,那拿什么来回滚呢?
论坛徽章:16
原帖由 smalltom30 于
11:51 发表
在实例恢复的时候,先从REDO里面找到COMMIT和没有COMMIT的数据写到DISK,做rollback forward,然后,从UNDO中找到前印象用于回滚那些没有COMMIT的事务,,但UNDO中的事务有些是在内存里跑的,比如主机掉电后要做实例恢复,这部份UNDO数据丢失了,那拿什么来回滚呢?
UNDO数据在进行修改数据之前就被从原数据进行重建的,在REDO里就是构建UNDO块的一个操作,在过程上说在修改语句之前。
也就是说,要做DML操作,REDO首先会建立UNDO信息,之后才进行DML的REDO录入!所以DML会在REDO中形成较大开销。
LZ如果进行实例恢复,数据库应用REDO会顺序执行:首先构建UNDO,再进行DML操作,找到最后的COMMIT点,然后通过UNDO块回滚需要操作。
个人理解。
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号

我要回帖

更多关于 数据的脏读 的文章

 

随机推荐