第5章 重做日志文件

1. oracle为啥要引入复杂的重做日志结构:恢复和效率,计算机操作的文件越大,系统的效率越大。

2. 日志切换

    重做日志写进程在任意时刻只能写一组重做日志组,写进程(LGWR)后台进程正在写的重做日志组称为当前(current)重做日志组,LGWR将把完全相同的信息从重做日志缓冲区(redo log buffer)中复制到该组的每个重做日志文件中。它是以循环的方式写重做日志组的。当LGWR写满了一组重做日志时,它就写下一组重做日志。这就是日志切换(switch)。

3. 重做日志文件是一个联机日志文件;归档日志文件是一个脱机日志文件。

4. 重做日志组中的每个数据文件称为成员。

5. 常用命令

1)强制性产生重做日志切换

    alter system switch logfile;

注意:如果切换多次,仍没有切换当前状态。比较容易的方式是:先关闭数据库,再开启数据库,之后就可以轻松地删除成员了。

2)强制性产生检查点的命令

    alter system checkpoint;

6. 日志组的状态

 1)inactive:表示实例恢复已不再需要这组联机重做日志组了;

 2)active:这组联机重做日志组是活动的但不是当前组,在实例恢复时需要这组联机重做日志组。

 3)current:这组联机重做日志组是当前组,并也隐含该链接重做日志组是活动的;

 4)unused:oracle服务器从来没有写过该组联机重做日志组

 5)查看日志组的信息

   select group#,sequence#,members,bytes,status,archived from v$log;

 6)查看日志组所在的目录和文件名

   select * from v$logfile;

7. 对联机重做日志组的操作

 1)添加新的重做日志组

   alter database add logfile ('E:\APP\KXBIN\ORADATA\KXBIN\REDO04A.LOG','E:\APP\KXBIN\ORADATA\KXBIN\REDO04B.LOG') size 50m;

   添加一组新的重做日志组,共有两个成员,每个成员的大小都是50m;

    select group#,sequence#,members,bytes,status,archived from v$log;

 2)删除重做日志组

    alter database drop logfile group 4;

注意:当前的重做日志组不能删除,如果要删除,先使用alter system switch logfile命令切换。每个实例至少有两组重做日志才能正常工作。当重做日志被删除,它的操作系统的文件依然存在。

8. 对联机重做日志成员的操作

 1)添加新的重做日志成员

   alter database add logfile member 'E:\APP\KXBIN\ORADATA\KXBIN\REDO01b.LOG' to group 1,'E:\APP\KXBIN\ORADATA\KXBIN\REDO02b.LOG' to group 2;

  2)删除重做日志成员

   alter database drop logfile member 'E:\APP\KXBIN\ORADATA\KXBIN\REDO01b.LOG';
   alter database drop logfile member 'E:\APP\KXBIN\ORADATA\KXBIN\REDO02b.LOG';
   alter database drop logfile member 'E:\APP\KXBIN\ORADATA\KXBIN\REDO03b.LOG';

注意:每个重做日志组中至少有一个成员才能正常工作。

9. 所谓的重做日志维护或修复就是将有问题的重做日志组或成员删除掉,之后再重建。

10. 清除联机重做日志文件

 alter database clear logfile group 组号;

如果崩溃的重做日志文件已经不能归档,在上面的命令中使用unarchived

 alter database clear unarchived logfile group 组号;

注意:以上命令可以帮助解决某些重做日志维护上的难题,但他们同时也留下安全隐患。因为执行上面命令之后,oracle数据库以前备份都将变为无用,需要尽快做一个全备份。

11. 演示如何清除一个重做日志文件

 1)为了安全起见首先为数据库做一个脱机(关闭书库快)的全备份

   a)为备份所需的文件,查看一下控制文件的文件名

         select * from v$controlfile;

   b)在oracle默认安装时,所有的控制文件、数据文件和重做日志文件都放在同一目录下(在实际的情况下可能一样,需要大家视情况而定),关闭数据库

       shutdown immediate;

   c)将控制文件、数据文件和重做日志文件复制到备份目录中

       host copy E:\app\kxbin\oradata\kxbin\*.* d:\orcl\Backup\

 2)启动数据库

      startup;

  3)获得所有重做日志组合成员的详细信息

      select group#,sequence#,members,bytes/(1024*1024),status,archived from v$log;

     select * from v$logfile;

  4)清除第3组重做日志

      alter database clear lofile group 3;

12. 利用OMF来管理联机重做日志文件(OMF:oracle管理文件)

 1)设定每个重做日志成员存放的目录

      alter system set db_create_online_log_dest_1='d:\orcl\disk1';
      alter system set db_create_online_log_dest_2='d:\orcl\disk2';
      alter system set db_create_online_log_dest_3='d:\orcl\disk3';

13. 重做日志配置的应用实例

 1)查看数据库的重做日志的配置

    select group#,sequence#,members,bytes,status,archived from v$log;

    select * from v$logfile;

目前数据库中所有的重做日志组中只有一个成员,而且放在一张磁盘上

 2)为了数据库的安全,将每个重做日志组的成员增加到3个,日志组增加到5个,且大小都设置为15m

    a)新增日志组

      alter database add logfile ('D:\orcl\disk1\redo04a.log',D:\orcl\disk1\redo04b.log','D:\orcl\disk1\redo04c.log') size 10m;
      alter database add logfile ('D:\orcl\disk1\redo05a.log',D:\orcl\disk1\redo05b.log','D:\orcl\disk1\redo05c.log') size 10m;

    b)确认是否已经添加上

  select group#,sequence#,members,bytes,status,archived from v$log;

 3)删除旧的日志组成员,然后重新创建日志组

      alter database drop logfile group 3

      alter database add logfile group 3 ('D:\orcl\disk1\redo03a.log',D:\orcl\disk1\redo03b.log','D:\orcl\disk1\redo03c.log') size 10m;

      采用上面的方法创建日志组

  4)以上的工作完毕之后,查看是否已经存在,删除操作系统中旧的日志文件

posted on 2012-12-05 22:34  kangxuebin  阅读(1874)  评论(2编辑  收藏  举报

导航