[Oracle学习笔记] 管理日志文件

日志文件又称重做日志文件,记录用户对数据库的修改,可用于数据库恢复。实际应用中,一般对日志文件镜像,其中一个日志文件发生损坏时,其他镜像的日志文件还可以用。日志文件及其镜像称为日志文件组(logfile group)

创建数据库时,默认会创建三个日志文件组,每个组只有一个日志文件,最少不能少于2个日志文件组。日志文件组是循环使用,当第一组的空间使用完后,系统将转到第二组,如果所有组的空间都填满,将转到第一个组,如果使用归档模式,则在覆盖之前会将第一个组的日志信息先进行归档。日志文件组数量太少的话,可能造成频繁切换日志组,造成性能降低。

一、创建日志文件组

ALTER DATABASE database_name

ADD LOGFILE GROUP group_number

(file_name, file_name...)

SIZE size [REUSE];

示例:

查询当前的日志组:

SQL> column member format a40
SQL> select group#, member from v$logfile;

    GROUP# MEMBER
---------- ----------------------------------------
         2 D:\ORACLE\TEST\REDO02.LOG
         1 D:\ORACLE\TEST\REDO01.LOG
         3 D:\ORACLE\TEST\REDO03.LOG

创建新的日志组4(目录d:\oracle\logfile需要事先创建):

SQL> alter database add logfile group 4
  2  ('d:\oracle\logfile\redo01.log',
  3  'd:\oracle\logfile\redo02.log')
  4  size 20m;

数据库已更改。

再查询日志文件组,新创建了日志组4:

SQL> select group#, member from v$logfile;

    GROUP# MEMBER
---------- ----------------------------------------
         2 D:\ORACLE\TEST\REDO02.LOG
         1 D:\ORACLE\TEST\REDO01.LOG
         3 D:\ORACLE\TEST\REDO03.LOG
         4 D:\ORACLE\LOGFILE\REDO01.LOG
         4 D:\ORACLE\LOGFILE\REDO02.LOG

 

二、往日志文件组添加新日志文件

示例:

SQL> alter database add logfile member
  2  'd:\oracle\logfile\redo03.log'
  3  to group 4;

数据库已更改。

不需要指定日志文件大小,因为日志文件大小就是其所在日志组的大小,且同一组中的日志文件互为镜像,对数据库的操作记录将同时在多个镜像日志文件中写。

再查询日志组,新的日志文件已经添加:

SQL> select group#, member from v$logfile;

    GROUP# MEMBER
---------- ----------------------------------------
         2 D:\ORACLE\TEST\REDO02.LOG
         1 D:\ORACLE\TEST\REDO01.LOG
         3 D:\ORACLE\TEST\REDO03.LOG
         4 D:\ORACLE\LOGFILE\REDO01.LOG
         4 D:\ORACLE\LOGFILE\REDO02.LOG
         4 D:\ORACLE\LOGFILE\REDO03.LOG

已选择6行。

 

三、删除日志组成员

示例:

SQL> alter database drop logfile member
  2  'd:\oracle\logfile\redo03.log';

数据库已更改。

删除日志组成员时不需要指定日志组,因为一个日志文件只能属于一个组,如果在一个组中添加已属于其他组的日志文件会报错。

 

四、删除日志组

删除日志组时,需要先查看日志组的状态,如果当前正在使用(CURRENT或ACTIVE),则不能删除。

查询状态:

SQL> select group#, members, status from v$log;

    GROUP#    MEMBERS STATUS
---------- ---------- ----------------
         1          1 INACTIVE
         2          1 INACTIVE
         3          1 CURRENT
         4          2 UNUSED

示例:

删除日志组4:

SQL> alter database drop logfile group 4;

数据库已更改。

再查询,日志组4已经不存在了

SQL> select group#, members, status from v$log;

    GROUP#    MEMBERS STATUS
---------- ---------- ----------------
         1          1 INACTIVE
         2          1 INACTIVE
         3          1 CURRENT

尝试删除日志组3会报错:

SQL> alter database drop logfile group 3;
alter database drop logfile group 3
*
第 1 行出现错误:
ORA-01623: 日志 3 是实例 test (线程 1) 的当前日志 - 无法删除
ORA-00312: 联机日志 3 线程 1: 'D:\ORACLE\TEST\REDO03.LOG'

如果要删除的话,可以手工切换日志文件组:

SQL> alter system switch logfile;

系统已更改。

切换日志文件会产生检查点,主要是等待DBWR写脏数据到数据文件中,写完成之前日志仍会处于ACTIVE状态,等待一段时间DBWR写完成后,再查看状态变为INACTIVE,这时就可以删除了。

SQL> select group#, members, status from v$log;

    GROUP#    MEMBERS STATUS
---------- ---------- ----------------
         1          1 CURRENT
         2          1 INACTIVE
         3          1 INACTIVE

注意:日志文件组数量至少为2个,如果当前只有2个,删除的话会报错。

五、查询日志文件信息

通过V$LOG和V$LOGFILE查询,上面已经做过示例。

posted @ 2013-01-05 17:36  闲时乱翻书  阅读(222)  评论(0)    收藏  举报