delete archivelog all无法清除归档日志解决方法

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

1、演示环境 

复制代码 代码如下:


SQL> select * from v$version where rownum<2; 
BANNER 
---------------------------------------------------------------- 
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production 
SQL> select inst_id,instance_name from gv$instance; -->两节点RAC 
INST_ID INSTANCE_NAME 
---------- ---------------- 
1 GOBO4A 
2 GOBO4B 
SQL> show parameter db_recovery -->+REV,使用了ASM 存储方式 
NAME TYPE VALUE 
------------------------------------ ----------- ------------- 
db_recovery_file_dest string +REV 
db_recovery_file_dest_size big integer 1G 
SQL> select flashback_on from v$database; -->数据库未开启闪回特性,也就是说尽管指定了闪回区,未启用闪回特性 
-->相应的,归档日志充满整个闪回区时,闪回区空间并不会被重用 
FLASHBACK_ON 
------------------ 
NO 


2、查看及清除现有的归档日志文件 

复制代码 代码如下:


oracle@bo2dbp:~> export ORACLE_SID=+ASM1 
oracle@bo2dbp:~> asmcmd 
ASMCMD> cd +REV/GOBO4/ARCHIVELOG 
ASMCMD> ls 
2012_10_08/ 
.... 
arch_795194241_1_10.arc 
arch_795194241_1_100.arc 
.... 
oracle@bo2dbp:~> export ORACLE_SID=GOBO4A 
oracle@bo2dbp:~> rman target / 
Recovery Manager: Release 10.2.0.3.0 - Production on Thu Nov 29 16:23:15 2012 
Copyright (c) 1982, 2005, Oracle. All rights reserved. 
connected to target database: GOBO4 (DBID=921286879) 
#下面通过使用rman backup archivelog方式来删除所有的归档日志文件 
RMAN> backup format '/install_source/rman_bak/arch_%d_%U' 
2> archivelog all delete input; 
Starting backup at 29-NOV-12 
current log archived 
using target database control file instead of recovery catalog 
allocated channel: ORA_DISK_1 
channel ORA_DISK_1: sid=1058 instance=GOBO4A devtype=DISK 
channel ORA_DISK_1: starting archive log backupset 
channel ORA_DISK_1: specifying archive log(s) in backup set 
input archive log thread=1 sequence=139 recid=214 stamp=797450261 
input archive log thread=1 sequence=140 recid=215 stamp=797450292 
input archive log thread=1 sequence=141 recid=216 stamp=797450308 
input archive log thread=1 sequence=142 recid=218 stamp=797450347 
input archive log thread=1 sequence=143 recid=219 stamp=797450372 
input archive log thread=1 sequence=144 recid=220 stamp=797450409 
channel ORA_DISK_1: starting piece 1 at 29-NOV-12 
channel ORA_DISK_1: finished piece 1 at 29-NOV-12 
piece handle=/install_source/rman_bak/arch_GOBO4_1dnrhkn4_1_1 tag=TAG20121129T162806 comment=NONE 
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:15 
channel ORA_DISK_1: deleting archive log(s) 
archive log filename=+REV/gobo4/archivelog/arch_795194241_1_139.arc recid=214 stamp=797450261 
archive log filename=+REV/gobo4/archivelog/arch_795194241_1_140.arc recid=215 stamp=797450292 
archive log filename=+REV/gobo4/archivelog/arch_795194241_1_141.arc recid=216 stamp=797450308 
........ 
piece handle=/install_source/rman_bak/arch_GOBO4_1hnrhli2_1_1 tag=TAG20121129T162806 comment=NONE 
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:09 
channel ORA_DISK_1: deleting archive log(s) 
archive log filename=+REV/gobo4/archivelog/arch_795194241_2_141.arc recid=427 stamp=800547491 
archive log filename=+REV/gobo4/archivelog/arch_795194241_2_142.arc recid=429 stamp=800549193 
archive log filename=+REV/gobo4/archivelog/arch_795194241_2_143.arc recid=433 stamp=800578944 
archive log filename=+REV/gobo4/archivelog/arch_795194241_2_144.arc recid=437 stamp=800641679 
Finished backup at 29-NOV-12 
#再次查看依然有很多归档日志文件存在,而且都是10月23日之前的 
ASMCMD> pwd 
+REV/GOBO4/ARCHIVELOG 
ASMCMD> ls 
2012_09_30/ 
2012_10_09/ 
2012_10_10/ 
2012_10_11/ 
2012_10_12/ 
2012_10_13/ 
2012_10_14/ 
2012_10_15/ 
2012_10_16/ 
2012_10_17/ 
2012_10_18/ 
2012_10_22/ 
2012_10_23/ 
arch_795194241_1_100.arc 
arch_795194241_1_101.arc 
arch_795194241_1_102.arc 
............ 
#再次删除日志文件,来个更狠的命令,直接delete所有的archivelog,最近新增的一个archivelog被删除 
RMAN> delete noprompt archivelog all; 
released channel: ORA_DISK_1 
allocated channel: ORA_DISK_1 
channel ORA_DISK_1: sid=1081 instance=GOBO4A devtype=DISK 
List of Archived Log Copies 
Key Thrd Seq S Low Time Name 
------- ---- ------- - --------- ---- 
453 1 294 A 29-NOV-12 +REV/gobo4/archivelog/arch_795194241_1_294.arc 
deleted archive log 
archive log filename=+REV/gobo4/archivelog/arch_795194241_1_294.arc recid=453 stamp=800662185 
Deleted 1 objects 
# 上面输出的结果只有一个归档日志被删除,何以故? 
# 这个我们的分析一下delete noprompt archivelog all以及备份归档日志时使用的 delete input 
# 回顾一下Oracle控制文件以及Oracle RMAN的的备份恢复的原理。 
# 我们知道,Oracle 控制文件里边记录了数据库的名字,id,创建的时间戳....一大堆的信息,当然也有不可少的归档信息以及备份信息。 
# 如果不知道控制文件有什么? 那就参考:Oracle 控制文件,文章尾部有给出链接。 
# 其次,Oracle RMAN的备份恢复的所有信息都依赖于两个东东,要么是控制文件,要么是恢复目录(catalog)。 
# 因为所有的备份与恢复信息都会依据备份是的方式存储到这两个位置。 
# 理所当然的是,对这两个东东里的备份集,镜像副本,归档日志,等等所有能备份的对象的任意操作,首先会参考这些对象的记录的信息。 
# 其次是当被记录的对象发生变化时做相应的更新。 


3、深度分析无法清除的原因 

复制代码 代码如下:


#先来看看gv$archived_log,如果是单实例使用v$archived_log 
#从下面的查询可知,又有两个新的归档日志产生,一个从第一个instance产生,一个从第二个instance产生。 
SQL> select name,status,count(*) from gv$archived_log group by name,status; 
NAME S COUNT(*) 
-------------------------------------------------- - ---------- 
D 444 
+REV/gobo4/archivelog/arch_795194241_1_295.arc A 2 
+REV/gobo4/archivelog/arch_795194241_2_150.arc A 2 
# 从上面的查询可知,当前的两个节点其归档日志只有2个,其余的444个其名字都是NULL值。 
# 看看关于视图v$archived_log中NAME列的解释 
# Archived log file name. If set to NULL, either the log file was cleared before it was archived or an RMAN backup command 
# with the "delete input" option was executed to back up archivelog all (RMAN> backup archivelog all delete input;). 
# 上面的这段话表明当前的这些日志文件要么被手动清除,要么被rman的delete input选项清除。 
# 其次status列的D字段也表明了这些个名字为空的归档日志已经被Deleted.也就是说有444个归档日志已经被删除了。 
# 再次尝试删除归档日志,尾数为295和150的归档日志也被删除 
RMAN> delete noprompt archivelog all; 
released channel: ORA_DISK_1 
allocated channel: ORA_DISK_1 
channel ORA_DISK_1: sid=1081 instance=GOBO4A devtype=DISK 
List of Archived Log Copies 
Key Thrd Seq S Low Time Name 
------- ---- ------- - --------- ---- 
454 1 295 A 29-NOV-12 +REV/gobo4/archivelog/arch_795194241_1_295.arc 
455 2 150 A 29-NOV-12 +REV/gobo4/archivelog/arch_795194241_2_150.arc 
deleted archive log 
archive log filename=+REV/gobo4/archivelog/arch_795194241_1_295.arc recid=454 stamp=800712037 
deleted archive log 
archive log filename=+REV/gobo4/archivelog/arch_795194241_2_150.arc recid=455 stamp=800712038 
Deleted 2 objects 
# 查询gv$archived_log视图,表明所有现有的archivelog都已经被删除 
SQL> select name,status,count(*) from gv$archived_log group by name,status; 
NAME S COUNT(*) 
-------------------------------------------------- - ---------- 
D 448 
# 在asmcmd命令下也无法找到我们刚刚删除的归档日志文件 
ASMCMD> pwd 
+REV/GOBO4/ARCHIVELOG 
ASMCMD> ls -l arch_795194241_1_295.arc 
asmcmd: entry 'arch_795194241_1_295.arc' does not exist in directory '+REV/GOBO4/ARCHIVELOG/' 
ASMCMD> ls -l arch_795194241_2_150.arc 
asmcmd: entry 'arch_795194241_2_150.arc' does not exist in directory '+REV/GOBO4/ARCHIVELOG/' 
# 在A节点上再次切换一次 
SQL> alter system switch logfile; 
System altered. 
SQL> select inst_id,name,count(*) from gv$archived_log group by inst_id,name; 
INST_ID NAME COUNT(*) 
---------- -------------------------------------------------- ---------- 
2 223 
1 +REV/gobo4/archivelog/arch_795194241_1_296.arc 1 
2 +REV/gobo4/archivelog/arch_795194241_1_296.arc 1 
1 223 
--上面的查询可以看到当前的一个归档日志arch_795194241_1_296.arc基于Inst_id为1的有1个,而基于Inst_id为2的也有一个 
--而直接查询v$archived_log时只有1个当前的归档日志,实际上arch_795194241_1_296.arc文件是由第一个instance产生的。 
--数字296之前的1即可以表明为第一个instance产生的。 
SQL> select name from v$archived_log where name='+REV/gobo4/archivelog/arch_795194241_1_296.arc'; 
NAME 
-------------------------------------------------- 
+REV/gobo4/archivelog/arch_795194241_1_296.arc 
# 关于这个地方个人认为这个应该是用于做恢复时用的。 
# RAC数据库在恢复时,无论多个少节点,只有所有的归档日志的集合才能完成地表述数据库的变迁。 
# 此时,无论从哪个节点上看,或者说做无论从哪个节点恢复,都可以看到该归档日志。 
# 而具体是哪个instance产生则由'%t'重做线程编号来判断。 
#下面再来看看控制文件 
SQL> select * from gv$controlfile_record_section where type='ARCHIVED LOG'; 
INST_ID TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID 
---------- ---------------------------- ----------- ------------- ------------ ----------- ---------- ---------- 
1 ARCHIVED LOG 584 224 224 149 148 456 
2 ARCHIVED LOG 584 224 224 149 148 456 
# RECORDS_TOTAL:Number of records allocated for the section 
# 列RECORDS_TOTAL表明为当前TYPE分配的可存储的总数,在两个instance上都为224条 
# 从最近一次切换日志的查询结果可知,被删除的有223条,新增的一条为arch_795194241_1_296.arc,总条数为224条。 
# 如果下次日志切换再增加一条往哪里放呢?那些已经超出缺省保留期的归档日志被覆盖,即被重用。 
# 用户在控制文件中保存ARCHIVED LOG部分的保留时间由谁来决定呢,参数control_file_record_keep_time,缺省为7天 
# 这意味着7天前的归档日志和备份信息可能在控制文件中已经不存在了 
SQL> show parameter control_file_record_keep_time 
NAME TYPE VALUE 
------------------------------------ ----------- ------------------------------ 
control_file_record_keep_time integer 7 
SQL> select count (*) from v$archived_log; 
COUNT(*) 
---------- 
224 
# Author : Robinson 
# Blog : http://blog.csdn.net/robinson_0612 
SQL> alter session set nls_date_format='yyyymmdd hh24:mi:ss'; 
Session altered. 
# 下面的查询正好表明为什么2012_10_23和之前的日志为什么没有被删除 
# 因为20121023 18:04:53之后的归档日志已经被覆盖了,所以使用delete archivelog all时是根本无法清除之前的日志的,无能为力阿。 
# 对于rman下的delete archivelog all方式不会删除控制文件中对应的归档日志信息,但在控制文件中设置delete状态, 
# 即v$archived_log视图的status列为deleted 
SQL> select min (FIRST_TIME), min (COMPLETION_TIME), max (FIRST_TIME), max (COMPLETION_TIME) from 
2 v$archived_log; 
MIN(FIRST_TIME) MIN(COMPLETION_TI MAX(FIRST_TIME) MAX(COMPLETION_TI 
----------------- ----------------- ----------------- ----------------- 
20121023 18:03:12 20121023 18:04:53 20121130 12:00:26 20121130 12:14:51 
SQL> select min (FIRST_TIME), min (COMPLETION_TIME), max (FIRST_TIME), max (COMPLETION_TIME) from 
2 gv$archived_log; 
MIN(FIRST_TIME) MIN(COMPLETION_TI MAX(FIRST_TIME) MAX(COMPLETION_TI 
----------------- ----------------- ----------------- ----------------- 
20121023 18:03:12 20121023 18:04:53 20121130 12:00:26 20121130 12:14:51 
# 既然这般,如何是好啊? 
# 那就直接在asmcmd命令行下删除吧。一顿狂删 rm -rf 2012_09_30/ 
# 莫急,莫急,一不小心删完了,我晕,ORA-00254/ORA-15173 Archive_log Directory On Asm Being Deleted 在等候阿。 


小结 
a、delete archivelog all将会毫无保留的删除所有的归档日志(在控制文件中有相应记录的) 
b、归档日志的信息被记录在控制文件之中,其生存期和可保留的总数也受到控制文件创建初以及参数control_file_record_keep_time限制 
c、对于那些已经在控制文件中被覆盖的归档日志,该方式不起作用,使用backup archivelog all delete input同样不起作用 
d、注意backup archivelog all时delete input与delete all input有些差异,前者删除仅仅被备份过的归档日志,而后者则对于多个归档位置下的所有归档日志全部删除。 
e、视图v$archived_log或gv$archived_log提供了归档日志的相关详细信息 
f、建议备份归档日志后再删除。注,RAC+ASM下切不可使得archivedlog文件夹为空,否则,整个文件夹连同上级空目录会被删除











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





相关实践学习
日志服务之使用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版的一些典型使用合集。

热门文章

最新文章