ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 实例恢复的简要解析

实例恢复的简要解析

原创 Linux操作系统 作者:husthxd 时间:2005-04-27 00:00:00 0 删除 编辑

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-21788/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
长期从事政务、金融等行业产品研发和架构设计工作,对Oracle、PostgreSQL以及大数据等相关技术有深入研究。现就职于广州云图数据技术有限公司,系统架构师。

注册时间:2007-12-28

  • 博文量
    1144
  • 访问量
    3619119