OCP:关于LGWR,哪两个是正确的?

时间:2018-11-02 23:31:03

标签: oracle

  • A。每当发生COMMIT时,LGWR总是写入重做日志。
  • B。每次发生ROLLBACK时,LGWR总是写入重做日志。
  • C。 LGWR从不向重做日志写入单个COMMIT。
  • D。 DBWR写入脏缓冲区时,LGWR可能会写入重做日志。
  • E。 LGWR可以在同一写入请求中写入多个COMMIT。
  • F。当DBWR写入脏缓冲区时,LGWR总是写入重做日志。

答案是DE。

但是为什么呢?

为什么A和F错了?

1 个答案:

答案 0 :(得分:1)

  

为什么A和F错了?

这不是很明显,但是《 Oracle概念指南》确实有解释。您应该check it out.

反正......

  

A。每当发生COMMIT时,LGWR总是写入重做日志。

用户提交事务是触发LGWR写入重做日志的事情之一。因此,似乎A是正确的。但是概念指南说:“当活动频繁时,LGWR可以使用组提交”。。如果在LGWR仍写入重做日志时有几个用户提交了他们的事务,则这些提交将保留在重做缓冲区中,然后在LGWR释放时将所有这些提交都写入。

因此,每次提交都没有一次写操作。这就是为什么E是正确的。

  

F。当DBWR写入脏缓冲区时,LGWR总是写入重做日志。

概念指南说:”“在DBW可以写入脏缓冲区之前,数据库必须将与更改缓冲区有关的重做记录写入磁盘(预写协议)。如果DBW发现某些重做记录,尚未写入,它会向LGWR发出信号,将记录写入磁盘,并等待LGWR完成,然后再将数据缓冲区写入磁盘。”

所以F是不正确的,因为LGWR不一定总是在DBWR写入时总是写入。这就是为什么D是正确的。