1、redo (重做) log 的功能:数据recover
2、redo log 特征:
1)记录数据块的变化(DML、DDL)
2) 用于数据块的recover
3)以组的方式管理redo file ,最少两组redo ,循环使用
4)和数据文件存放到不同的磁盘上,需读写速度快的磁盘(比如采用RAID10)
3、日志切换
1)归档模式:将历史日志进行保存
2)非归档: 历史日志被覆盖
3)并产生checkpoint,通知redo log 所对应的 dirty block 从data buffer写入到datafile,并且更新控制文件
4、与日志相关的的数据字典
V$LOG 查看日志信息(从控制文件读取)
V$LOGFILE 查看日志存放的位置
FAST_START_MTTR_TARGET 控制检查点出现的时间,不能设置的太短
ALTER SYSTEM SWITH LOGFILE; 产生增量检查点
ALTER SYSTEM CHECKPONIT;产生完全检查点,所有的脏块都写入数据文件
5、查看日志信息
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 6 10485760 2 NO INACTIVE 357157 01-AUG-11
3 1 0 10485760 2 YES UNUSED 0
2 1 7 10485760 2 NO CURRENT 381102 02-AUG-11
04:40:19 SQL> alter system switch logfile;
System altered.
04:40:42 SQL> /
System altered.
04:40:43 SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 9 10485760 2 NO CURRENT 384007 02-AUG-11
3 1 8 10485760 2 NO ACTIVE 384005 02-AUG-11
2 1 7 10485760 2 NO ACTIVE 381102 02-AUG-11
(1)日志组的status:
unused:新添加的日志组,还没有使用
inactive:日志组对应的脏块已经从data buffer写入到data file ,可以删除
active:日志组对应的脏块还没有从data buffer写入到data file,不能被删除,否则会引起数据丢失
current :当前日志组,日志组对应的脏块还没有从data buffer写入到data file,不能被删除
在删除日志组之前,进行日志手工切换,将被删除的日志切换到inactive状态,这样就不会引起数据丢失。
thread :线程(通过后台进程lgwr 启动),在单实例的环境下,thread# 永远是1
sequence :日志序列号。在日志切换时会递增。
FIRST_CHANGE# :在当前日志中记录的首个数据块的scn。(当事务完成的时候会在数据块上写入一个scn,代表数据块的变化)。
ARC:是否归档模式
log_checkpoints_to_alter:该值默认为false,将其设置为true,每生成一个检查点就会在alter告警日志记录信息
(2)日志文件的status:
valid 有效状态
invalid 当数据库未使用改组文件时,就是无效状态
stale 当数据库怀疑日志文件没完成或者不正确时,日志文件为不新鲜状态,当该日志组变为active group 时,stale日志文件会变为valid状态
(3)查看生成的日志量
14:51:12 SQL> insert into scott.emp1 select * from scott.emp1;
28 rows created.
14:51:33 SQL> insert into scott.emp1 select * from scott.emp1;
56 rows created.
14:51:35 SQL> select a.name,b.value from v$statname a,v$mystat b
14:51:39 2 where b.statistic#=a.statistic# and a.name like '%redo size%';
--通过联合查询视图 v$statname ,v$mystat可以查看日志生成量
NAME VALUE
---------------------------------------------------------------- ----------
redo size 4544