redo log管理维护

和redo log相关的视图有如下两个:

V$LOG

V$LOGFILE

 

重做日志组有四个状态:

Active:正在归档

Inactive:归档完成

Current:正在使用

Unuse:新添加的重做日志组和clear archived之后的状态

 

SQL> desc v$log;

 名称                                    是否为空? 类型

 ----------------------------------------- -------- ----------------------------

 GROUP#                                             NUMBER

 THREAD#                                            NUMBER

 SEQUENCE#                                          NUMBER

 BYTES                                              NUMBER

 BLOCKSIZE                                          NUMBER

 MEMBERS                                            NUMBER

 ARCHIVED                                           VARCHAR2(3)

 STATUS                                             VARCHAR2(16)

 FIRST_CHANGE#                                      NUMBER

 FIRST_TIME                                         DATE

 NEXT_CHANGE#                                       NUMBER

 NEXT_TIME                                          DATE

 

SQL> select GROUP#,MEMBERS,STATUS,ARCHIVED from v$log;

 

    GROUP#    MEMBERS STATUS           ARC

---------- ---------- ---------------- ---

         1          1 INACTIVE         YES

         2          1 CURRENT          NO

         3          1 INACTIVE         YES

 

SQL>

可以看到数据库里面一共有三个重做日志组,每组仅有一个member。


现在看一下重做日志组中member的路径

SQL> desc v$logfile

 名称                                    是否为空? 类型

 ----------------------------------------- -------- ----------------------------

 GROUP#                                             NUMBER

 STATUS                                             VARCHAR2(7)

 TYPE                                               VARCHAR2(7)

 MEMBER                                             VARCHAR2(513)

 IS_RECOVERY_DEST_FILE                              VARCHAR2(3)

 

SQL> set linesize 200

SQL> col member for a80

SQL> select GROUP#,STATUS,MEMBER from v$logfile;

 

    GROUP# STATUS  MEMBER

---------- ------- --------------------------------------------------------------------------------

         3         /u01/app/oracle/oradata/test/redo03.log

         2         /u01/app/oracle/oradata/test/redo02.log

         1         /u01/app/oracle/oradata/test/redo01.log

 

SQL>

 

 

现在我们添加一个重做日志组4,并且使每个重做日志组有三个member

[oracle@oracle ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.4.0 Production on 星期二 6 28 21:18:44 2016

 

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

 

 

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

SQL> alter database add logfile group 4 '/u01/app/oracle/oradata/test/redo04.log' size 50m;

 

数据库已更改。

 

SQL>

SQL> select GROUP#,MEMBERS,STATUS,ARCHIVED from v$log;

 

    GROUP#    MEMBERS STATUS           ARC

---------- ---------- ---------------- ---

         1          1 INACTIVE         YES

         2          1 CURRENT          NO

         3          1 INACTIVE         YES

         4          1 UNUSED           YES

 

SQL>

可以看到刚添加的group 4是UNUSED状态。

现在使其变为其他状态

SQL> alter system switch logfile;

 

系统已更改。

 

SQL> select GROUP#,MEMBERS,STATUS,ARCHIVED from v$log;

 

GROUP#    MEMBERS STATUS           ARC

---------- ---------- ---------------- ---

         1          1 INACTIVE         YES

         2          1 ACTIVE           NO

         3          1 INACTIVE         YES

         4          1 CURRENT          NO

 

SQL>

 

现在添加member

SQL> alter database add logfile member '/u01/app/oracle/oradata/test/redo041.log' to group 4;

 

数据库已更改。

 

SQL> alter database add logfile member '/u01/app/oracle/oradata/test/redo042.log' to group 4;

 

数据库已更改。

 

SQL> alter database add logfile member '/u01/app/oracle/oradata/test/redo031.log' to group 3;

 

数据库已更改。

 

SQL> alter database add logfile member '/u01/app/oracle/oradata/test/redo032.log' to group 3;

 

数据库已更改。

 

SQL> alter database add logfile member '/u01/app/oracle/oradata/test/redo021.log' to group 2;

 

数据库已更改。

 

SQL> alter database add logfile member '/u01/app/oracle/oradata/test/redo022.log' to group 2;

 

数据库已更改。

 

SQL> alter database add logfile member '/u01/app/oracle/oradata/test/redo011.log' to group 1;

 

数据库已更改。

 

SQL> alter database add logfile member '/u01/app/oracle/oradata/test/redo012.log' to group 1;

 

数据库已更改。

 

SQL>

可以看到我在已有的logfile group添加member的时候并没有指定大小,这是因为同一个group中所有member必须相等,因此新添加的member默认和已有的member相等。

查询下member和redo log状态

SQL> select GROUP#,MEMBERS,STATUS,ARCHIVED from v$log;

 

    GROUP#    MEMBERS STATUS           ARC

---------- ---------- ---------------- ---

         1          3 INACTIVE         YES

         2          3 INACTIVE         YES

         3          3 INACTIVE         YES

         4          3 CURRENT          NO

 

SQL> select GROUP#,STATUS,MEMBER from v$logfile;

 

    GROUP# STATUS  MEMBER

---------- ------- --------------------------------------------------------------------------------

         3         /u01/app/oracle/oradata/test/redo03.log

         2         /u01/app/oracle/oradata/test/redo02.log

         1         /u01/app/oracle/oradata/test/redo01.log

         4         /u01/app/oracle/oradata/test/redo04.log

         4 INVALID /u01/app/oracle/oradata/test/redo041.log

         4 INVALID /u01/app/oracle/oradata/test/redo042.log

         3 INVALID /u01/app/oracle/oradata/test/redo031.log

         3 INVALID /u01/app/oracle/oradata/test/redo032.log

         2 INVALID /u01/app/oracle/oradata/test/redo021.log

         2 INVALID /u01/app/oracle/oradata/test/redo022.log

         1 INVALID /u01/app/oracle/oradata/test/redo011.log

 

    GROUP# STATUS  MEMBER

---------- ------- --------------------------------------------------------------------------------

         1 INVALID /u01/app/oracle/oradata/test/redo012.log

 

已选择12行。

 

SQL>

 

可以看到新添加的member都是INVALID状态,让其生效:

SQL> alter system switch logfile;

 

系统已更改。

 

SQL> /

 

系统已更改。

 

SQL> /

 

系统已更改。

 

SQL> /

 

系统已更改。

 

SQL>

系统已更改。

 

SQL>

系统已更改。

 

SQL>

查看状态:

SQL> select GROUP#,STATUS,MEMBER from v$logfile;

 

    GROUP# STATUS  MEMBER

---------- ------- --------------------------------------------------------------------------------

         3         /u01/app/oracle/oradata/test/redo03.log

         2         /u01/app/oracle/oradata/test/redo02.log

         1         /u01/app/oracle/oradata/test/redo01.log

         4         /u01/app/oracle/oradata/test/redo04.log

         4         /u01/app/oracle/oradata/test/redo041.log

         4         /u01/app/oracle/oradata/test/redo042.log

         3         /u01/app/oracle/oradata/test/redo031.log

         3         /u01/app/oracle/oradata/test/redo032.log

         2         /u01/app/oracle/oradata/test/redo021.log

         2         /u01/app/oracle/oradata/test/redo022.log

         1         /u01/app/oracle/oradata/test/redo011.log

 

    GROUP# STATUS  MEMBER

---------- ------- --------------------------------------------------------------------------------

         1         /u01/app/oracle/oradata/test/redo012.log

 

已选择12行。

 

SQL>

 

删除重做日志组:

SQL> select GROUP#,MEMBERS,STATUS,ARCHIVED from v$log;

 

GROUP#    MEMBERS STATUS           ARC

---------- ---------- ---------------- ---

         1          3 CURRENT          NO

         2          3 INACTIVE         YES

         3          3 INACTIVE         YES

         4          3 INACTIVE         YES

 

SQL>

模拟删除4

SQL> alter database drop logfile group 4;

alter database drop logfile group 4

*

1 行出现错误:

ORA-01623: 日志 4 是实例 test (线程 1) 的当前日志 - 无法删除 ORA-00312:

联机日志 4 线程 1: '/u01/app/oracle/oradata/test/redo04.log'

ORA-00312: 联机日志 4 线程 1: '/u01/app/oracle/oradata/test/redo041.log'

ORA-00312: 联机日志 4 线程 1: '/u01/app/oracle/oradata/test/redo042.log'

 

 

SQL>

因为logfile 4是current不能删除,因此切换日志

 

SQL> alter system switch logfile;

 

系统已更改。

 

SQL> select GROUP#,MEMBERS,STATUS,ARCHIVED from v$log;

 

    GROUP#    MEMBERS STATUS           ARC

---------- ---------- ---------------- ---

         1          3 CURRENT          NO

         2          3 INACTIVE         YES

         3          3 ACTIVE           YES

         4          3 ACTIVE           YES

现在删除试试

SQL> alter database drop logfile group 4;

alter database drop logfile group 4

*

1 行出现错误:

ORA-01624: 日志 4 是紧急恢复实例 test (线程 1) 所必需的 ORA-00312:

联机日志 4 线程 1: '/u01/app/oracle/oradata/test/redo04.log'

ORA-00312: 联机日志 4 线程 1: '/u01/app/oracle/oradata/test/redo041.log'

ORA-00312: 联机日志 4 线程 1: '/u01/app/oracle/oradata/test/redo042.log'

 

 

SQL>

因为active状态正在归档日志,必须等到归档完成切换为inactive状态才能删除,如果一定要删除,可以先clear unarchived再去drop

SQL> alter database clear unarchived logfile group 4;

 

数据库已更改。

 

SQL> alter database drop logfile group 4;

 

数据库已更改。

 

SQL> select GROUP#,MEMBERS,STATUS,ARCHIVED from v$log;

 

    GROUP#    MEMBERS STATUS           ARC

---------- ---------- ---------------- ---

         1          3 CURRENT          NO

         2          3 INACTIVE         YES

         3          3 INACTIVE         YES

 

SQL> select GROUP#,STATUS,MEMBER from v$logfile;

 

    GROUP# STATUS  MEMBER

---------- ------- --------------------------------------------------------------------------------

         3         /u01/app/oracle/oradata/test/redo03.log

         2         /u01/app/oracle/oradata/test/redo02.log

         1         /u01/app/oracle/oradata/test/redo01.log

         3         /u01/app/oracle/oradata/test/redo031.log

         3         /u01/app/oracle/oradata/test/redo032.log

         2         /u01/app/oracle/oradata/test/redo021.log

         2         /u01/app/oracle/oradata/test/redo022.log

         1         /u01/app/oracle/oradata/test/redo011.log

         1         /u01/app/oracle/oradata/test/redo012.log

 

已选择9行。

 

可以看到drop成功,现在有三个重做日志组,每组有三个member。

补充:当clear unarchived之后,日志组状态变为unused,如果继续切换日志,该日志组还可以继续使用,这也是平常遇到不能归档redolog时常用的处理方法。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29335043/viewspace-2121143/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29335043/viewspace-2121143/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值