冷静、沉淀

实例恢复的简要解析

上一篇 / 下一篇  2005-04-27 00:00:00 / 个人分类:Oracle

How oracle server determine about the changed blocks (dirty blocks) after a checkpoint event by

which the DBWR writes dirty buffers in data files and still user do not commit the transaction or rollback.


有点复杂,下面假定有这么一个简要的场景:

用一个update语句更新1000行,oracle会执行以下操作:

a.在SGA中生成更新过的datablocks

b.在SGA中生成回滚记录

c.为SGA中的datablocks和回滚记录均生成重做日志信息

在这个过程中,Oracle可能会把REDO信息写入到日志文件中。要记住:在checkpoint一个数据块之前(也就是DBWR写datablock前),

保护该block的日志会先写入到日志文件中。不可能存在数据块已写入磁盘但日志还没有写入的情况。

假设在update的过程中数据库服务器宕机,那么可能会发生下列事件:

1.某些REDO信息已经写入到日志文件中,但数据块和回滚块没有写入到磁盘上。当系统重起后,会应用REDO日志,

在SGA中重构回滚块和数据块。前滚完成后,Oracle会应用先前构造的回滚块进行回滚,这样看起来事务好像从来没有发生过一样。

2.某些日志和某些数据块以及回滚块已经写入到磁盘上。首先执行1的操作,接着前滚,应用日志到还没有进行检查点的数据块上,然后再回滚

3.没有日志写入到磁盘上。当系统重起后,事务看起来就好像没有发生过一样,无需恢复

译自

http://asktom.oracle.com/pls/ask/f?z=4950:8:17535896361034412881::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:1539606184994


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-12  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 13634
  • 日志数: 838
  • 建立时间: 2007-12-28
  • 更新时间: 2008-10-02

RSS订阅

Open Toolbar