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

  • 答案是DE。

    但为什么?

    为什么A和F是错误的?

    最佳答案

    为什么A和F是错误的?

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

    无论如何....

    答:LGWR总是在每次COMMIT发生时写入重做日志。

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

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

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

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

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

    10-08 13:36