如何规范清理v$archived_log记录

如何规范清理v$archived_log记录

单机实例上面,v$archived_log 很多,有上万条记录了,所以得清理一下,不然每次查询都直接滚屏幕了

SQL> select sequence#,applied from v$archived_log order by sequence#;
SEQUENCE# APPLIED
....................
SEQUENCE# APPLIED
---------- ---------
9376 NO
9377 NO
9377 NO
9378 NO
9378 NO
9379 NO
9379 NO
9380 NO
9380 NO
9381 NO
9381 NO
SEQUENCE# APPLIED
---------- ---------
9382 NO
9382 NO
11200 rows selected.
SQL>

然后查看下当前的归档记录

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 164
Next log sequence to archive 166
Current log sequence 166
SQL>

看到归档记录才是164,和v$archived_log里面上W的记录数不匹配,这是因为这是rman备份恢复遗留下来的记录,所以需要清理一下。

清理记录,采用sys.dbms_backup_restore.resetCfileSection(11);清理:

SQL> execute sys.dbms_backup_restore.resetCfileSection(11);
PL/SQL procedure successfully completed.
SQL> select sequence#,applied from v$archived_log order by sequence# ;
no rows selected
SQL>

再次测试,可以查看到日志记录变化了,v$archived_log已经是最新的,只有一条记录数存在了

SQL> alter system switch logfile;
System altered.
SQL> select sequence#,applied from v$archived_log order by sequence# ;
SEQUENCE# APPLIED
---------- ---------
166 NO
SQL> execute sys.dbms_backup_restore.resetCfileSection(11);
PL/SQL procedure successfully completed.
SQL> select sequence#,applied from v$archived_log order by sequence# ;
no rows selected
SQL>

扩展话题,单机实例可以用上,述办法操作,那么Oracle集群比如dg呢,分析master库、standby库

#master库上v$archived_log表记录数:
SQL> select count(1) from v$archived_log;
COUNT(1)
----------
623616
SQL>
#standby库上v$archived_log表记录数:
SQL> select count(1) from v$archived_log;
COUNT(1)
----------
2226823
SQL>

方法

在Oracle数据库中,V$ARCHIVED_LOG视图包含有关已归档的数据库日志文件的信息。清理V$ARCHIVED_LOG记录通常是为了管理归档日志文件并释放磁盘空间。以下是一些规范的步骤,以帮助您清理V$ARCHIVED_LOG记录:

  1. 确定保留策略:
    首先,您需要确定数据库归档日志的保留策略。这包括定义要保留的归档日志的时间段或数量。保留策略的制定取决于您的业务需求和合规性要求。例如,您可以决定保留最近7天的归档日志或保留最近的100个归档日志。

  2. 编写自动清理脚本:
    根据您的保留策略,编写一个自动清理脚本来删除不再需要的归档日志记录。通常,您可以使用PL/SQL脚本或shell脚本来执行这些操作。以下是一个示例PL/SQL脚本,用于删除旧的归档日志记录:

    DECLARE
      retention_period NUMBER := 7; -- 保留天数
    BEGIN
      DELETE FROM V$ARCHIVED_LOG
      WHERE COMPLETION_TIME < SYSDATE - retention_period;
      COMMIT;
    END;
    /
    

    您可以根据需要自定义保留期限。

  3. 调度清理任务:
    您可以使用Oracle的调度工具(如DBMS_SCHEDULER或操作系统的计划任务)来定期运行清理脚本。这样,您可以确保定期清理归档日志,以避免磁盘空间不足的问题。

  4. 监控清理活动:
    定期监控清理活动以确保它按预期工作。您可以检查V$ARCHIVED_LOG视图中的记录数,以确保它们在按照保留策略执行清理后保持在合理的范围内。

  5. 备份和恢复策略:
    在清理归档日志时,请确保您的备份和恢复策略不会受到影响。删除了过多的归档日志可能会导致无法完整还原数据库。

请注意,清理V$ARCHIVED_LOG记录是一个敏感操作,需要谨慎执行。在执行清理操作之前,请确保备份数据库,并测试清理脚本以确保其按预期工作。此外,建议在非生产环境中测试清理策略,以避免不必要的风险。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值