RMAN删除归档日志不释放问题

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

今天同事问到一个问题,他那边的一套Oracle 11g数据库使用RMAN没办法删除旧的归档,导致磁盘使用率很高。

oracle@ps251n2s:[/opt/oracle/archive/db] ls -ltr |more
total 3059881082 
-rw-r-----   1 oracle     oinstall   725320704 May 20  2016 1_1_91233774.dbf 
-rw-rw----   1 oracle     oinstall   1756937216 Jun  7  2016 1_2_91233774.dbf 
-rw-rw----   1 oracle     oinstall   1756731392 Jun 21  2016 1_3_91233774.dbf 
-rw-rw----   1 oracle     oinstall   1758001152 Jul  3  2016 1_4_91233774.dbf 
-rw-rw----   1 oracle     oinstall   1756729344 Jul 15  2016 1_5_91233774.dbf 
-rw-rw----   1 oracle     oinstall   1765750784 Jul 26 22:00 1_6_91233774.dbf 
-rw-rw----   1 oracle     oinstall   1760346112 Aug  6 14:04 1_7_91233774.dbf 
......

使用RMAN list archivelog all;查看日志也没有显示旧归档日志的记录

RMAN> list archivelog all; 
  
using target database control file instead of recovery catalog 
List of Archived Log Copies for database with db_unique_name DBS 
===================================================================== 
  
Key     Thrd Seq     S Low Time  
------- ---- ------- - --------- 
1206    1    1206    A 14-JAN-17 
        Name: /opt/oracle/archive/db/1_1206_91233774.dbf 
  
1207    1    1207    A 14-JAN-17 
        Name: /opt/oracle/archive/db/1_1207_91233774.dbf 
  
1208    1    1208    A 14-JAN-17 
        Name: /opt/oracle/archive/db/1_1208_91233774.dbf 
......

使用crosscheck检查也没有查到旧归档日志记录
RMAN> crosscheck archivelog all; 
  
using target database control file instead of recovery catalog 
allocated channel: ORA_DISK_1 
channel ORA_DISK_1: SID=16 device type=DISK 
validation succeeded for archived log 
archived log file name=/opt/oracle/archive/db/1_1206_91233774.dbf RECID=1206 STAMP=933244655 
validation succeeded for archived log 
archived log file name=/opt/oracle/archive/db/1_1207_91233774.dbf RECID=1207 STAMP=933249510 
validation succeeded for archived log 
archived log file name=/opt/oracle/archive/db/1_1208_91233774.dbf RECID=1208 STAMP=933254500 
validation succeeded for archived log 
archived log file name=/opt/oracle/archive/db/1_1209_91233774.dbf RECID=1209 STAMP=933259445 
validation succeeded for archived log

查看v$archived_log视图也没有旧归档日志记录


于是百度找到一篇文章http://3y.uu456.com/bp_3i90z4529l10ttd0odyk_1.html 大体意思是MAN删除归档日志的依据是controlfile中记录的归档日志,而不是你磁盘上实际存在的归档日志
,如果你的归档日志已经不在controlfile中就无法被RMAN识别到,也就无法被删除。而致于归档信息何时在控制文件中被覆盖,这由一个参数control_file_record_keep_time来控制。
查看数据库中的参数是默认的7天
SYS@db> show parameter CONTROL_FILE_RECORD_KEEP_TIME 
  
NAME                                 TYPE                             VALUE 
------------------------------------ -------------------------------- ------------------------------ 
control_file_record_keep_time        integer                          7

难道是在控制文件中归档日志的记录条数只能保留7天的么?于是到MOS去找相关文档找到一篇Why Are Controlfile Entries For Archived Logs Not Overwritten After CONTROL_FILE_RECORD_KEEP_TIME? (文档 ID 1056085.1),文档介绍CONTROL_FILE_RECORD_KEEP_TIME参数并不是强制在控制文件中保留多少天的归档日志条目,而是由V$CONTROLFILE_RECORD_SECTION视图中的ARCHIVED LOG条目去控制的,当RECORDS_TOTAL=RECORDS_USED时旧的归档日志就会被覆盖掉。
于是查数据库中的V$CONTROLFILE_RECORD_SECTION视图,看到ARCHIVED LOG行的records_total=224意味着控制文件中只能保留224条归档日志文件信息。
SYS@dbs> select * from v$controlfile_record_section where type='ARCHIVED LOG'; 
  
TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID 
---------------------------- ----------- ------------- ------------ ----------- ---------- ---------- 
ARCHIVED LOG                         584           224          224          88         87       1235

查询v$archived_log视图,总数为224条
SYS@dbs> select count(*) from v$archived_log; 
  
  COUNT(*) 
---------- 
       224

这时应该可以推断出由于控制文件中只能保留224条归档日志数据,所以以前的归档信息已经被控制文件刷出,RMAN无法识别到这些归档文件,所以就无法删除这些归档日志。
那么现在如果使用RMAN删除这些旧的归档日志呢?我想到使用catalog start with 命令重新注册这些文件到控制文件中
RMAN> catalog start with '/opt/oracle/archive/db'; 
...... 
File Name: /opt/oracle/archive/db/1_1005_91233774.dbf 
File Name: /opt/oracle/archive/db/1_1006_91233774.dbf 
File Name: /opt/oracle/archive/db/1_1007_91233774.dbf 
  
Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files... 
cataloging done
...... 
RMAN> list archivelog all; 
..... 
1236    1    301     A 22-OCT-16 
        Name: /opt/oracle/archive/db/1_301_91233774.dbf 
  
1237    1    302     A 22-OCT-16 
        Name: /opt/oracle/archive/db/1_302_91233774.dbf 
......

旧的归档日志文件已经注册到控制文件中了,再使用RMAN进行删除就可以了
delete archivelog until logseq 1007;

再次查询v$controlfile_record_section视图,records_total也被“撑”大了
SYS@db> select * from v$controlfile_record_section where type='ARCHIVED LOG'; 
  
TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID 
---------------------------- ----------- ------------- ------------ ----------- ---------- ---------- 
ARCHIVED LOG                         584           896          742         807        652       1800

至此问题结束。
















本文转自xiaocao1314051CTO博客,原文链接:http://blog.51cto.com/xiaocao13140/1936532 ,如需转载请自行联系原作者


相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
7月前
|
安全 测试技术
【YashanDB知识库】设置归档日志上限,但归档日志没自动清理,导致磁盘空间满
客户在一主一备性能压测中设置了归档日志清理上下限(12G-16G),但实际产生了100G+归档日志,导致磁盘空间满。原因是未设置ARCH_CLEAN_IGNORE_MODE=BACKUP,系统默认在备份后才清理日志。解决方法是设置ARCH_CLEAN_IGNORE_MODE=BACKUP,并执行`alter database delete archivelog all`触发清理。修改参数后,日志仍可能短暂超过上限,因备机同步延迟。经验总结:需同时设置归档上下限和ARCH_CLEAN_IGNORE_MODE=BACKUP以确保日志及时清理。
|
6月前
|
存储 数据库
YashanDB归档日志文件管理
本文介绍了YashanDB中归档日志文件的管理,包括默认存储路径($YASDB_DATA/archive)和文件命名规则。单机部署格式为arch_{resetlogs_id}_{sequence}.ARC,共享集群新增instanceId字段,格式为arch{instanceId}_{resetlogs_id}_{sequence}.ARC。1号节点与单机格式一致。可通过V$ARCHIVED_LOG视图查询相关信息,文件的增删由归档管理操作控制,详情参见官方文档。
|
7月前
|
SQL 数据库
【YashanDB知识库】归档日志清理
本文介绍了YashanDB中手动清理归档日志时遇到的问题及解决方法。问题源于在归档日志未备份或未同步到备机时尝试删除,导致文件仍存在。解决方案是通过调整`ARCH_CLEAN_IGNORE_MODE`参数(如设置为BOTH模式)来忽略备份和备机限制,执行归档日志清理命令(如`ALTER DATABASE DELETE ARCHIVELOG`)。同时,注意YashanDB支持自动清理功能,可通过设置上下阈值避免磁盘空间不足。相关参数可用`show parameter clean`查看。
|
11月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
253 1
【赵渝强老师】Oracle的控制文件与归档日志文件
|
SQL Oracle 关系型数据库
"揭秘!一键解锁Oracle日志清理魔法,让海量归档日志无处遁形,守护数据库健康,告别磁盘空间告急噩梦!"
【8月更文挑战第9天】随着Oracle数据库在企业应用中的普及,归档日志管理对保持数据库健康至关重要。归档日志记录所有更改,对数据恢复极为重要,但也可能迅速占用大量磁盘空间影响性能。利用Oracle提供的RMAN工具,可通过编写Shell脚本来自动清理归档日志。脚本包括设置环境变量、连接数据库、检查和删除指定时间前的日志,并记录执行情况。通过Cron作业定时运行脚本,可有效管理日志文件,确保数据库稳定运行。
454 7
|
SQL Oracle NoSQL
实时计算 Flink版操作报错合集之报错“找不到对应的归档日志文件”,怎么处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
存储 SQL Oracle
关系型数据库Oracle归档日志备份
【7月更文挑战第19天】
280 5
|
SQL Oracle 关系型数据库
探索 Linux 命令 `db_archive`:Oracle 数据库归档日志的工具
探索 Linux 中的 `db_archive`,实际与 Oracle 数据库归档日志管理相关。在 Oracle 中,归档日志用于恢复,当在线重做日志满时自动归档。管理员可使用 SQL*Plus 查看归档模式,通过 `RMAN` 进行备份和恢复操作。管理归档日志需谨慎,避免数据丢失。了解归档管理对 Oracle 管理员至关重要,确保故障时能快速恢复数据库。
|
Oracle 关系型数据库 数据库
实时计算 Flink版产品使用合集之采集Oracle数据库时,归档日志大小暴增的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
关系型数据库 MySQL 调度
实时计算 Flink版产品使用合集之归档日志定时清理导致任务失败如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章

下一篇
日志分析软件