我大概了解了下 无论使用者修改的数据有没有被提交都会有一个LGWR的进程将之前DML矢量写入重做日志文件中,然后通过这个日志可以还原没有提交的数据。重做日志文件写满的话会切换下一个重做日志文件,一共三个这么轮流,此时会将前一个日志文件写入归档日志文件中。那非归档模式的话是不是指在日志切换的时候没有写入归档日志文件的这个动作?
如果是这样的话在非归档模式下数据库还原没有被提交的数据是怎么办到的?

解决方案 »

  1.   


    如果是这样的话在非归档模式下数据库还原没有被提交的数据是怎么办……
    还原未提交的数据,好像只有个闪回事务的查询,这个是利用的是撤销表空间的撤销段中的数据。
    和撤销表空间的可用大小和undo_retendtion有关。
      

  2.   

    同意这个!
    不管是归档模式还是非归档模式,还原未被提交的数据都是使用回滚段的rollback命令,与日志是否被归档无关。
    所谓归档,是redolog被覆盖前会被保留一份归档,redolog里记录的数据库中所有的改变操作。
      

  3.   

    那我就搞不懂了 既然这些未提交数据都在回滚段里面那DBWn写脏数据入磁盘难道是有选择性将的写未提交的数据写入回滚段?
      

  4.   

    如果回滚都要从redolog取数据,效率也受影响啊.
      

  5.   

    DBWN 写入操作一般都是在事务提交后操作的。
    所以都是有在重做日志中有记录的 所以放心写入磁盘。
      

  6.   

    [Quote=引用 7 楼 feixianxxx 的回复:]DBWN 写入操作一般都是在事务提交后操作的。说错了,DBWN动作与事务提交无关
      

  7.   


    希望详解..而且我写的是一般...
    一版事务提交后 日志进程先把日志缓冲区的日志条目写入重做日志 
    然后 发小心给DBWR进程写数据。。当然DBWR还在缓冲区需要存放新的磁盘的数据的时候 主动的去写脏数据到磁盘
      

  8.   

    重新整理下问题 DBWn把我修改过但没有提交的数据写到哪里去了?  datafile 
    那我不提交 关闭数据库 我的这个被修改过的数据怎么还原呢   日志 
    在线重做日志是吧,这个日志会不停的轮流覆盖写,他会不会把我之前的操作覆盖了?   archvielog 这个是归档模式下的吧? 那非归档模式呢? ??????
      

  9.   

    这贴结了 无论是不是归档模式redo日志中 DML矢量信息都是active状态,不存在覆盖的问题啊