修改redo log 的大小

alert日志中含有大量警告信息:“Thread 1 cannot allocate new log, sequence 320xx Checkpoint not complete”

触发checkpoint条件其中有一条是redo切换时,观察告警日志发现大量的日志切换动作,说明该checkpoint就是由redo日志切换造成的,而checkpoint会触发DBWn将data buffer cache中的dirty block刷到datafile中,而checkpoint not complete说明data buffer cache中的dirty block还没有写到datafile中redo就又要切换,就会出现“Thread 1 cannot allocate new log”。

解决方法:

修改redo日志的大小并添加日志组后问题解决。

set lines 200 pages 300
col member for a60
select a.thread#,a.group#,b.member,b.type,a.status,a.bytes/1024/1024 MB from v$log a,v$logfile b where a.group#=b.group#
union all
select a.thread#,a.group#,b.member,b.type, a.status,a.bytes/1024/1024 MB from v$standby_log a,v$logfile b where a.group#=b.group#;


THREAD# GROUP# MEMBER TYPE STATUS MB
---------- ---------- ----------------------------------------------------------

可以看到,每个redo只有50MB,且每个线程只有两组。

因为redo不能直接修改大小,因而采用先增加大一点的新redo然后删除旧redo的方式。


增加新的redo,因为RAC环境下有多个日志线程,所以在添加日志时必须指定线程号:

每个节点实例用到的联机日志就是一个Redo Thread,单实例有且只有一个Redo Thread。
在RAC环境下,每个节点实例都需要自己的联机日志,也就是每个节点实例都有自己的Redo Thread。
这种每个节点实例一个Redo Thread,该设计是为了避免实例间共享Redo文件引发的竞争,提高系统性能。
RAC数据库通过thread这个参数用来指定节点实例使用的Redo Thread线程号,一般和该实例的INSTANCE_NUMBER参数相同。
通过视图V$LOG的THREAD#列可以确认日志组所属的线程。


alter database add logfile thread 1
group 5 '+DG_ORA/ipcc/redo05.log' size 200M,
group 6 '+DG_ORA/ipcc/redo06.log' size 200M;

alter database add logfile thread 2
group 7 '+DG_ORA/ipcc/redo07.log' size 200M,
group 8 '+DG_ORA/ipcc/redo08.log' size 200M;


当原日志组的状态为 INACTIVE 时方可删除

删除日志组的命令如下:
alter database drop logfile group N;
#其中N对应GROUP#

如果redo的状态不是INACTIVE,可以执行如下两条sql切换redo
alter system switch logfile;
alter system checkpoint;

 然后删除旧的redo

alter database drop logfile group 1;
alter database drop logfile group 2;

alter database drop logfile group 3; 
alter database drop logfile group 4;

数据库中删除之后,物理文件并没有被删除,手动删除对应的redo物理文件

db1:~# su - grid
grid@db1:~> asmcmd
ASMCMD> ls
redo01.log
redo02.log
redo03.log
redo04.log
redo05.log
redo06.log
redo07.log
redo08.log
spfileipcc.ora

ASMCMD> rm redo01.log
ASMCMD> rm redo02.log
ASMCMD> rm redo03.log
ASMCMD> rm redo04.log

删除完成后,再增加新的redo

alter database add logfile thread 1
group 1 '+DG_ORA/ipcc/redo01.log' size 200M,
group 2 '+DG_ORA/ipcc/redo02.log' size 200M;

alter database add logfile thread 2
group 3 '+DG_ORA/ipcc/redo03.log' size 200M,
group 4 '+DG_ORA/ipcc/redo04.log' size 200M;

 验证结果

set lines 200 pages 300
col member for a60
select a.thread#,a.group#,b.member,b.type,a.status,a.bytes/1024/1024 MB from v$log a,v$logfile b where a.group#=b.group#
union all
select a.thread#,a.group#,b.member,b.type, a.status,a.bytes/1024/1024 MB from v$standby_log a,v$logfile b where a.group#=b.group#;

原文地址:https://www.cnblogs.com/connected/p/13933047.html