在使用RMAN命令删除归档后,查询v$archived_log视图会发现name列为空了,但其他列的信息还保留,时间长了会留下很多过期的信息,影响维护工作,需要将过期的信息删除。首先模拟下问题的出现过程:
- --删除归档日志之前查看v$archived_log视图,情况正常
- SQL> select dest_id,sequence#,name,blocks from v$archived_log;
- DEST_ID SEQUENCE# NAME BLOCKS
- ---------- ---------- --------------------------------------------- ----------
- 1 101 /oradata/archive/orcl_1_101_851966182.arc 2730
- 1 102 /oradata/archive/orcl_1_102_851966182.arc 95711
- 1 103 /oradata/archive/orcl_1_103_851966182.arc 94813
- 1 104 /oradata/archive/orcl_1_104_851966182.arc 95048
- 1 105 /oradata/archive/orcl_1_105_851966182.arc 94677
- 1 106 /oradata/archive/orcl_1_106_851966182.arc 97494
- 1 107 /oradata/archive/orcl_1_107_851966182.arc 94300
- 1 108 /oradata/archive/orcl_1_108_851966182.arc 97494
- --使用RAMN命令删除归档
- RMAN> delete archivelog all;
- --再次查询v$archived_log视图,name列为空
- SQL> select dest_id,sequence#,name,blocks from v$archived_log;
- DEST_ID SEQUENCE# NAME BLOCKS
- ---------- ---------- --------------------------------------------- ----------
- 1 101 2730
- 1 102 95711
- 1 103 94813
- 1 104 95048
- 1 105 94677
- 1 106 97494
- 1 107 94300
- 1 108 97494
出现这样的现象是因为使用RMAN命令在删除归档日志的时候不能够清楚控制文件中的内容,导致v$archived_log留下的过期的不完整信息。下面将归档信息进行清除:
- --清除控制文件中关于v$archived_log的信息
- SQL> execute sys.dbms_backup_restore.resetCfileSection(11);
- PL/SQL procedure successfully completed.
- --再次查询v$archived_log,信息已经被清除
- SQL> select dest_id,sequence#,name,blocks from v$archived_log;
- no rows selected
但是这样是把所有的v$archive_log信息都清除了,包括未过期的也会不清除。下面再将未过期的归档文件信息注册进来。
- --我测试环境上归档日志都在/oradata/archive/中
- RMAN> catalog start with '/oradata/archive/';
- --再次查询v$archived_log,未被删除的归档信息可以查询到了
- SQL> select dest_id,sequence#,name,blocks from v$archived_log;
- DEST_ID SEQUENCE# NAME BLOCKS
- ---------- ---------- --------------------------------------------- ----------
- 1 110 /oradata/archive/orcl_1_110_851966182.arc 1
- 1 111 /oradata/archive/orcl_1_111_851966182.arc 2
- 1 109 /oradata/archive/orcl_1_109_851966182.arc 31079
时间: 2024-10-23 08:48:44