[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查询,上面已经做过示例。
浙公网安备 33010602011771号