LGWR和DBWn的触发条件

Rolling Forward(前滚)

Oracle启动实例并加载数据库,然后通过Online Redologs中的重做日志,重现实例崩溃前对数据库的修改操作。在恢复过程中对于已经提交的事务,但尚未写入数据文件的那部分数据全部写入数据文件.


Rolling Back(回滚)

Rolling Forward之后,虽然已经提交的修改操作更改的数据都已经被写入数据文件,但在实例崩溃时,部分未提交的事务操作的数据也被写入到数据文件,这些事务必须被撤销.

 

 

触发LGWR进程的条件有: 
  1. 用户提交 
  2. 有1/3重做日志缓冲区未被写入磁盘 
  3. 有大于1M的重做日志缓冲区未被写入磁盘 
  4. 3秒超时 
  5. DBWR 需要写入的数据的SCN大于LGWR记录的SCNDBWR 触发LGWR写入。 

 

触发CheckPoint(检查点条件有很多,比如

1. 通过正常事务处理或者立即选项关闭例程时(shutdown immediate或者Shutdown normal), 

2. 当通过设置初始化参数:

LOG_CHECKPOINT_INTERVAL,

LOG_CHECKPOINT_TIMEOUT ,

FAST_START_IO_TARGET 强制时;
3. 当数据库管理员手动请求时:

ALter system checkpoint;
alter tablespace ... offline;
4. 每次日志切换时;

alter system switch logfile

 

注意:

1. alter system switch logfile也将触发完全检查点的发生。
2. alter database datafile ... offline 不会触发检查点进程

如果是单纯的offline datafile,那么将不会触发文件检查点,只有针对offline tablespace的时候才会触发文件检查点,这也是为什么online datafile需要media recoveryonline tablespace不需要。

 

对于表空间的offline后再online这种情况,最好做个强制的checkpoint比较好。

 

关于offline datafile tablespace 的区别也可以参考我的blog

ALTER DATABASE 与 ALTER TABLESPACE OFFLINE的区别

http://blog.csdn.net/tianlesoftware/archive/2009/11/30/4898800.aspx

 

 

以上的触发条件将触发完全检查点,促使DBWR 将检查点时刻前所有的脏数据写入数据文件。另外,一般正常运行期间的数据库不会产生完全检查点

 

下面很多事件将导致增量检查点,比如:

1. 在联机热备份数据文件前,要求该数据文件中被修改的块从DB_Buffer 写入数据文件中。所以,发出这样的命令:
ALTER TABLESPACE tablespace_name BIGEN BACKUP & end backup; 也将触发和该表空间的数据文件有关的局部检查点;

2. 另外, 
ALTER TABLESPACE tablespace_name READ ONLY;
ALTER TABLESPACE tablespace_name OFFLINE NORMAL;
等命令都会触发增量检查点

 

 

检查点发生之后数据库的数据文件、控制文件处于一致状态的含义是不需要进行 介质恢复,只表示数据文件头一致,但是并不表示数据文件内容一致,因为数据文件内容可能在没有发生检查点的其它情况下的dbwr写数据文件,这样数据文件内容就不一致,若掉电需要进行崩溃恢复。

 

触发DBWR进程的条件有: 
1.  DBWR超时,大约3秒 
2. 系统中没有多余的空缓冲区来存放数据 
3.  CKPT 进程触发DBWR

原文地址:https://www.cnblogs.com/princessd8251/p/3308895.html