【问题标题】:How to delete archive log files on AWS RDS Oracle instance如何删除 AWS RDS Oracle 实例上的存档日志文件
【发布时间】:2020-02-20 17:45:18
【问题描述】:

我们有一个 AWS Oracle RDS 实例最近用完 ORA-01653ORA-01654 空间(无法在表空间 X 中将索引 X 扩展 8。 ..) 错误。

通过运行查询进行调查:

select nvl(sum(BLOCKS * BLOCK_SIZE),0)/1024/1024/1024 GB from V$ARCHIVED_LOG  where DEST_ID=1 and ARCHIVED='YES' and DELETED='NO';

这显示了输出:

        GB
----------
26.3267608

这让我相信我们有 26 GB 的存档日志。

运行以下查询以获取有关存档文件的一些信息:

select * from V$ARCHIVED_LOG  where DEST_ID=1 and ARCHIVED='YES' and DELETED='NO';

我们有近 5000 行结果。 一些示例行:

 RECID      STAMP NAME                                                           DEST_ID    THREAD#  SEQUENCE# RESETLOGS_CHANGE# RESETLOGS RESETLOGS_ID FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME     BLOCKS BLOCK_SIZE CREATOR REGISTR STA ARC APPLIED   DEL S COMPLETIO DIC DIC END BACKUP_COUNT ARCHIVAL_THREAD# ACTIVATION# IS_ COM FAL END_OF_RED BAC
------ ---------- ------------------------------------------------------------ --------- ---------- ---------- ----------------- --------- ------------ ------------- --------- ------------ --------- ---------- ---------- ------- ------- --- --- --------- --- - --------- --- --- --- ------------ ---------------- ----------- --- --- --- ---------- ---
 56851 1021006860 /rdsdbdata/db/DRGNFLY_A/arch/redolog-56852-1-1002024260.arc          1          1      56852            222206 04-MAR-19   1002024260     108023802 07-OCT-19    108025497 07-OCT-19       1721        512 ARCH    ARCH    NO  YES NO        NO  A 07-OCT-19 NO  NO  NO             0                1  1073401855 NO  NO  NO             NO 
 56852 1021007166 /rdsdbdata/db/DRGNFLY_A/arch/redolog-56853-1-1002024260.arc          1          1      56853            222206 04-MAR-19   1002024260     108025497 07-OCT-19    108026500 07-OCT-19        626        512 ARCH    ARCH    NO  YES NO        NO  A 07-OCT-19 NO  NO  NO             0                1  1073401855 NO  NO  NO             NO 

这个归档文件的位置是:/rdsdbdata/db/DRGNFLY_A/arch/redolog-56849-1-1002024260.arc 其他行也在此目录中:/rdsdbdata/db/DRGNFLY_A/arch

AWS Oracle Common DBA Tasks 文档中,我们运行了存储过程:

exec rdsadmin.rdsadmin_master_util.drop_archivelog_dir;
exec rdsadmin.rdsadmin_master_util.drop_onlinelog_dir;

此命令执行成功,但再次运行上述查询时,仍显示 26 GB 的存档日志文件。

要查看我运行的存档日志保留配置:

set serveroutput on
exec rdsadmin.rdsadmin_util.show_configuration;

这会产生输出:

NAME:archivelog retention hours
VALUE:0
DESCRIPTION:ArchiveLog expiration specifies the duration in hours before archive/redo log files are automatically deleted.
NAME:tracefile retention
VALUE:1440
DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted.

这会让我相信,由于 archivelog 保留时间 的值为 0,这些文件应该被自动删除吗?

我的问题:

  1. 我的上述任何分析/查询是否不正确,这些存档日志实际上并没有导致我的表空间错误?
  2. 如何删除这些归档日志文件并回收空间,以便将其用于正常的数据库存储等。据我所知,AWS-RDS 不提供删除这些文件的直接访问权限,这就是我尝试使用的原因rdsadmin.rdsadmin_master_util.drop_archivelog_dir 存储过程。
  3. 还有如何确保日志文件不会继续生成或在适当的保留期内被清理。

【问题讨论】:

    标签: oracle amazon-web-services amazon-rds


    【解决方案1】:

    我对 AWS 没有任何经验,但它仍然是一个 oracle 数据库,因此您应该定期进行 rman 备份,包括使用“删除”选项备份存档日志。最简单的形式是

    rman> backups database plus archivelog delete all input.
    

    除了创建数据库和归档日志的备份外,它还会删除备份中包含的归档日志。

    【讨论】:

    • 这是 AWS,因此它包括拍摄 VM 的快照以作为 RDS 服务的一部分进行备份 - 我不相信它使用此 rman 功能。
    • 那将是虚拟机的备份,而不是数据库。假设您每天午夜进行这些 VM 备份,然后您的数据库在中午崩溃。您无法将数据库恢复到故障点。这就是 rman 备份的用途。保护数据库(而不是机器)是 DBA 的责任,所以我不希望云提供商关心它。 rman 是您对归档日志进行内务管理的预期工具。
    • 据我所知,它确实也备份了数据,请参阅:docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… 你说得对,可能会丢失一些数据。然而在我们的例子中,这是一个开发数据库,​​所以这对我们来说不是问题。显然您可以在 AWS RDS 上使用 rman:docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… - 但据此:目前,Oracle 数据库实例的 Amazon RDS 不支持 RMAN 还原。
    • 如果不支持 rman restore,那么一开始就创建归档日志真的没有意义。我会将数据库置于 NOARCHIVELOG 模式。此外,在重新阅读开头时,我看到您实际上报告的空间不足,无法创建索引,但随后转向查看归档日志。索引 TS 和 archlogs 在同一个磁盘上吗?相对于自动扩展和最大大小,索引 TS 的文件状态如何?
    【解决方案2】:

    如果您不仅可以运行 PL/SQL,那么您还可以:

    BEGIN
      FOR cur IN (
      SELECT L.* FROM v$archived_log L, v$database D WHERE L.NEXT_TIME<trunc(sysdate)-30 and L.DELETED = 'NO' and L.STANDBY_DEST='NO' 
      and L.APPLIED=DECODE(D.DATABASE_ROLE,'PRIMARY','NO','YES')  order by L.NEXT_TIME ASC,L.NAME
      ) LOOP
        sys.DBMS_BACKUP_RESTORE.deletearchivedlog(cur.recid,cur.stamp,cur.name,
                                              cur.thread#,cur.sequence#,
                                              cur.resetlogs_change#,cur.first_change#,
                                              cur.block_size,1);
      END LOOP;
    END;
    /
    

    将 WHERE 中的 NEXT_TIME 修改为您的。

    来自 AWS RDS 在线文档:

    set serveroutput on
    exec rdsadmin.rdsadmin_util.show_configuration; 
    
    begin
        rdsadmin.rdsadmin_util.set_configuration(
            name  => 'archivelog retention hours',
            value => '240');
    end;
    /
    commit;
    
    https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.Log.html#Appendix.Oracle.CommonDBATasks.RetainRedoLogs
    

    【讨论】:

    • 不幸的是,在 AWS RDS 上我无法访问 sys.DBMS_BACKUP_RESTORE.deletearchivedlog() 我收到错误消息:Error report - ORA-06550: line 6, column 5: PLS-00201: identifier 'SYS.DBMS_BACKUP_RESTORE' must be declared ORA-06550: line 6, column 5: PL/SQL: Statement ignored 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:
    • 查看修改,并按照在线指南进行操作
    • 请查看我在哪里运行 exec rdsadmin.rdsadmin_util.show_configuration 的原始问题 - 存档日志保留时间 已设置为 0
    • 仅当您的数据库实例的备份保留期大于零时,才会生成归档重做日志。 -- 也许您应该将值设置为 1 天或 1 小时。犯罪;注意:如果您从 0 更改为非零值,或从非零值更改为 0,则会发生中断。
    【解决方案3】:

    我只想发布一些我从 AWS 支持获得的关于我上面 1/2 的问题的回复。

    我将继续解决您的存档日志问题。

    从 V$ARCHIVED_LOG 中选择 nvl(sum(BLOCKS * BLOCK_SIZE),0) 个字节
    其中 DEST_ID=1;
    字节


    3.3700E+10

    您看到存档日志大小差异的原因 运行上述查询是因为此查询返回所有归档日志 即使它已经从磁盘中删除。原因是,甲骨文 在控制文件中保存此信息,除非交叉检查 发起。遗憾的是, 不支持 RDSrdsadmin.rdsadmin_rman_util.crosscheck_archivelog 在 RDS Oracle 版本“oracle-se1:11.2.0.4.v1”上。

    还有:

    回到您的存档日志查询。我可以很高兴地确认 存档日志每 5 分钟从磁盘中清除一次 周期设置为 0。

    因此,由于控制文件的原因,返回 31GB 是不准确的 没有被更新。 Oracle 更新控制文件时 运行“交叉检查”语句。为了让您管理 通过 crosscheck 命令归档日志,我建议 考虑迁移到更高版本的 RDS Oracle。为了您的轻松 访问我在下面列出了支持的版本:

    -11.2.0.4.v19 或更高版本 11.2
    -12.1.0.2.v15 或更高的 12.1 版本
    -12.2.0.1.ru-2019-01.rur-2019-01.r1 或更高版本 12.2
    - 所有 18.0.0.0 版本

    所以在我的情况下,存档日志似乎实际上已被清除并且没有对磁盘使用做出贡献。报告中的这种差异是因为我的 Oracle 版本是 11.2.0.4.v1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 2017-06-05
      • 1970-01-01
      • 2020-10-01
      相关资源
      最近更新 更多