书上有这样一句话
"
当检查点发生时(此时的SCN被称为Checkpoint SCN)Oracle会通知DBWR进程,
把修改过的数据,
也就是此Checkpoint SCN之前的脏数据(Dirty Buffer)从Buffer Cache写入磁盘,
在检查点完成后CKPT进程会相应地更新控制文件和数据文件头,记录检查点信息,标识变更。
"
我的问题是脏数据应当是没有提交过的数据,那么也写入磁盘吗?另外,redolog里面也包括没有提交过的脏数据吗?

解决方案 »

  1.   

    我的理解应该是会写入磁盘,不过redolog里没有
    redolog 我理解是commit后产生
      

  2.   

    redolog 实际是有个 undo和redo 列表
    undo列表放的是 未提交的事务redo列表放的是 已提交的事务这样说是否正确呢?
      

  3.   

    1,会写入磁盘;
    2,包括;
    3,undo是回滚,redo是重做,两回事
      

  4.   

    redolog里面同时保存着数据的redo和undo信息。
      

  5.   

    undo信息主要是再undo表空间里面吧?
      

  6.   

    没有主要不主要的,两个地方都有,不过undo表空间里保存的是回滚段。
      

  7.   

    对啊,回滚段里面记录的不就是undo信息吗?
      

  8.   

    脏数据写磁盘
    checkpoint进程通知dbwr写脏数据到磁盘上,或者dbbuffer不够用的时候,也会触发dbwr写脏数据。如何保持一致性:
    ckpt会统一写scn,lgwr也会写scn。需要保持一致性的是controlfile记录的scn,datafile和datablock头的scn,还有日志文件里面的scn。另外会利用回滚段来保持读一致性。比方说你做一条update语句,oracle会把这条语句读入到dbbuffer(其实是先查询dbbuffer里面是否存在,接着做一系列的词法语法分析,生成执行计划等等很多事情),读入后开始更新数据,首先会加锁,为了保持commit之前的读一致性,会将block读入回滚段。用户修改,修改时oracle回家数据依次写入redolog,databuffer,scn此时分别由dbwr和lgwr记录(对回滚段的更改也会记录redolog),dbwr首先是触发lgwr,将更改的数据信息记录redolog。然后就将脏数据写入磁盘。