看了不少帖子讨论这种类似的问题:未提交的UPDATE/DELETE,如果到了DBWR刷新的条件,因而写入磁盘,相当于未提交的数据已写入数据文件,那后面的session查询的时候,是否会查到这个未提交的数据呢?
尽管UNDO中该数据状态可能仍是ACTIVE,DB Cache永不会删除未提交的事务?
默认事务隔离等级 read commit。事务隔离等级默认你是不能脏读的。如果DB Crash,SMON实例恢复会利用REDO将未提交的rollback。
我的理解:新的session查询这个数据,它的SCN会判断是否大于当前查询快的SCN,这种情况明显是大于的,但它还要确保该块没有活动事务,就因为这个未COMMIT的数据在UNDO中还是ACTIVE,因此还是会从UNDO中读出旧数据,所以保证了不会受影响。
是否准确呢?谢谢指教!
尽管UNDO中该数据状态可能仍是ACTIVE,DB Cache永不会删除未提交的事务?
默认事务隔离等级 read commit。事务隔离等级默认你是不能脏读的。如果DB Crash,SMON实例恢复会利用REDO将未提交的rollback。
我的理解:新的session查询这个数据,它的SCN会判断是否大于当前查询快的SCN,这种情况明显是大于的,但它还要确保该块没有活动事务,就因为这个未COMMIT的数据在UNDO中还是ACTIVE,因此还是会从UNDO中读出旧数据,所以保证了不会受影响。
是否准确呢?谢谢指教!