我很有兴趣知道隔离级别" READ COMMITTED"在Oracle DB实现中提供。我已经知道DB在REDO日志中创建了记录,但是现在我认为REDO日志仅用于重复事务,以防在事务期间发生一些不可预测的崩溃。我也知道DBWR写了"脏块"每次填写REDO日志文件。但我的问题是:如果DBWR将#"脏"(已更改的块)写入磁盘,那么隔离级别如何" READ COMMITTED"提供。我的意思是在写DBWR时直接将数据写入数据文件或某些特殊的地方"在当前事务中可见而在其他事务中不可见的磁盘上?所以在COMMIT
这个"地点"变得可见,这一切?这在现实中如何运作?抱歉英语不好。
答案 0 :(得分:2)
除REDO日志外,您还拥有UNDO表空间。
更新数据时,旧值存储在UNDO表空间中。当Oracle发现您要读取记录的未提交数据时,它会从那里重建旧值。
在数据库恢复期间也使用UNDO:除了重新应用已提交但未在崩溃之前将其写入数据库文件的写入之外,还可以进行相反的操作:回滚对发生的数据库文件的未提交更改在坠机前。