在对数据库进行正常操作的过程中,重做信息是何时写入重做日志文件的呢?
是截止到我COMMIT时才把之前的内容一次性写入REDOLOG?还是在我操作时就先写入重做日志信息缓冲区,然后等COMMIT时再从重做日志信息缓冲区写入REDOLOG里?

解决方案 »

  1.   

    应该是你COMMIT的时候先写日志然后更新到物理设备.而你执行一条更新语句没有提交的时候,oracle会把原来的数据放在一个称为undo段(undo segment)的数据区,这个数据区也称为回滚段(rollback segment).
    oracle 有一个系统修改号(System Change Number)或系统提交号(System Commit Number),可以通过dbms_flashback.get_system_change_number来得到,SCN是Oracle的内部时钟:每次发生提交时,这个时钟就会向上滴答(递增)。你就可以通过SCN来等到一条记录的不同版本.比如:你更新前先通过
    exec :scn := dbms_flashback.get_system_change_number得到SCN,然后你更新了一条数据,这时候无论你提交没提交都可以通过
    select * from emp AS OF SCN :scn来得到没更新前的数据.
      

  2.   

    每3秒
    当满1/3或1M
    碰到任何事物的commit
      

  3.   


    对1/3是指log buffer参数的1/3