Oracle 数据库告警日志产生大量Checkpoint not complete的处理

(1)报错信息

Wed Sep 16 14:31:48 2020

Thread 1 cannot allocate new log, sequence 1715

Checkpoint not complete

  Current log# 1 seq# 1714 mem# 0: /U01/app/oracle/oradata/testdb/redo01a.rdo

  Current log# 1 seq# 1714 mem# 1: /U01/app/oracle/oradata/testdb/redo01b.rdo

Thread 1 advanced to log sequence 1715 (LGWR switch)

  Current log# 2 seq# 1715 mem# 0: /U01/app/oracle/oradata/testdb/redo02a.rdo

  Current log# 2 seq# 1715 mem# 1: /U01/app/oracle/oradata/testdb/redo02b.rdo

Thread 1 cannot allocate new log, sequence 1716

Checkpoint not complete

  Current log# 2 seq# 1715 mem# 0: /U01/app/oracle/oradata/testdb/redo02a.rdo

  Current log# 2 seq# 1715 mem# 1: /U01/app/oracle/oradata/testdb/redo02b.rdo

Thread 1 advanced to log sequence 1716 (LGWR switch)

  Current log# 3 seq# 1716 mem# 0: /U01/app/oracle/oradata/testdb/redo03a.rdo

  Current log# 3 seq# 1716 mem# 1: /U01/app/oracle/oradata/testdb/redo03b.rdo

Wed Sep 16 14:32:02 2020

(2)触发Checkpoint检查点进程的事件

(1)redo日志切换;

(2)LOG_CHECKPOINT_TIMEOUT 这个延迟参数的到达

(3)相应字节(LOG_CHECKPOINT_INTERVAL* size of IO OS blocks)被写到当前的重做日志

(4)ALTER SYSTEM SWITCH LOGFILE 这个命令会直接导致checkpoint发生

(5)ALTER SYSTEM CHECKPOINT

 (3)checkpoint not complete问题

         checkpoint被触发的条件之一是发生redo log switch,Checkpoint的具体工作包括:触发DBWr向磁盘写入dirty data,把checkpoint信息更新到datafile header和control file里。假设我们只有两个redo log group:group 1和group 2,并且buffer cache中总是有大量的dirty block需要写入datafile,当redo log从group 1 switch to group 2的时候,会触发checkpoint, checkpoint要求DBWr把buffer cache中的dirty block写入datafile。然而,当我们再次用完group 2里面的空间,需要再次switch to group 1并重用group 1的时候,如果我们发现redo log group 1所保护的那些dirty block还没有完全写入到datafile,整个数据库必须等待DBWr把所有的dirty block写入到datafile之后才能做其他的事情,这就是我们遇到的"checkpoint not complete"问题。

(4)cannot allocate new log

          Checkpoint will flush dirty block to datafile, 从而触发DBWn书写dirty buffer,等到redo log覆盖的dirty block全部被写入datafile后才能使用redo log(循环使用),如果DBWn写入过慢,LGWR必须等待DBWn完成,则这时会出现“checkpoint not completed!”。 所以当出现checkpoint not competed的时候,还会伴随cannot allocate new log的错误。

         Checkpoint是为了内存中已经被修改的数据块与磁盘数据文件同步的一种数据库事件。它提供了一种保持事务提交以后数据一致的手段。往Oracle磁盘写脏数据的机制与事务提交不是同步的。所以checkpoint有两个目的,一个是确保数据一致性,一个是使数据库能快速的恢复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#慧#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值