有这样一种需求,虽然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);
本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1278516