日期:2014-05-17  浏览次数:20812 次

问个oracle脏数据问题,求大牛帮我理清下思路,没头绪阿
最近在学习oracle体系结构
在学到 Flush Buffer的时候里面解释到

回顾一下前面一个用户进程访问一个数据块的过程,如果访问的数据块不在buffer cache中,就需要扫描LRU链表,当达到扫描块数限制后还没有找到空闲buffer,就需要通知DBW0将脏缓存回写到磁盘。如果一个系统中存在大量的脏缓冲,那么就可能导致用户进程访问数据性能下降。

我们可以通过人工干预将所有脏缓冲回写到磁盘去,这就是flush buffer。

在9i,可以用以下语句:

alter system set events = 'immediate trace name flush_cache'; --9i

在10g,可以用以下方式(9i的方式在10g仍然有效):

alter system flush buffer_cache; -- 10g


我之前也看了 

脏数据缓存即被进程修改过,但还没有被回写到数据文件中去的数据块,此时缓冲中的数据和数据文件中的数据不一致

我在一直以为commit后数据在缓存就消失了 直接提交给表里保存了
是不是我这个思路是错误的
而没commit前的数据 就一直驻留在缓存中

就是请高手和我解释下 脏数据缓存到底是怎么样的
------解决方案--------------------
commit和数据在哪里是两码事

------解决方案--------------------
commit 以日志写回为准,与数据是否写回无关。