想请教一下,如果一个事务非常大,已经写满了所有redo log files了,接下来会怎样?

解决方案 »

  1.   

    不会把,这么大的事务?加大REDO,
      

  2.   

    如果真的都写满了,不过除非你的REDO非常的小,否则是会归档,如果没有归档,就覆盖真的都写满了,就覆盖,UNDO回滚段够用就好了,不够用就挂了
      

  3.   

    当检查点发生后,会触发lgwr,lgwr会把此时SCN以前在redo buffer中的所有操作写到redo log file,同时lgwr也会触发dbwr进程,dbwr也开始把此刻以前database buffer中的dirty buffer队列中的操作写入data file。
    其实检查点发生后,就是lgwr和dbwr写buffer到磁盘文件的过程,但是两者的读写速度时不同的,dbwr写buffer到数据文件的过程相对较慢,因为dbwr写过程是一个随机读取存储的过程。Lgwr写buffer到redo文件的过程比dbwr要快很多,因为lgwr是顺序读取写入的。由于以上lgwr和dbwr写操作的速度不同,就产生了一个等待问题。即当lgwr
    轮循一圈后,要进行日志切换,覆盖redo log file,但是此时dbwr还没有写完,那么lgwr就会出现等待,oracle也会hang在那里,同时alter文件中会提示一个相应的提示checkpoint not complete。等检查点完成后数据库自动恢复正常。
    当log switch时,会触发检查点,标记检查点时,DBWR要把log file中covered by the log being checkpointed的数据写入到数据文件上,如果Dbwr没有写完,那么前一个logfile是不能被覆盖的。因此必须等检查点完毕,也可以说是将要被覆盖的日志相关的数据块全部写入数据文件后,该日志文件才能被覆盖!
      

  4.   

    日志写入进程工作模式:
                   > 每3秒一次.
                   > 无论何时有人提交请求.
                   > 要求LGWR切换日志文件.
                   > 重做缓冲区1/3满,或者包含了1 MB的缓存重做日志数据 ;
    日志文件是会重复切换写的的!有没有出现:ORA-01555:snapshot too old