脏数据块(Dirty Data Block) 是计算机内存中的一块内存区,其中存有读自数据库并已
做修改的数据。比如,当一个人事管理应用程序将“Julie Cohen ”这个名字读入一个内存块
中,然后将此名字改为“Julie Anderson ”,那么保存有这个新名字的内存块即称为一个脏数据
块。可以这样理解脏数据块:存放在内存中脏数据块中的原始数据已被修改,而修改后的数
据还未写入数据库中。

解决方案 »

  1.   

    同意楼上的,不过再补充一点的是在内中被修改且已被commit,但还没有触发dbw0进程进行物理文件的写入的数据。
      

  2.   

    呵,谢谢两位,那么oralce如何来保证数据的一致,比如说 “Julie Cohen '这个名字修改了,
    commite 了,但是还没有写入data file 那么oracle 如何知道去读内存中的而不是data file 的, 另外,oracle 如何去判断那个被修改的是不是已经提交了呢?
      

  3.   

    oracle首先是进行逻辑读,即读取内存中的数据,如果在内存中没有,然后才是物理读取,即从data file读取数据。
    每一个修改都有一个SCN,系统改变号,已经提交的SCN都会被记录在重做日志中。不知道我说的对不对?
      

  4.   

    你说的应该没有错,但是和问题有些偏差  每一个修改是有个SCN ,出了SCN以外,还有checkpoint number, log sequence number ,
    他们之间肯定有些关系的。而在读取的时候oracle是怎样去判断该读取哪里的数据,这个时候是依靠SCN吗?,有是怎样通过SCN 去工作的 提供联接也可以啊
      

  5.   

    checkpoint 就是一个特殊的scn值,一发生checkpoint,db buffer的数据会写到硬盘上,它保证在此scn之前的操作都记录到数据文件中了