一、创建4个新的日志组

1
2
3
4
alter database add logfile group 4 ('/oradata/orcl/redo04.log') size 2048M;
alter database add logfile group 5 ('/oradata/orcl/redo05.log') size 2048M;
alter database add logfile group 6 ('/oradata/orcl/redo06.log') size 2048M;
alter database add logfile group 7 ('/oradata/orcl/redo07.log') size 2048M;

二、切换当前日志到新的日志组

1
2
3
4
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
--alter system archive log current;

三、删除旧的日志组
通过select * from v$log;
查看group 1/2/3 上的redo状态为inactive后,方可执行如下命令。

1
2
3
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;
  1. CURRENT指当前的日志文件,在进行实例恢复时是必须的;
  2. ACTIVE是指活动的非当前日志,在进行实例恢复时会被用到。Active状态意味着,Checkpoint尚未完成,因此该日志文件不能被覆盖。
  3. INACTIVE是非活动日志,在实例恢复时不再需要,但在介质恢复时可能需要。
  4. UNUSED表示该日志从未被写入,可能是刚添加的,或RESETLOGS后被重置。

四、操作系统下删除原日志组1、2、3中的文件

注意:每一步删除drop操作,都需手工删除操作系统中的实体文件。

1
2
3
rm -rf /oradata/orcl/redo01.log
rm -rf /oradata/orcl/redo02.log
rm -rf /oradata/orcl/redo03.log

五、重建日志组1、2、3

1
2
3
ALTER DATABASE ADD LOGFILE GROUP 1 ('/oradata/orcl/redo01.log') SIZE 2G;
ALTER DATABASE ADD LOGFILE GROUP 2 ('/oradata/orcl/redo02.log') SIZE 2G;
ALTER DATABASE ADD LOGFILE GROUP 3 ('/oradata/orcl/redo03.log') SIZE 2G;

六、切换日志组
多执行几次如下命令,同时通过select * from gv$log来观察4/5/6/7下的redo日志状态是不是为inactive;
查看日志组的状态看一下哪个是当前组,哪个是inactive状态的,删除掉inactive的那个组。如果状态为current和active 在删除的时候会报错。

1
alter system switch logfile;

七、删除中间过渡用的日志组4、5、6、7

1
2
3
4
alter database drop logfile group 4;
alter database drop logfile group 5;
alter database drop logfile group 6;
alter database drop logfile group 7;

到操作系统下删除原日志组4、5、6、7中的文件

八、备份当前的最新的控制文件
因日志组发生变化,建议备份一次controlfile文件。

1
SQL> alter database backup controlfile to trace resetlogs;