暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Oracle中,怎样清除V$ARCHIVED_LOG视图中的过期信息?

原创 grsmichael 2023-10-18
357

VARCHIVED_LOG视图用于查询归档日志信息。在使用RMAN命令删除归档日志后,VARCHIVED_LOG视图中的NAME列为空,但是依然可以查询到这些删除了的归档信息。出现这样的现象是因为使用RMAN命令在删除归档日志的时候不会清除控制文件中的内容,导致V$ARCHIVED_LOG留下的过期的不完整的失效信息。

要清除V$ARCHIVED_LOG视图中的过期信息,可以使用如下的命令:

EXECUTE SYS.DBMS_BACKUP_RESTORE.RESETCFILESECTION(11);

这条命令会将控制文件中关于V$ARCHIVED_LOG的信息全部清除,包括未过期未失效的信息也会清除。所以,需要再将未过期未失效的归档文件信息注册进来。

假设归档日志都在/oradata/archive/中,则可以执行以下命令重新注册:

RMAN> catalog start with '/oradata/archive/';

再次查询V$ARCHIVED_LOG时,未被删除的归档信息就可以查询到了。如果归档信息放在闪回恢复区中,那么可以使用如下的命令进行重新注册:

RMAN> catalog recovery area;

需要注意的是,对于命令“SYS.DBMS_BACKUP_RESTORE.RESETCFILESECTION(11)”中的11代表的是归档文件(其实就是控制文件中的“record type”),那么其它数字分别代表什么含义呢?其实,可以通过视图V$CONTROLFILE_RECORD_SECTION来查看:

SELECT ROWNUM-1 "NUMBER", TYPE FROM V$CONTROLFILE_RECORD_SECTION;

这条命令会返回控制文件中所有“record type”的名称和对应的数字。

因此,输入不同的数字,会对不同的视图数据进行清理,例如:

EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(11); /** CLEAR V$ARCHIVED_LOG  */ EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(12) ; /** CLEAR V$BACKUP_SET  */   EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(13) ; /** CLEAR V$BACKUP_PIECE  */  EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(17); /** CLEAR V$BACKUP_CORRUPTION  */ EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(18); /** CLEAR V$COPY_CORRUPTION  */ EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(19); /** CLEAR V$DELETED_OBJECT   */ EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(28); /** CLEAR V$RMAN_STATUS   */

使用这些命令时,需要注意以下几点:

  • 这些命令会对控制文件中的数据进行修改,所以需要谨慎使用。
  • 这些命令会影响到视图中的数据,所以需要做好备份。
  • 如果要清除多个“record type”的数据,可以使用逗号分隔。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论