浅析Log Buffer

Oracle 日志原理:
以buffer为单位,按照buffer被修改的时间顺序记录buffer中被修改的时间、地址以及修改的动作(update/insert/delete等)
实际的日志产生server process对buffer cache的修改,首先将修改的动作记录在PGA中,在满足一定条件后,就会将记录写到redo log buffer中,最终LGWR将这些记录写到redo log file中。

作用:
保证已经提交的事务不会丢失。对事务进行提交(COMMIT)后,数据库首先就会去检查redo log buffer中对数据块的修改记录是否已经完全被LGWR写入到了日志文件中,没有完全写完就会触发LGWR将该事务redo log buffer中的记录写到日志文件中,之后再先用户返回事务已经提交,光标跳转。
由于LGWR是按照事务被修改的时间 顺序将记录写到日志文件,这样会提高当修改数据块很大时,可以提高用户的体验性,因为此时数据库不会去等待data buffer中被修改的数据块被写到磁盘,只需要等待LGWR完成redo log buffer中的记录就行。
注意:LGWR会绕过OS级的缓存,直接将redo log写到磁盘缓存中,最终磁盘缓存将记录写到磁盘中

Log Buffer的设置:
9i 以前一般设置为3M
在10g以后,database自动设置该大小,但是它遵循一个原则,“Fixed SGA Size”+“redo Buffer” 是granule size的整数倍
  select * from v$saginfo where name in('Fixed SGA Size','Redo Buffers','Granule Size');

LGWR触发条件
 1:用户提交
 2:有1/3重做日志缓冲区未被写入磁盘
 3:有大于1M的重做日志缓冲区未被写入磁盘
 4:每个3秒中
 5:DBWR需要写入的数据的SCN大于LGWR记录的SCN,DBWR触发LGWR写入

归档模式:
只有当数据库运行在归档模式的时候,LGWR才会将redo log buffer中的数据进行归档,即写到磁盘中。
启用/关闭归档(只能在mount状态):alter database archivelog/noarchivelog;
手动日志切换(一般自动切换为10min~20min):alter system switch logfile;

日志的相关一些操作
添加一个日志组:alter database add logfile group 4 '/u01/app/oracle/oradata/dbtest/redo04.log' size 10M;
添加一个日志文件:alter database add logfile member '/u01/app/oracle/oradata/dbtest/redo04_1.log' to group 4;
删除一个日志组:alter database drop log file group 4;
删除一个日志文件:alter database drop logfile  '/u01/app/oracle/oradata/dbtest/redo04_1.log' ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值