查阅了很多oracle体系结构相关的文章,里面涉及到如题内容的地方基本给出了两个观点:
1.dbwr进程不会将未提交的数据从数据缓冲区写入数据文件;
2.数据文件可能会存在未提交的数据(在实例恢复、回滚等情况下,会考虑到数据文件中存在未提交的数据--“如果用户ROOLBACK,则服务器进程会根据数据文件块和DB BUFFER中块的头部的事务列表和SCN以及回滚段地址重构出相应的修改前的副本,并且用这些原值来还原当前数据文件中已修改但未提交的改变。”--这是某文章的一段原话。)
本人不理解的就是,如果dbwr根本就不会把未提交数据写进数据文件,那怎么会产生第二个问题呢?!还有一点,就是这两个观点不会在同一篇文章中出现,很迷惑,是因为这两个观点中有一个是错误的么?那正确的应该是什么样的?官方似乎没给答案,或者,英文的我看不懂。

解决方案 »

  1.   

    在db_cache不够用的情况下,dbwr会把部分dirty db cache写数据文件的。
    这就存在两种可能,dirty db cache最后commit了,那么写的数据文件就不会存在问题。
    如果dirty db cache 被rollback了,那么写入数据文件的数据就不对了,需要根据undo表空间的数据来恢复到它之前的数据。
    不知是否明白了。
      

  2.   

    1.dbwr进程不会将未提交的数据从数据缓冲区写入数据文件; 
    ===============================================
    会的
      

  3.   

    呵呵,不管怎么说,谢谢两位了,尤其oracledbalgtu,先结贴了,不会再麻烦两位
      

  4.   

    呵呵,不管怎么说,谢谢两位了,尤其oracledbalgtu,先结贴了,不会再麻烦两位