1、存放所有事物日志。
重做日志的两个概念,重做日志组和重做日志组成员。
一个数据库中至少要有两个日志组文件,一组写完后再写另一组,即轮流写。每个日志组中至少有一个日志成员,一个日志组中的多个日志成员是镜相
关系,有利于日志文件的保护。
2、联机日志组的交换过程叫做切换。特别注意:日志切换在一个优化效果不好的数据库中会引起临时的“挂起”。挂起大致有两种情况:
在归档情况下,需要归档的日志来不及归档,而联机日志又需要被重新利用
检查点事件还没有完成(日志切换引起检查点),而联机日志需要被重新利用
解决这种问题的常用手段是:
i.增加日志组
ii.增大日志文件成员大小
通过v$log可以查看日志组,v$logfile可以查看具体的成员文件。
日志组的状态:
current:使用状态,该日志组正在使用中。
active: 激活状态,实例恢复时将需要该日志组。
inactive:非激活状态,实例恢复时不再需要该日志组。
unused:未使用状态,该日志组尚未记录过日志信息(新添加组)。
日志组成员的状态:
空:  该文件是可用/活动的(但不一定是正在使用的,参考v$log)
Stale: 表示该文件内容不完全 (系统特殊状态)
invalid:表明该文件暂不可访问(新添加镜像)
deleted:表明该文件已不再使用 (已删除)
3、修改重做日志文件
【添加日志组 (添加重做日志文件个数)】
SQL>alter database ora10 add logfile group 4
('/u01/app/oracle/oradata/ora10/redo04.log')
size5M;                                 新添加组状态为unused
SQL>select * from v$log;
GROUP#    THREAD#    SEQUENCE#         BYTES MEMBERS ARC STATUS
FIRST_CHANGE#FIRST_TIME
----------------------------------------------------------------------------------------------
1            1           26  52428800        1NO CURRENT
94803831-MAR-10
2            1           24  52428800        1NO INACTIVE
92684431-MAR-10
3            1           25  52428800        1NO INACTIVE
94763831-MAR-10
4            1           0     5242880        1YES UNUSED
0
【添加日志组成员(添加镜像文件)】
SQL>alter database ora10 add logfile member
2 '/u01/app/oracle/oradata/redo01.log' to group 1,
3 '/u01/app/oracle/oradata/redo02.log' to group 2,
4 '/u01/app/oracle/oradata/redo03.log' to group 3,
5 '/u01/app/oracle/oradata/redo04.log' to group 4;
Database altered.
SQL>select group#,status,type,substr(member,1,40) from v$logfile;
GROUP# STATUS   TYPE     SUBSTR(MEMBER,1,40)
--------------------------------------------------------------------------------------------------------
3        STALE   ONLINE   /u01/app/oracle/oradata/ora10/redo03.log
2        STALE   ONLINE   /u01/app/oracle/oradata/ora10/redo02.log
1                 ONLINE   /u01/app/oracle/oradata/ora10/redo01.log
4                 ONLINE   /u01/app/oracle/oradata/ora10/redo04.log
1       INVALID  ONLINE   /u01/app/oracle/oradata/redo01.log
2       INVALID  ONLINE   /u01/app/oracle/oradata/redo02.log
3       INVALID  ONLINE   /u01/app/oracle/oradata/redo03.log
4       INVALID  ONLINE   /u01/app/oracle/oradata/redo04.log
SQL>alter database ora10 add logfile member
2 '/u01/app/oracle/oradata/redo01.log' to group 1,
3 '/u01/app/oracle/oradata/redo02.log' to group 2,
4 '/u01/app/oracle/oradata/redo03.log' to group 3,
5 '/u01/app/oracle/oradata/redo04.log' to group 4;
SQL>alter system switch logfile;
SQL> select group#,status,type,substr(member,1,40) from v$logfile;
GROUP# STATUS    TYPE     SUBSTR(MEMBER,1,40)
---------------------------------------------------------------------
3        STALE    ONLINE   /u01/app/oracle/oradata/ora10/redo03.log
2        STALE    ONLINE   /u01/app/oracle/oradata/ora10/redo02.log
1                  ONLINE   /u01/app/oracle/oradata/ora10/redo01.log
4                  ONLINE   /u01/app/oracle/oradata/ora10/redo04.log
1        INVALID  ONLINE   /u01/app/oracle/oradata/redo01.log
2        INVALID  ONLINE   /u01/app/oracle/oradata/redo02.log
3        INVALID  ONLINE   /u01/app/oracle/oradata/redo03.log
4                  ONLINE   /u01/app/oracle/oradata/redo04.log
?
删除日志组 (消减重做日志文件个数)】
SQL>alter database oracle drop logfile group 4;
SQL>select * from v$logfile;
SQL>select * from v$log;
inactive和unused状态的日志组才能删除,current和active状态的日志组不能删除,要删除 current状态的日志组,应先用logswitch将current状态的
日志组转换为active状态,而要删 除active状态的日志组,则需用checkpoint将其转换为inactive状态,才能删除。
SQL>alter system switch logfile;
·【删除日志组成员(删除镜像文件)】
SQL>alter databaseora10 drop logfile
member '/u01/app/oracle/oradata/redo01.log';
日志组最后一个日志成员不能被删除;
current日志组中任何成员都不能删除;
其他情况下不能删组成员时,可用logswitch将日志组状态进行转换后才能删除。
【移动或重命名日志文件】
SQL>shutdown immediate
SQL>host mv /u01/app/oracle/oradtata/ora10/*.log /u01/app
SQL>startup mount
SQL>alter database rename file
2 '/u01/app/oracle/oradata/ora10/redo01.log',
3 '/u01/app/oracle/oradata/ora10/redo02.log',
4 '/u01/app/oracle/oradata/ora10/redo03.log',
5 '/u01/app/oracle/oradata/ora10/redo04.log'
6 to
7 '/u01/app/redo01.log',
8 '/u01/app/redo02.log',
9 '/u01/app/redo03.log',
10 '/u01/app/redo04.log';
Database altered.
SQL>alter database open;
Database altered.
SQL> select group#,status,type,substr(member,1,40) from v$logfile;
GROUP# STATUS TYPE  SUBSTR(MEMBER,1,40)
--------------------------------------------------------------
3          ONLINE /u01/app/redo03.log
2          ONLINE /u01/app/redo02.log
1          ONLINE /u01/app/redo01.log
4          ONLINE /u01/app/redo04.log
2          ONLINE /u01/app/oracle/oradata/redo02.log
3          ONLINE /u01/app/oracle/oradata/redo03.log
4          ONLINE /u01/app/oracle/oradata/redo04.log