1.重做日志组及MEMBER:
重做日志组可以控制了日志文件不至于太大,提高系统效率。
每个重做日志文件REDOLOG叫做成员 MEMBER,多个重做日志文件为一个重做日志组GROUP,ORACLE数据库正常工作需要至少两个重做日志组,默认一个组只有一个成员。
LGWR在任意时刻只能写一组重做日志组,LGWR后台 进程正在写的重做日志组称当前CURRENT重做日志组,LGWR把完全相同的信息从重做日志缓冲区REDO LOG BUFFER中复制到组中的每个重做日志文件中。
以循环方式 写重做日志组,LGWR写满一组重做日志,就开始下一组重做日志,称为日志切换SWITCH。最后一组写满,开始重写第一组。
以循环方式 写重做日志组导致日志信息被覆盖,引入了归档日志模式archived;
ORACLE默认是非归档模式,当归档模式时,LGWR的写操作从一个重做日志组切换到另一个重做日志组后,ARCH就将上一个重做日志文件中信息复制到归档日志文件中。 归档日志文件是重做日志文件的备份。
归档模式时归档写进程 没将重做日志文件中信息复制到归档日志文件之前,LGWR不能再写这组重做日志文件。归档日志文件是脱机日志文件。除了ARCH运行时,不需要管理。
如ORACLE当前正操作的重做日志组中一个成员坏了,ORACLE继续使用组中其它没问题的成员并将错误信息定稿报警文件。当切换到的组中所有成员都坏,ORACLE会关闭系统 。
关于REDO日志的大小的最低要求:
REDO日志的大小:REDO日志大小不能低于4M,因为一个REDO 的一个BLOCK为512 bytes,日志文件要求不低于8192个 blocks,所以REDO日志大小不低于4M。
如果低于4M-即小于8192个blocks,会报错: ORA-00336: log file size 2048blocks is less than minimum 8192 blocks
关于REDO日志切换的顺序:
使用语句"alter system switch logfile"进行日志切换时,下一个变为CURRENT状态的一定是当前状态下,序列号最低的那个日志组.
补充:其实这很好理解,oracle的日志本来就是循环使用的,只不过这里的循环不是首尾相接式的,而是根据日志序列号判断,将最老的日志给覆盖掉而已.
2.日志切换和检查点
reod日志文件以一种循环方式使用,当一组redo日志文件被写满,LGWR开始写下一组日志文件称为日志切换,此时要产生检查点校验点。一些信息被写到控制文件。
强制性产生重做日志切换命令:
alter system switch logifle;
强制产生检查点命令:
alter system checkpoint;
设置FAST_START_MTTR_TARGET=900 强制900秒即15分钟产生一个检查点。这样实例 恢复时间不会超过900秒。
SQL> select group#,status,type,memberfrom v$logfile;
GROUP# STATUS TYPE MEMBER
---------- ------- ---------------------------------------------------------
3 ONLINE C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG
2 ONLINE C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG
1 ONLINE C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG
每个redo日志组中的成员个数可以不同,每个redo日志组中成员可以大小不同。但是实际应用中应该使用相同成员个数,相同大小。
3.REDO日志特殊情况下的处理:
当前重做日志组不能删除,如要删除,先用alter system switch logfile切换。
每个重做日志组至少有一个成员才能正常工作,归档模式时要删除的成员未被归档完时无法删除。从系统中删除成员后,操作系统文件除OMF方式管理外都存在,要从操作系统层面删除。
用在redo日志文件崩溃系统挂起,清除redo日志文件使用 alter database clear logfile group 3;
如崩溃的redo日志文件已不能归档,使用命令清除已崩溃的redo日志文件
alter database clear unarchived logfilegroup 3;
4.添加删除重做日志文件组和添加重做日志文件
步骤有:1.直接增加重做日志文件组并查看是否已经增加上
2.删除原有重做日志文件组,并在新位置增加重做日志文件组。
3.从数据库中查看数据字典验证是否修改成功,在操作系统层面查看是否生成相应重做日志文件。
一、增加日志文件组。默认是顺序增加,比如原来3组,现在新增加的为第4组。
SQL> alter database add logfile group 4 ('d:\disk3\redo04a.log','d:\disk6\redo04b.log','d:\disk9\redo04c.log') size 15M;
数据库已更改。 ---group 4 ,如果不指定GROUP号,则顺序增加。
SQL> alter database add logfile group 5 ('d:\disk3\redo05a.log','d:\disk6\redo05b.log','d:\disk9\redo05c.log') size 15M;
数据库已更改。
SQL> alter database add logfile group 6 ('d:\disk3\redo06a.log','d:\disk6\redo06b.log','d:\disk9\redo06c.log') size 15M;
数据库已更改。
数据库在非归档模式下,新加入的日志为什么ARC为YES,重启后为NO???
SQL> select group#,sequence#,members,bytes/1024/1024 M,status,archived from v$log;
GROUP# SEQUENCE# MEMBERS M STATUS ARC
-------------------- ---------- ---------- ---------------- ---
1 10 1 50 CURRENT NO
2 8 1 50 INACTIVE NO
3 9 1 50 INACTIVE NO
4 0 3 15 UNUSED YES
5 0 3 15 UNUSED YES
6 0 3 15 UNUSED YES
SQL> selectgroup#,status,type,member from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- -------------- --------------------------------------------------
3 ONLINE C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG
2 ONLINE C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG
1 ONLINE C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG
4 ONLINE D:\DISK3\REDO04A.LOG
4 ONLINE D:\DISK6\REDO04B.LOG
4 ONLINE D:\DISK9\REDO04C.LOG
5 ONLINE D:\DISK3\REDO05A.LOG
5 ONLINE D:\DISK6\REDO05B.LOG
5 ONLINE D:\DISK9\REDO05C.LOG
6 ONLINE D:\DISK3\REDO06A.LOG
6 ONLINE D:\DISK6\REDO06B.LOG
6 ONLINE D:\DISK9\REDO06C.LOG
二、删除第3组重做日志文件,STATUS为INACTIVE可删除。
SQL> alter database drop logfile group 3;
数据库已更改。
SQL> alter database drop logfile group 2;
数据库已更改
SQL> alter system switch logfile;
系统已更改。
SQL> selectgroup#,sequence#,members,bytes/1024/1024 M,status,archived from v$log;
GROUP# SEQUENCE# MEMBERS M STATUS ARC
-------------------- ---------- ---------- ---------------- ---
1 10 1 50 ACTIVE NO
4 11 3 15 ACTIVE NO
5 12 3 15 CURRENT NO
6 0 3 15 UNUSED YES
SQL> alter system switch logfile;
系统已更改。
SQL> selectgroup#,sequence#,members,bytes/1024/1024 M,status,archived from v$log;
GROUP# SEQUENCE# MEMBERS M STATUS ARC
-------------------- ---------- ---------- ---------------- ---
1 10 1 50 ACTIVE NO
4 11 3 15 ACTIVE NO
5 12 3 15 ACTIVE NO
6 13 3 15 CURRENT NO
SQL> selectgroup#,status,type,member from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- -------------- --------------------------------------------------
1 ONLINE C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG
4 ONLINE D:\DISK3\REDO04A.LOG
4 ONLINE D:\DISK6\REDO04B.LOG
4 ONLINE D:\DISK9\REDO04C.LOG
5 ONLINE D:\DISK3\REDO05A.LOG
5 ONLINE D:\DISK6\REDO05B.LOG
5 ONLINE D:\DISK9\REDO05C.LOG
6 ONLINE D:\DISK3\REDO06A.LOG
6 ONLINE D:\DISK6\REDO06B.LOG
6 ONLINE D:\DISK9\REDO06C.LOG
切换后STATUS仍为ACTIVE,不能删除重做日志组,可以重启数据库,就可以删除了。或者手工检查点 alter system checkpoint;
SQL> shutdownimmediate;
SQL> startup;
SQL> select group#,status,type,member from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- -------------- --------------------------------------------------
1 ONLINE C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG
4 ONLINE D:\DISK3\REDO04A.LOG
4 ONLINE D:\DISK6\REDO04B.LOG
4 ONLINE D:\DISK9\REDO04C.LOG
5 ONLINE D:\DISK3\REDO05A.LOG
5 ONLINE D:\DISK6\REDO05B.LOG
5 ONLINE D:\DISK9\REDO05C.LOG
6 ONLINE D:\DISK3\REDO06A.LOG
6 ONLINE D:\DISK6\REDO06B.LOG
6 ONLINE D:\DISK9\REDO06C.LOG
SQL> selectgroup#,sequence#,members,bytes/1024/1024 M,status,archived from v$log;
GROUP# SEQUENCE# MEMBERS M STATUS ARC
-------------------- ---------- ---------- ---------------- ---
1 14 1 50 INACTIVE NO
4 15 3 15 CURRENT NO
5 12 3 15 INACTIVE NO
6 13 3 15 INACTIVE NO
现在可以删除未重启前为ACTIVE状态的GROUP 1了。
SQL> alter database drop logfile group 1;
数据库已更改。
三.修改后相关信息的检查:
SQL> selectgroup#,sequence#,members,bytes/1024/1024 M,status,archived from v$log;
GROUP# SEQUENCE# MEMBERS M STATUS ARC
---------- ---------- ---------- -------------------------- ---
4 15 3 15 CURRENT NO
5 12 3 15 INACTIVE NO
6 13 3 15 INACTIVE NO