LGWR的触发写redo日志的条件
1.每3秒钟
2.事物commit
3.日志缓冲区3分之一满
4.缓冲区日志达到1M
5.dbwr写脏数据之前
6.checkpoint 
如果系统突然崩溃也有可能日志缓冲区里的日志还没有写到日志文件中,可能会有数据丢失

解决方案 »

  1.   

    谢谢!
    提交命令commit是不是没有真正地写数据文件,而只是写了日志文件对吧?那为什么以前书上都告诉说commit就是把修改的数据从内存写到数据文件里了?commit时到底发生了什么?
      

  2.   

    commit时写redo日志文件,并没有把数据写到数据文件中,写数据文件是dbwr触发的
    触发dbwr条件
    1、当dirty list达到一定数量,导致Server Proceess通知DBWn写赃数据
    2、当扫描LRU list达到一定数量还未找到free buffer 时,停止搜索free buffer,直接通知DBWn写脏数据
    3、checkpoint写数据oracle这样设计的原因是 日志文件是顺序写到日志文件中,很快  数据库文件是随机写,写磁盘很慢
      

  3.   

    如果你们指定默认在闪回恢复区SQL> archive log list; 
    Database log mode              Archive Mode
    Automatic archival             Enabled
    Archive destination            USE_DB_RECOVERY_FILE_DEST
    Oldest online log sequence     156
    Next log sequence to archive   158
    Current log sequence           158
    通过 show parameter db_recovery_file_dest 查看闪回恢复区的路径