以下内容是在平时学习和查阅资料过程中的知识整理,主要总结了Oracle11g中相关日志的内容,有不全的内容还望海涵,有错误的地方还请多多指点,采纳的时候需要谨慎!
1.redo log
redo log(online Redo log files)联机重做日志,指Oracle以SQL脚本的形式实时记录数据库的数据更新,通俗的说就是将已执行的SQL脚本保存到联机重做日志中。
Oracle11g中,一个或者多个redo log组成一个联机重做日志组,对于每个数据库实例默认有三个在线日志组,用于存放redo log,每个日志组大小可以自定义设定,默认的日志组大概在500M左右。用户通过查看V$LOG和V$LOGFILE这两个视图获得相关的redo log 和日志组的相关信息,并且用户还可以对日志组进行添加、修改、删除等操作。
每次三个日志组中只有一个日志组处于活跃状态,不断的写入当前数据库的操作脚本,日志文件采用按顺序循环写的方式,当一个日志组写满时,LGWR则将日志写入到下一个联机日志组中,当最后一个日志组写满时,从第一个日志组重新开始写。写入下一组的过程称为日志切换,日志切换时发生检查点检查,检查点的相关信息会被写入到控制文件当中。
alter system switch logfile; -----仅切换当前实例日志组,适用归档和非归档
alter system archive log current; -----在RAC下切换所有实例的日志组,仅使用与归档模式
alter system checkpoint;
alter system set fast_start_mttr_target = n ------强制设置检查点间隔
alter database add logfile group4 ('$ORACLE_BASE/oradata/u01/logn4.rdo') size 500M; ----添加日志组4设置其大小为500M
alter database add logfile member '$ORACLE_BASE/oradata/u01/logn4.rdo' to group 4; -----添加日志成员
alter database drop logfile member '$ORACLE_BASE/oradata/u01/logn4.rdo'; ----删除日志成员(注:不能删除组内的唯一一个成员,不能删除处于active和current状态的成员,删除日志文件后,屋里文件并没有被真正删除,需要手动删除)
alter database drop logfile group 4; ----删除日志组(注:一个实例至少有两个日志组,活动或者当前的日志组不能被删除,日志组被删除后,需要手动删除物理文件)
alter database clear logfile group 4; ----清空日志组文件
alter database clear unarchived logfile group 4; ----使用unarchived参数避免归档
在V$LOG视图中,status列有四种状态,
unused:新添加的日志组,还没有使用;
inactive:日志组对应的脏块已经从data buffer写入到data file中,可以进行覆盖;
active:日志组对应的脏块还没有完全从data buffer写入到data file,含有实例恢复需要的信息,不能被覆盖
current:当前日志组对应的脏块还没有全部从data buffer写入到data file,含有实例恢复需要的信息,不能被覆盖
THREAD列,在单实例的环境下,thread#永远是1;SEQUENCE#列是日志序号列,在日志切换时会递增;FIRST_CHANGE#列在每个日志组对应一个sequence号,其中首条日志条目的第一个的scn。
2.archive redo log
archive redo log 归档重做日志,指将在线日志进行归档,将其存储到固定的文件硬盘上,用于数据库的恢复,通俗的说就是对redo log日志的备份。在数据库处于归档模式时,当一个redo log group被写满或者发出切换日志组的命令时,该日志组的内容就会