2011年4月11日星期一

Oracle Online redo logfile 配置

更多相关信息,参见Oracle官方文档:

Managing the Online Redo Log

 

忠告:

  • 在下述操作前进行数据库完全备份
  • 在下述操作后进行控制文件(control file)的备份

 

查询logfile相关信息:

 

  • 查询日志文件位置和状态

SQL> select * from v$logfile;

 

    GROUP# STATUS  TYPE    MEMBER

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

 3           ONLINE  /u01/app/oracle/oradata/knitter/redo03.log

 2           ONLINE  /u01/app/oracle/oradata/knitter/redo02.log

 1           ONLINE  /u01/app/oracle/oradata/knitter/redo01.log

 4           ONLINE  /u01/app/oracle/oradata/knitter/redo04.rdo

 4 INVALID ONLINE  /u01/app/oracle/oradata/knitter/redo04_02.rdo

 

  • 查询日志组序号和状态

 

SQL> SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;

 

    GROUP# ARC STATUS

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

 1 NO  CURRENT

 2 YES INACTIVE

 3 YES INACTIVE

 4 YES INACTIVE

 

  • 查询日志历史

SQL> select * from V$LOG_HISTORY;

 

     RECID        STAMP         THREAD#  SEQUENCE# FIRST_CHANGE# FIRST_TIM NEXT_CHANGE#

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

 1  716304893               1          1           158900 01-APR-10          260498

 2  716317218               1          2           260498 14-APR-10          296893

 3  716317260               1          3           296893 14-APR-10          296990

 4  716319163               1          4           296990 14-APR-10          303247

 5  716319176               1          5           303247 14-APR-10          303252

 6  716384800               1          6           303252 14-APR-10          332583

 7  716384854               1          7           332583 15-APR-10          332775

 8  716384882               1          8           332775 15-APR-10          332881

 9  716384892               1          9           332881 15-APR-10          332889

 

 

============================================================================================

 

  1. 增加组(同时指定logfile):
  • 不指定组号(将自动使用组号: 当前最大组号+1

ALTER DATABASE
  ADD LOGFILE ('/oracle/dbs/log1c.rdo', '/oracle/dbs/log2c.rdo') SIZE 500K;

  • 指定组号

ALTER DATABASE 
  ADD LOGFILE GROUP 10 ('/oracle/dbs/log1c.rdo', '/oracle/dbs/log2c.rdo')
      SIZE 500K;

  1. 增加组成员
  • 指定组号

ALTER DATABASE ADD LOGFILE MEMBER

'/oracle/dbs/log2b.rdo'

TO GROUP 2;

 

ALTER DATABASE ADD LOGFILE MEMBER

'/u01/app/oracle/oradata/knitter/redo05_3.rdo',

'/u01/app/oracle/oradata/knitter/redo05_4.rdo' TO GROUP 5;

 

  • 不指定组号,指定所有组成员

ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2c.rdo'
    TO ('/oracle/dbs/log2a.rdo', '/oracle/dbs/log2b.rdo');

 

说明: 在增加组成员的时候, 不能指定logfile文件大小,因为同一组(logGroup)中所有member文件是完全一样的(大小、内容),Oracle将自动根据已有组员确定其大小。如果指定了大小,将会出错,如:

SQL> alter database add logfile member '/oracle/dbs/log1f.rdo' size 100k to group 5;

alter database add logfile member '/oracle/dbs/log1f.rdo' size 100k to group 5

                                                          *

ERROR at line 1:

ORA-00946: missing TO keyword

 

 

  1. 删除组成员

 

前提条件: 

  • 无法删除组中的最后一个成员
  • 所在组状态不能为 active  current 否则必须先进行日志切换(log switch
  • 如果数据库处于归档模式,必须(通过强制日志切换)先确保待删除组成员中的信息已经被归档

 

  • 强制切换日志

ALTER SYSTEM SWITCH LOGFILE;

然后通过如下语句查询,确保待操作组不为activecurrent状态:

SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;

 

  • 删除组成员

ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log3c.rdo';

 

说明:

  • 上述操作完成后,只是删除了Oracle中的相关记录信息,

还应该使用操作系统删除指令,删除硬盘上相应的日志文件

 

 

  1. 删除组

 

前提条件: 

  • 最起码要有两个组
  • 所在组状态不能为 active  current 否则必须先进行日志切换(log switch
  • 如果数据库处于归档模式,必须(通过强制日志切换)先确保待删除组成员中的信息已经被归档

 

  • 强制切换日志

ALTER SYSTEM SWITCH LOGFILE;

然后通过如下语句查询,确保待操作组不为activecurrent状态:

SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;

 

  • 删除组

ALTER DATABASE DROP LOGFILE GROUP 3;

 

说明:

  • 上述操作完成后,只是删除了Oracle中的相关记录信息,

还应该使用操作系统删除指令,删除硬盘上相应的日志文件

 

 

 

说明:

  • 上述操作完成后,只是删除了Oracle中的相关记录信息,

还应该使用操作系统删除指令,删除硬盘上相应的日志文件

 

 

  1. 移动与重命名

 

  • 方法一

增加一个新的日志组成员,删除原有组成员, 以达到移动和重命名的效果

 

  • 方法二

 

  1. 关闭数据库:

SQL> shutdown;

  1. 使用操作系统指令,移动待处理的日志文件到目标位置
  2. 启动数据库到 MOUNT 状态

SQL> startup mount;

  1. 执行如下指令重命名日志文件:

ALTER DATABASE 
  RENAME FILE '/diska/logs/log1a.rdo', '/diska/logs/log2a.rdo' 
           TO '/diskc/logs/log1c.rdo', '/diskc/logs/log2c.rdo';

 

  1. 开启数据库:

SQL> alter database open;

 

  1. 清空日志文件

 

忠告: 在清空未归档日志文件前,进行数据库完全备份

 

使用场景:

日志文件无法Drop 常见有如下情况

  • 只有两组日志文件(不允许Drop
  • 待处理日志文件处于current状态组

 

指令:

  • 清空前自动归档:

ALTER DATABASE CLEAR LOGFILE GROUP 3;

  • 如果待清空日志文件数据已经损坏,同时数据库处于归档模式。此时,为了避免该损坏日志文件被归档,可使用如下指令:

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;


没有评论: