Welcome 微信登录

首页 / 数据库 / MySQL / 怎样清除v$archived_log视图中的过期信息

在使用RMAN命令删除归档后,查询v$archived_log视图会发现name列为空了,但其他列的信息还保留,时间长了会留下很多过期的信息,影响维护工作,需要将过期的信息删除。首先模拟下问题的出现过程:
  1. --删除归档日志之前查看v$archived_log视图,情况正常
  2. SQL> select dest_id,sequence#,name,blocks from v$archived_log;
  3.    DEST_ID SEQUENCE#                    NAME                       BLOCKS
  4. ---------- ---------- --------------------------------------------- ----------
  5.    1   101          /oradata/archive/orcl_1_101_851966182.arc    2730
  6.    1   102          /oradata/archive/orcl_1_102_851966182.arc    95711
  7.    1   103          /oradata/archive/orcl_1_103_851966182.arc    94813
  8.    1   104          /oradata/archive/orcl_1_104_851966182.arc    95048
  9.    1   105          /oradata/archive/orcl_1_105_851966182.arc    94677
  10.    1   106          /oradata/archive/orcl_1_106_851966182.arc    97494
  11.    1   107          /oradata/archive/orcl_1_107_851966182.arc    94300
  12.    1   108          /oradata/archive/orcl_1_108_851966182.arc    97494
  13.    
  14. --使用RAMN命令删除归档
  15. RMAN> delete archivelog all;
  16. --再次查询v$archived_log视图,name列为空
  17. SQL> select dest_id,sequence#,name,blocks from v$archived_log;
  18.    DEST_ID SEQUENCE#                    NAME                       BLOCKS
  19. ---------- ---------- --------------------------------------------- ----------
  20.    1   101                                                        2730
  21.    1   102                                                        95711
  22.    1   103                                                        94813
  23.    1   104                                                        95048
  24.    1   105                                                        94677
  25.    1   106                                                        97494
  26.    1   107                                                        94300
  27.    1   108                                                        97494
      出现这样的现象是因为使用RMAN命令在删除归档日志的时候不能够清楚控制文件中的内容,导致v$archived_log留下的过期的不完整信息。下面将归档信息进行清除:
  1. --清除控制文件中关于v$archived_log的信息
  2. SQL> execute sys.dbms_backup_restore.resetCfileSection(11);
  3. PL/SQL procedure successfully completed.
  4. --再次查询v$archived_log,信息已经被清除
  5. SQL> select dest_id,sequence#,name,blocks from v$archived_log;
  6. no rows selected
      但是这样是把所有的v$archive_log信息都清除了,包括未过期的也会不清除。下面再将未过期的归档文件信息注册进来。

  1. --我测试环境上归档日志都在/oradata/archive/中
  2. RMAN> catalog start with "/oradata/archive/";
  3. --再次查询v$archived_log,未被删除的归档信息可以查询到了
  4. SQL> select dest_id,sequence#,name,blocks from v$archived_log;
  5.    DEST_ID SEQUENCE#                     NAME                        BLOCKS
  6. ---------- ---------- --------------------------------------------- ----------
  7.    1   110           /oradata/archive/orcl_1_110_851966182.arc    1
  8.    1   111           /oradata/archive/orcl_1_111_851966182.arc    2
  9.    1   109           /oradata/archive/orcl_1_109_851966182.arc    31079
更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址