如果在线日志文件设置过小,会导致日志切换非常频繁。可以通过以下步骤进行在线Redo日志修改。
相关的知识普及:
1、Redo log File存放了Redo log信息,最少有两组日志文件,供Oracle循环使用。
2、Redo log File每组最少一个,建议两个,防止损坏而导致的数据丢失。
3、每组中的文件大小必须一致,因为他们是同时修改的,不同组的文件大小可以不一致。
4、每组中的文件个数必须一致。
由于ORACLE并没有提供类似RESIZE的参数来重新调整REDO LOG FILE的大小,因此只能先把这个文件删除了,然后再重建。又由于ORACLE要求最少有两组日志文件在用,所以不能直接删除,必须要创建中间过渡的REDO LOG日志组。因此,如果只是修改REDO LOG FILE的大小,建议的操作步骤应该如下:
1) 先创建两组新的日志组5、6
2) SWITCH LOGFILE到新创建的日志组5、6
3) 删除旧的日志组1、2、3
4) 重建旧的日志组1、2、3
5) SWITCH LOGFILE到日志组1、2、3
6) 删除过渡的日志组5、6
但本次操作,既要修改原有日志组的大小,又要增加新的日志组,所以省去了中间过渡日志组的操作,操作过程如下:
1) 查看当前日志组的状态,GROUP编号,日志文件所在的位置。
SQL> SELECT GROUP#, MEMBERS, BYTES / 1024 / 1024 BYTE_MB, STATUS FROM V$LOG;
GROUP# MEMBERS BYTE_MB STATUS
---------- ---------- ---------- ----------------
1 1 500 CURRENT
2 1 500 INACTIVE
3 1 500 INACTIVE
SQL> col member for a50
SQL> SELECT GROUP#, MEMBER FROM V$LOGFILE;
GROUP# MEMBER
---------- --------------------------------------------------
1 /SDS/u01/app/oracle/oradata/ora11g/redo1.log
2 /SDS/u01/app/oracle/oradata/ora11g/redo2.log
3 /SDS/u01/app/oracle/oradata/ora11g/redo3.log
2) 增加新的日志组
SQL> alter database add logfile group 4 '/SDS/u01/app/oracle/oradata/ora11g/redo.4.log' size 500M;
SQL> alter database add logfile group 5 '/SDS/u01/app/oracle/oradata/ora11g/redo.5.log' size 500M;
SQL> alter database add logfile group 6 '/SDS/u01/app/oracle/oradata/ora11g/redo.6.log' size 500M;
查看新增日志组的状态
SQL> SELECT GROUP#, MEMBERS, BYTES / 1024 / 1024 BYTE_MB, STATUS FROM V$LOG;
GROUP# MEMBERS BYTE_MB STATUS
---------- ---------- ---------- ----------------
1 1 500 CURRENT
2 1 500 INACTIVE
3 1 500 INACTIVE
4 1 500 UNUSED
5 1 500 UNUSED
6 1 500 UNUSED
6 rows selected.
可以看到,新增的三组日志GROUP4、5、6,状态为UNUSED。
3) 切换当前的redo log
SQL> ALTER SYSTEM SWITCH LOGFILE;
4) 查看切换后的状态
SQL> SELECT GROUP#, MEMBERS, BYTES / 1024 / 1024 BYTE_MB, STATUS FROM V$LOG;
GROUP# MEMBERS BYTE_MB STATUS
---------- ---------- ---------- ----------------
1 1 500 ACTIVE
2 1 500 INACTIVE
3 1 500 INACTIVE
4 1 500 ACTIVE
5 1 500 ACTIVE
6 1 500 CURRENT
6 rows selected.
可以看见,现在切换到新增的第6组日志上使用。
5) 改变检查点
SQL> ALTER SYSTEM CHECKPOINT;
System altered.
6) 查看切换后的状态
SQL> SELECT GROUP#, MEMBERS, BYTES / 1024 / 1024 BYTE_MB, STATUS FROM V$LOG;
GROUP# MEMBERS BYTE_MB STATUS
---------- ---------- ---------- ----------------
1 1 500 INACTIVE
2 1 500 INACTIVE
3 1 500 INACTIVE
4 1 500 INACTIVE
5 1 500 INACTIVE
6 1 500 CURRENT
6 rows selected.
可以看见,GROUP1、2、3三组日志状态变成了INACTIVE了,这时候可以删除它们。
7) 删除状态为inactive的日志
SQL> ALTER DATABASE DROP LOGFILE GROUP 1;
Database altered.
SQL> ALTER DATABASE DROP LOGFILE GROUP 2;
Database altered.
SQL> ALTER DATABASE DROP LOGFILE GROUP 3;
Database altered.
8) 重建新的GROUP 1、2、3三组日志
SQL> alter database add logfile group 4 '/SDS/u01/app/oracle/oradata/ora11g/redo.4.log' size 1G;
SQL> alter database add logfile group 5 '/SDS/u01/app/oracle/oradata/ora11g/redo.5.log' size 1G;
SQL> alter database add logfile group 6 '/SDS/u01/app/oracle/oradata/ora11g/redo.6.log' size 1G;
这时候创建成功了!
9) 切换测试
SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.
10) 检查切换后的状态
SQL> SELECT GROUP#, MEMBERS, BYTES / 1024 / 1024 BYTE_MB, STATUS FROM V$LOG;
GROUP# MEMBERS BYTE_MB STATUS
---------- ---------- ---------- ----------------
1 1 1000 INACTIVE
2 1 1000 INACTIVE
3 1 1000 INACTIVE
4 1 500 INACTIVE
5 1 500 INACTIVE
6 1 500 CURRENT
6 rows selected.
11) 多切换几次,让他每组日志都使用一遍。
SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.
日志切换没有发生错误,每组日志都能正常使用和切换。顺利结束!