联机重做日志文件
一、触发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 和非
current状态的组才能被清空
ALTER DATABASE CLEAR LOGFILE 'XXX\XXX\XX.LOG';
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP NUMBER;
《FROM:http://www.cnblogs.com/kerrycode/》