天天看点

联机重做日志文件

一、触发LGWR写日志的条件

联机重做日志文件:

日志写进程LGWR负责把日志缓冲区中的日志条目(Redo Records/Redo Enty)写入联机日志文件中,并赋予一个系统改变标识符SCN,一个条目用于描述一次对某个数据块的改变。

1)当commit事务发生

2)redo log buffer存储达到1/3

3)当重做日志缓冲区有超过一个兆字节的更改记录

4)在DBWN将buffer cache修改过的数据块的信息写入到数据文件之前

5) 发生检查点切换

触发CHECK POINT事件的情况:

1)每次日志切换时。

2)实例通过normal,transactional,immediate选项关闭时

3)通过设置初始化参数FAST_START_MTTR_TARGET强制发生

4) .数据库管理员手工设置ALTER SYSTEM CHECKPOINT、 ALTER TABLESPACE, DATAFILE OFFLINE时。

5).使用alter tablespace[OFFLINE NORMAL|READ ONLY|BEGIN BACKUP] 语句导致指定数据文件发生检查点

非归档模式只能做冷备份,归档模式可以做热备份并且可以做增量备份和部分恢复.

二、联机重做日志状态

日志文件组的状态一般有INACTIVE、ACTIVE、CURRENT、UNUSED、CLEARING、CLEARING_CURRNT等六种状态:

SQL> SELECT STATUS FROM V$LOG;

UNUSED : 表示该联机重做日志文件组对应的文件还从未被写入过数据,通常刚刚创建的联机重做日志文件组会显示成这一状态。当日志切换到这一组时,就会改变状态。

CURRENT : 表示当前正在使用的日志文件组。该联机重做日志组是活动的。当前Oracle数据库正在使用的联机重做日志文件组。

ACTIVE : 表示该组是活动的但不是当前组,实例恢复时需要这组日志。如果处于这一状态,表示虽然当前并未使用,不过该文件中内容尚未归档,或者文件中的数据没有全部写入数据文件,一旦需要实例恢复,必须借助该文件中保存的内容。

INACTIVE: 表示实例恢复已不再需要这组联机重做日志组了。表示对应的联机重做日志文件中的内容已被妥善处理,该组联机重做日志当前处于空闲状态。

CLEARING:表示该组重做日志文件正被重建(重建后该状态会变成UNUSED)。

CLEARING_CURRENT:表示该组重做日志重建时出现错误。

日志文件的状态有STALE,INVALID 、DELETED、空白 四种状态。可以通过下面语句查看

SELECT STATUS FROM V$LOGFILE

INVALID : 表示该文件是不可以被访问的。

STALE : 表示该文件中的内容是不完全的。

空白 : 表示该文件正在使用。

DELETED : 表示该文件已不再有用了。

ARCHIVED列值为YES表示已经归档,NO表示未归档。 SEQUENCE列值表示日志序列号,每进行一次日志切换就+1。

三、重做日志文件相关的查询

SELECT * FROM V$LOG;

SELECT * FROM V$LOGFILE;

SELECT * FROM V$ARCHIVED_LOG;

SELECT * FROM V$RECOVER_FILE

SELECT * FROM V$LOG_HISTORY;

SELECT * FROM V$LOGHIST;

--查看闪回日志使用状况

SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;

四、日志组的修改

alter database add logfile group 4 ('/home/oracle/oradata/orcl/redo04_01.log', '/home/oracle/oradata/orcl/redo04_02.log') size 500M;

ALTER DATABASE DROP LOGFILE GROUP 1;

注意事项:

1)执行删除日志组命令后,其实只是在数据字典中删掉了对于日志信息。你查看对应的日志文件,你会发现日志文件还在,只有手动删除日志文件,才能

真正的删除日志文件。

2)不能删除仅有的2个文件组;

3)不能删除正在活动的文件组(即CURRENT、ACTIVE状态的日志文件);

4)不能删除当前组的成员,当日志组只有一个成员时,不能删除日志组成员。

5)不能删除还没有归档的文件组。

SQL> alter system switch logfile; --日志切换

SQL> alter database add logfile member '/home/oracle/oradata/orcl/redo1_02.log' to group 1; --增加日志组成员

SQL> alter database drop logfile member  '/home/oracle/oradata/orcl/redo1_02.log'; --删除日志组成员

不能删除日志组中唯一的日志文件,可以使用删除组的方法直接删除组;不能删除没有归档或者还在活动的日志;

重命名日志组成员:

alter database rename file '/home/oracle/oradata/orcl/redo01.log' to '/home/oracle/oradata/orcl/redo1_01.log';

注意2点:

不能移动正在使用的日志文件。

确保执行命令前把目标文件已经移动到新目录下了。

清空日志文件数据

清空是说删除日志文件的内容。主要用于数据库无法进行有效恢复的时候。比如标识为current的日志文件组所有文件都坏了等。只有非active 和非