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/
,如需转载,请注明出处,否则将追究法律责任。