触发DBWR进程的事件:
1.当用户进程在LRU列表中搜索了一定数量的缓存块后,仍然没有找到可用的空闲缓存块,DBWR进程将启动,把脏缓存块写入数据文件。
2.Checkpoint发生时,DBWR进程把所有的脏缓存块从LRU列表中移入到写入列表,并写入到数据文件。
3.数据库缓存块中的写入列表的长度达到一定值的时候,DBWR将写入列表中的脏缓存块写入数据文件。
4.每过3秒钟,DBWR把脏缓存块从LRU列表移到写入列表,一旦写入列表长度达到一定值,DBWR便将数据写入数据文件。
5.当表空间offline时,DBWR把所有属于该表空间的脏缓存块从LRU列表移到写入列表,并且开始写入数据文件。
6.当表空间开始热备时,DBWR把所有属于该表空间的脏缓存块从LRU列表移到写入列表,并且开始写入数据文件。
-----------------------------------------------------------
我们已经知道DBWR进程负责将脏数据块写入磁盘。这些条件包括:1) 当进程在辅助LRU链表和主LRU链表上扫描以查找可以覆盖的buffer header时,如果已经扫描的buffer header的数量到达一定的限度(由隐藏参数:_db_block_max_scan_pct决定)时,触发DBWR进程。2) 当DBWR在主LRUW链表上查找已经更新完而正在等待被写入数据文件的buffer header时,如果找到的buffer header的数量超过一定限度(由隐藏参数:_db_writer_scan_depth_pct决定)时,DBWR就不再继续往下扫描了,而转到辅助LRUW链表上将其上的脏数据块写入数据文件。