ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【REDO】删除联机重做日志文件组的注意事项

【REDO】删除联机重做日志文件组的注意事项

原创 Linux操作系统 作者:secooler 时间:2011-07-12 23:36:10 0 删除 编辑
  关于联机重做日志文件组的删除需要注意以下几点:
  ①日志组为active和current状态时不可以删除
  ②日志组在数据库级别删除后操作系统上的文件不会被级链删除
  ③
对于一个Oracle数据库实例,至少要包含两个联机重做日志组

1.日志组为active和current状态时不可以删除
1)查询当前系统中日志组状态
sys@ora10g> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 CURRENT
         2 INACTIVE
         3 INACTIVE

2)尝试删除状态为“CURRENT”的联机重做日志组
这里显示为“CURRENT”状态的日志组为第一组。
sys@ora10g> alter database drop logfile group 1;
alter database drop logfile group 1
*
ERROR at line 1:
ORA-01623: log 1 is current log for instance ora10g (thread 1) - cannot drop
ORA-00312: online log 1 thread 1: '/oracle/ora10gR2/oradata/ora10g/redo01.log'

提示信息描述得很清楚,由于要删除的第一组日志是ora10g实例的当前日志组,不允许删除。

2.日志组在数据库级别删除后操作系统上的文件不会被级链删除
1)获取日志组成员信息
sys@ora10g> col MEMBER for a50
sys@ora10g> select group#,member from v$logfile;

    GROUP# MEMBER
---------- --------------------------------------------------
         1 /oracle/ora10gR2/oradata/ora10g/redo01.log
         2 /oracle/ora10gR2/oradata/ora10g/redo02.log
         3 /oracle/ora10gR2/oradata/ora10g/redo03.log

2)删除第三组日志
sys@ora10g> alter database drop logfile group 3;

Database altered.

sys@ora10g> select group#,member from v$logfile;

    GROUP# MEMBER
---------- --------------------------------------------------
         1 /oracle/ora10gR2/oradata/ora10g/redo01.log
         2 /oracle/ora10gR2/oradata/ora10g/redo02.log

删除成功。

3)确认操作系统文件是否删除
sys@ora10g> !ls -l /oracle/ora10gR2/oradata/ora10g/redo03.log
-rw-r----- 1 oracle oinstall 52429312 Jul 12 10:58 /oracle/ora10gR2/oradata/ora10g/redo03.log

可见,虽然在数据库层面已经将日志组删除成功,但是在操作系统上依然残留着对应的文件。
也正因为这个原因,如果没有对操作系统做相应清理,在此使用同样的文件创建日志组时会报“ORA-27038”错,提示文件已经存在,如下所示。
sys@ora10g> alter database add logfile group 3 ('/oracle/ora10gR2/oradata/ora10g/redo03.log') size 50m;
alter database add logfile group 3 ('/oracle/ora10gR2/oradata/ora10g/redo03.log') size 50m
*
ERROR at line 1:
ORA-00301: error in adding log file '/oracle/ora10gR2/oradata/ora10g/redo03.log' - file cannot be created
ORA-27038: created file already exists
Additional information: 1

4)手工删除操作系统上的残留文件
sys@ora10g> !rm -f /oracle/ora10gR2/oradata/ora10g/redo03.log

这样,日志文件组删除任务才算彻底完成。

3.对于一个Oracle数据库实例,至少要包含两个联机重做日志组
目的:进行切换,以便归档模式下进行归档。
1)确认当前系统日子组信息
sys@ora10g> select group#,member from v$logfile;

    GROUP# MEMBER
---------- --------------------------------------------------
         1 /oracle/ora10gR2/oradata/ora10g/redo01.log
         2 /oracle/ora10gR2/oradata/ora10g/redo02.log

2)尝试再删除一组日志
目前系统中仅剩两组日志组,此时我们尝试再删除一组日志,看看结果如何。
sys@ora10g> alter database drop logfile group 2;
alter database drop logfile group 2
*
ERROR at line 1:
ORA-01567: dropping log 2 would leave less than 2 log files for instance ora10g (thread 1)
ORA-00312: online log 2 thread 1: '/oracle/ora10gR2/oradata/ora10g/redo02.log'

其中的“ORA-01567”错误提示内容已经清晰的说明了一切:dropping log 2 would leave less than 2 log files for instance ora10g (thread 1)

4.小结
  本文就联机重做日志文件组删除过程中需要注意的三个方面进行了测试,在日常维护过程中就此内容需要多加注意。
  建议根据具体的应用特点创建多个日志组,并且保证每组日志中包含多个日志成员,防止因个别日志文件损坏导致系统故障。

Good luck.

secooler
11.07.12

-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-702035/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    8093162