您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

oracle物理结构(三)--重做日志文件

 

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

相关文章 [上一篇] oracle物理结构(二)--数据文件
010-56426307(59426319)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-56426307,59426319 QQ讨论群:243729577 182441349 邮箱:yuezt@cuug.com
通信地址:北京市海淀区紫竹院路88号紫竹花园D座703(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号