数据库恢复方面, 遇到系统故障时候,比如断电, 1 一些未完成的transaction可能已经被送到物理数据库,这种情况下需要undo这些未完成transaction 2 一些已经完成的transaction可能还在缓冲区,没有写到物理磁盘。这种情况下需要重做已经提交的transaction。
问题:一个transaction完成与否的标准是什么? 不是是否已经写入到物理磁盘,commit成功吗?
谢谢。

解决方案 »

  1.   

    是不是commit指令发出后,先成功logging了这条指令。但是还没有写入物理磁盘时发生了系统故障。这样,按照log看来,这是个已经完成的transaction,但是仍然有内容在内存中。
      

  2.   

    >一个transaction完成与否的标准是什么?
    当然是你commit了,就算完成了
    >2 一些已经完成的transaction可能还在缓冲区,没有写到物理磁盘。这种情况下需要重做已经提交的transaction
    你commit了,但是数据只写进了data buffer中,此时断电了,就要用redo来恢复>1 一些未完成的transaction可能已经被送到物理数据库,这种情况下需要undo这些未完成transaction
    事务大,数据块已经被更改了,此时做一个rollback, 就要用undo来还原数据《oracle9i 10g 编程艺术>>讲的比较细