有这样一种需求,虽然controlfile中的archivelog和其他一些备份信息会被覆盖重用,收到参数control_file_record_keep_time的影响,但是我们没法手动触发这种重用,这导致有时候controlfile中的archivelog 记录过多,可能导致一些备份、恢复过程中的"control file sequential read"等待事件。 已知的一些解决方案,包括:   1. 重建控制文件, 例如 backup controlfile to trace后重建该控制文件,但要求有数据文件均存在 2. 设置control_file_record_keep_time=0 然后等待记录被重用, 太过被动了....   这里再介绍一种手动清除v$ARCHIVED_LOG中不管是DELETED还是available 记录的方法,注意不要在你的产品数据库上这样做:   SQL> select count(*) from v$archived_log; COUNT(*) ---------- 553 SQL> / COUNT(*) ---------- 553 SQL> execute sys.dbms_backup_restore.resetCfileSection( 11); PL/SQL procedure successfully completed. SQL> select count(*) from v$archived_log; COUNT(*) ---------- 0

  PROCEDURE resetCfileSection(record_type IN binary_integer ); -- This procedure attempts to reset the circular controlfile section. -- -- Input parameters: -- record_type -- The circular record type whose controlfile section is to be reset.   execute sys.dbms_backup_restore.resetCfileSection( 11);