undo中数据的特点:
1。是数据修改前的备份,主要是保证用户的读一致性
2. 在事务修改数据时产生
3。至少保存到事务结束
undo数据的作用:
1.回滚(rollback)操作
2.实现读一致性与闪回查询
3.从失败的事务中还原数据
4. 非正常停机后的实例恢复
Redo作用:恢复已提交的事务,从而保证无论在介质失败还是实例失败时,都可以恢复用户已提交的事务,使数据库达到一致状态。
Redo功能的实现依赖于以下三个组件:
–Log Buffer
–LGWR
–联机重做日志文件和归档日志文件
commit 的开销存在两个因素:
A. 显然会增加与数据库的往返通信。如果每个记录都提交,生成的往返通信量就会大得多。
B. 每次提交时,必须等待redo写至磁盘。这会导致“等待”。在这种情况下,等待成为“日志文件同步”(log file sysnc)
提交事务(COMMIT)前完成的工作:
#在SGA区的回退缓存中生成该事务的回退条目。在回退条目中保存有该事务所修改的数据的原始版本。
#在SGA区的重做日志缓存中生成该事务的重做记录。重做记录中记载了该事务对数据块所进行的修改,并且还记载了对回退段中的数据块所进行的修改。缓存中的重做记录有可能在事务提交之前就写入硬盘中。
#在SGA区的数据库缓丰中记录了事务对数据库所进行的修改。这些修改也有可能在事务提交之前就写入硬盘中。
提交事务(COMMIT)时完成的工作:
#在为该事务指定的回退段中的内部事务表内记录下这个事务已经被提交,并且生成一个惟一的SCN记录在内部事务表中,用于惟一标识这个事务。
#LGWR后进进程将SGA区重做日志缓存中的重做记录写入联机重做日志文件。在写入重做日志的同时还将写入该事务的SCN。
#Oracle服务进程释放事务所使用的所有记录锁与表锁。
#Oracle通知用户事务提交完成。
#Oracle将该事务标记为已完成。此时事务条目会从V$TRANSACTION中删除
rollback前可能完成的操作
–在SGA中生成UNDO块
–在SGA中生成已修改的数据块
–在SGA中生成前两项对应的redo日志
–如果需要,前面的某些数据可能已经刷新输出到磁盘
–得到所需的所有锁
rollback 回退事务完成的工作:
- Oracle通过使用回退段中的回退条目,撤销事务中所有SQL语句对数据库所做的修改。
- Oracle服务进程释放事务所使用的所有锁
- Oracle通知事务回退成功。
- Oracle将该事务标记为已完成
有时,会在ALERT中发现 Thread 1 cannot allocate new log, sequence 1466 Checkpoint not complete Current log# 3 seq# 1465 mem# 0: /home/ora10g/oradata/ora10g/redo03.log 这问题出现在系统尝试reuse online redo log file但是却没有可用的。可能是由于DBWR没有完成(Checkpoint not complete)或ARCH没有完成。
1,DBWR,用多DBWR process,合理分布数据,
2,增加REDO LOG FILE
3,扩大REDO的大小
4,让CHECKPOINT发生更频繁,可以减少block buffer cache,FAST_START_MTTR_TARGET,LOG_CHECKPOINT_INTERVAL,LOG_CHECKPOINT_TIMEOU