`
hougbin
  • 浏览: 490960 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

联机重做日志文件 redo log

阅读更多

(1)作用

  Oracle 使用重做日志记录对数据库所做的所有更改。Oracle 在重做记录(重做缓冲区中一个描述更改的条目)中记录每一个更改。例如,假定用户更新了工资单表中的一个列值(从 5 改为 7)。Oracle 将旧值记录在撤销记录中,将新值记录在重做记录中。因为重做日志存储了对数据库所做的每次更改,所以这个事务的重做记录实际上包含了三个部分:8 w6 r. C& m
 1、对撤消事务表所做的更改(撤销表空间中操作)
 2、对撤消数据块所做的更改 (撤销表空间中操作)
 3、对工资单表数据块所做的更改 (重做日志文件记录)
 如果用户随后提交了对工资单表所做的更新 — 使得由 SQL 语句执行的更改变为永久性的 — 那么 Oracle 将生成另一条重做记录。通过这种方式,系统仔细地监视着在数据库中发生的一切。

 

(2)重做日志文件的重复使用

  日志写入器 (LGWR) 将重做日志条目写到磁盘上。重做日志数据是在系统全局区的重做日志缓冲区中生成的。随着事务的提交和日志缓冲区的充满,LGWR 将重做日志条目写到一个联机重做日志文件中。LGWR 以循环方式书写联机重做日志文件:当它写满了当前联机重做日志文件(称为活动文件)时,LGWR 将写入下一个可用非活动重做日志文件。LGWR 循环使用据库中的联机重做日志文件,覆盖旧的重做数据。根据是否启用了存档,写满的重做日志文件可按以下方式进行重用:
   1、如果禁用了存档,则一旦将记录在日志中的更改保存到数据文件中,就可再次使用写满的联机重做日志了。

   2、如果启用了存档,则一旦将更改保存到数据文件中并将文件存档后(写入归档日志文件),就可再次使用写满的联机重做日志了。

 

(3)重做日志文件在 数据更新中所处的位置

一个数据库至少要有两个联机重做日志文件组。

下面以一条update语句来说明联机重做日志的作用。
①启动事务,在数据缓冲区查找所需的数据。如果没找到,则通select语句将update语句所需的数据放入数据缓冲区。
②启动事务的同时,Oracle会启动一个撤销段与用户事务匹配。1 t0 [% Y* R& f& m
③SMON进程生成重做。即将update语句更新列的新值及旧值放入日志缓冲区。
④SMON进程更新数据库缓冲区相关数据。即将变化的列一时更新到数据块、未变化的列更新到撤销段

⑤执行commit提交事务,LGWN进程将日志缓冲区的数据写入联机重做日志文件。. f3 `2 G2 F8 c, I4 O
⑥待检查点到来时,CKPT进程触发DBWn进程,将数据缓冲区的数据更新到数据文件。" G1 k9 L1 v: f8 O; u$ E
从上面的分析可以得出,联机重做日志文件的更新总是优先于数据文件的更新。因此,联机重做日志文件在做实例恢复具有关键作用。

(4) 优化使用重做日志文件

   应当将redo文件放在不同磁盘上,并且避免与数据文件放在同个磁盘争用IO

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics