重做日志用于记载事务操作所引起的数据库变化。执行DML或DDL操作时,oracle会将事务变化信息顺序写入重做日志。每个oracle数据库至少包含两个重做日志组,并且这些重做日志组是循环使用的。
1.重做日志组和重做日志成员。
日志组由完全相同的日志成员组成,每个日志组至少包含一个重做日志文件。如果每个日志组包含多个重做日志文件,后台进程LGWR会将相同的事务变化写入到同一个日志组的各个重做日志文件中。
2.重做入口
重做入口也称重做记录,由一组变化向量组成,这些变化向量包括表块变换,UNDO块变化和UNDO事务表的变化。当用户执行事务操作时,服务器进程会将重做记录写入到重做缓冲区,并最终由后台进程LGWR将重做记录写入到重做日志中。
3.SCN
SCN 是用于表示数据库变化的唯一标识,其数值顺序递增。执行事务操作时,系统会为每个事务变化生成相应的SCN。
4.日志序列号
日志序列号是重做日志的使用标识号,其数值也是顺序递增的。
5.日志切换
日志切换是指后台进程LGWR停止写一个日志组,并开始写另一个日志组的事件。日志切换包括自动日志切换和手工日志切换两种方式。
手工切换方式如下:
ALTER SYSTEM SWITCH LOGFILE;
增加重做日志
ALTER DATABASE ADD LOGFILE 'D:/DEMO/REDO03.LOG' SIZE 10M //增加一个日志组,显示分配组号应加上GROUP 4
增加日志成员
ALTER DATABASE ADD LOGFILE MEMBER
'D:/DEMO/REDO1B.LOG' TO GROUP 1,
'D:/DEMO/REDO0B.LOG' TO GROUP 2;
删除日志成员
ALTER DATABASE DROP LOGFILE MEMBER
'D:/DEMO/REDO1B.LOG';
删除日志组
ALTER DATABASE DROP LOGFILE GROUP 4;
改变重做日志的位置或名称
(1)确定日志组状态
SELECT a.group#,a.status from v$log a, v$logfile b where a.group#=b.group# and b.member='d:/demo/redo2b.log' ;
(2)复制或移动日志成员到目标位置
(3)改变控制文件所记载的重做日志指针
ALTER DATABASE REBAME FILE 'D:/DEMO/REDO2B.LOG' TO 'F:/DEMO/REDO2B.LOG';