RMAN无法删除归档日志

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

今天同事问到一个问题,他那边的一套11g数据库使用RMAN没办法删除旧的归档,导致磁盘使用率很高。要来ip登录上去一看确实是,最旧的归档日志是16年5月的。

1
2
3
4
5
6
7
8
9
10
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;查看日志也没有显示旧归档日志的记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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检查也没有查到旧归档日志记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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天

1
2
3
4
5
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条归档日志文件信息。

1
2
3
4
5
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条

1
2
3
4
5
SYS@dbs>  select  count (*)  from  v$archived_log;
 
   COUNT (*)
----------
        224

这时应该可以推断出由于控制文件中只能保留224条归档日志数据,所以以前的归档信息已经被控制文件刷出,RMAN无法识别到这些归档文件,所以就无法删除这些归档日志。

那么现在如果使用RMAN删除这些旧的归档日志呢?我想到使用catalog start with 命令重新注册这些文件到控制文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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进行删除就可以了

1
delete  archivelog until logseq 1007;

再次查询v$controlfile_record_section视图,records_total也被“撑”大了

1
2
3
4
5
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

至此问题结束。



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




相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1天前
|
SQL Oracle NoSQL
实时计算 Flink版操作报错合集之报错“找不到对应的归档日志文件”,怎么处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
11天前
|
SQL Oracle 关系型数据库
"揭秘!一键解锁Oracle日志清理魔法,让海量归档日志无处遁形,守护数据库健康,告别磁盘空间告急噩梦!"
【8月更文挑战第9天】随着Oracle数据库在企业应用中的普及,归档日志管理对保持数据库健康至关重要。归档日志记录所有更改,对数据恢复极为重要,但也可能迅速占用大量磁盘空间影响性能。利用Oracle提供的RMAN工具,可通过编写Shell脚本来自动清理归档日志。脚本包括设置环境变量、连接数据库、检查和删除指定时间前的日志,并记录执行情况。通过Cron作业定时运行脚本,可有效管理日志文件,确保数据库稳定运行。
36 7
|
30天前
|
存储 SQL Oracle
关系型数据库Oracle归档日志备份
【7月更文挑战第19天】
42 5
|
2月前
|
SQL Oracle 关系型数据库
探索 Linux 命令 `db_archive`:Oracle 数据库归档日志的工具
探索 Linux 中的 `db_archive`,实际与 Oracle 数据库归档日志管理相关。在 Oracle 中,归档日志用于恢复,当在线重做日志满时自动归档。管理员可使用 SQL*Plus 查看归档模式,通过 `RMAN` 进行备份和恢复操作。管理归档日志需谨慎,避免数据丢失。了解归档管理对 Oracle 管理员至关重要,确保故障时能快速恢复数据库。
|
3月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之在读取Oracle归档日志时出现日志数量大幅增加的情况如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
Oracle 关系型数据库
|
3月前
|
Oracle 关系型数据库 数据库
实时计算 Flink版产品使用合集之采集Oracle数据库时,归档日志大小暴增的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
关系型数据库 MySQL 调度
实时计算 Flink版产品使用合集之归档日志定时清理导致任务失败如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
Oracle 关系型数据库 数据库
实时计算 Flink版产品使用合集之Oracle归档日志一天就达到了15GB并导致数据库崩溃,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用合集之是否支持从库归档日志捕获数据
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章