ITPub博客

首页 > 数据库 > Oracle > Checkpoint not complete

Checkpoint not complete

Oracle 作者:General_715 时间:2014-11-06 14:43:38 0 删除 编辑
alert日志
ALTER SYSTEM ARCHIVE LOG
SUCCESS: diskgroup ARCHDG was mounted
SUCCESS: diskgroup ARCHDG was dismounted
SUCCESS: diskgroup ARCHDG was mounted
SUCCESS: diskgroup ARCHDG was dismounted
SUCCESS: diskgroup ARCHDG was mounted
Tue Nov  4 17:55:03 2014
Thread 1 cannot allocate new log, sequence 63
Checkpoint not complete
  Current log# 2 seq# 62 mem# 0: +REDODG/redo/redo121.log
  Current log# 2 seq# 62 mem# 1: +REDODG/redo/redo122.log
Tue Nov  4 17:55:07 2014
Thread 1 advanced to log sequence 63 (LGWR switch)
  Current log# 3 seq# 63 mem# 0: +REDODG/redo/redo131.log
  Current log# 3 seq# 63 mem# 1: +REDODG/redo/redo132.log
Tue Nov  4 17:55:28 2014
SUCCESS: diskgroup ARCHDG was dismounted
SUCCESS: diskgroup ARCHDG was mounted
SUCCESS: diskgroup ARCHDG was dismounted
SUCCESS: diskgroup ARCHDG was mounted
SUCCESS: diskgroup ARCHDG was dismounted
SUCCESS: diskgroup ARCHDG was mounted
Tue Nov  4 17:55:52 2014

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRS
---------- ---------- ---------- ---------- ---------- --- ---------------- ----
         1          1         73 1073741824          2 YES ACTIVE
         2          1         74 1073741824          2 NO  CURRENT
         3          1         72 1073741824          2 YES ACTIVE
         4          2         58 1073741824          2 YES ACTIVE
         5          2         59 1073741824          2 YES ACTIVE
         6          2         60 1073741824          2 NO  CURRENT
status中没有inactive,全为active

原因
当进程redo切换到时候,会触发checkpoint事件。DBWn会把buffer cache中的dirty cache写入磁盘。另外就是把最近的系统的scn更新到datafile header和
control file中。
假设我们只有两个redo log group:group 1和group 2,并且系统中总是有大量的dirty block需要写入datafile,当我们从group 1 switch to group 2的时候,会触发checkpoint, checkpoint要求DBWn把buffer cache中的dirty block写入datafile,然而,当我们再次用完group 2里面的空间,需要再次switch to group 1并重用group 1的时候,如果我们发现redo log group 1所保护的那些dirty block还没有完全写入到datafile,整个数据库必须等待DBWn把所有的dirty block写入到datafile之后才能做其他的事情,这就是我们遇到的“checkpoint not complete”问题。这个问题往往暗示了redo log的配置有问题,就本例而言,要么是redo log太小,要么是像我们这里的redo log group太少,只有2个。而这个问题的解决方案就是加大redo log或添加更多redo log group,不管哪一种解决方案,我们的目的都是给DBWn争取更多的时间。
在出现这个错误的时候,数据库是hang住的,在等待checkpoint完成。
解决办法:

a. 添加更多的日志文件

b. 加大checkpoint 触发的频度

c. 减小redo log 的size

d. 提高DBWR的效率

e. 为了更好的了解系统的运行,可以设置

log_checkpoint_interval = 0 log_checkpoint_timeout = 0 log_checkpoints_to_alert=True


增加联机日志文件

alter database add logfile thread 1 group 5('+DATADG/apts/onlinelog/group5_1','+ARCHDG/apts/onlinelog/group5_2') size 200M;
alter database add logfile thread 2 group 6('+DATADG/apts/onlinelog/group6_1','+ARCHDG/apts/onlinelog/group6_2') size 200M;
alter database add logfile thread 1 group 7('+DATADG/apts/onlinelog/group7_1','+ARCHDG/apts/onlinelog/group7_2') size 200M;
alter database add logfile thread 2 group 8('+DATADG/apts/onlinelog/group8_1','+ARCHDG/apts/onlinelog/group8_2') size 200M;

将联机日志文件切换到新增加的文件上使用,使1、2、3、4组联机日志文件状态变为INACTIVE

alter system switch logfile;

alter system checkpoint;

删除1、2、3、4组联机日志文件

alter database drop logfile group 1;

alter database drop logfile group 2;

alter database drop logfile group 3;

alter database drop logfile group 4;

重建联机日志1,2,3,4组并分配200M的空间
alter database add logfile thread 1 group 1('+DATADG/apts/onlinelog/group1_1','+ARCHDG/apts/onlinelog/group1_2') size 200M;
alter database add logfile thread 2 group 2('+DATADG/apts/onlinelog/group2_1','+ARCHDG/apts/onlinelog/group2_2') size 200M;
alter database add logfile thread 1 group 3('+DATADG/apts/onlinelog/group3_1','+ARCHDG/apts/onlinelog/group3_2') size 200M;
alter database add logfile thread 2 group 4('+DATADG/apts/onlinelog/group4_1','+ARCHDG/apts/onlinelog/group4_2') size 200M;

附:

修改Redo log 大小的操作方法:

查看当前日志组状态:

SQL> select group#,sequence#,bytes,members,status from v$log;

 

    GROUP#  SEQUENCE#  BYTES    MEMBERS STATUS

    ---------- ----------    ----------    ---------- ----------------

         1      14230   52428800          1    ACTIVE

         2      14231   52428800          1    CURRENT

         3      14229   52428800          1    INACTIVE

 

CURRENT: 表示是当前的日志。

INACTIVE:脏数据已经写入数据块。该状态可以drop。

ACTIVE: 脏数据还没有写入数据块。

 

查看当前日志组成员:

SQL> select member from v$logfile;

 

MEMBER

--------------------------------------------------------------------------------

/u03/oradata/newccs/redo03.log

/u03/oradata/newccs/redo02.log

/u03/oradata/newccs/redo01.log

 

 

添加online redo log组:

SQL> alter database add logfile group 4 ('/u03/oradata/newccs/redo04.log') size 100m reuse;

SQL> alter database add logfile group 5 ('/u03/oradata/newccs/redo05.log') size 100m reuse;

SQL> alter database add logfile group 6 ('/u03/oradata/newccs/redo06.log') size 100m reuse;

 

切换归档日志:

SQL> alter system switch logfile;

 

查看归档文件的状态,因为只有Inactive的我们才可以drop,它的数据块已经写入了数据块。如果是Active状态,表示这里的脏数据还没有写入写入数据库,手工加个全局检查点,督促CKPT马上唤醒DBWR写入脏数据


SQL>alter system checkpoint;

SQL>select group#,sequence#,bytes,members,status from v$log;

    GROUP#  SEQUENCE#  BYTES    MEMBERS STATUS

    ---------- ----------    ----------    ---------- ----------------

         1      14230   52428800          1    ACTIVE

         2      14231   52428800          1    ACTIVE

         3      14229   52428800          1    INACTIVE

   4      14229   52428800          1    CURRENT
          5
      14229   52428800          1    UNUSED
          6
      14229   52428800          1    UNUSED

 

因为5,6 我们还没有用,所以显示为UNUSED

 

删除redo log组:

SQL> alter database drop logfile group 1;

Database altered.

或者:

SQL> alter database drop logfile '/u03/oradata/newccs/redo01.log';

 

在添加redo log group 1. 

SQL> alter database add logfile group 1 ('/u03/oradata/newccs/redo01.log') size 100m reuse;

 

通过删除在添加,达到对redo log group 的resize. 

 

注意
1. 单纯加redo log group单个文件的大小没有作用,同一个group里,文件大小都是一致的。

2. 如果是归档模式的话,确保已经自动归档,如果手动归档的话,需要在alter system switch logfile锁死的时候,用alter system log current 来手动归档。或者通过alter system archive log start打开自动归档。否则的话,当redo log group切换完整个groups的时候,会一直等待状态(******). 

 

3. 《Oracle DBA必备技能详解》(Robert G.Freeman),上面建议redo log 最好是15分钟切换一次









来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24989466/viewspace-1322816/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-12-08

  • 博文量
    41
  • 访问量
    132424