首頁 資料庫 mysql教程 delete archivelog all无法清除归档日志解决方法

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

Jun 07, 2016 pm 05:55 PM
delete

最近在因归档日志暴增,使用delete archivelog all貌似无法清除所有的归档日志,究竟是什么原因呢?本文将为您解答,需要的朋友可以参考下

最近在因归档日志暴增,使用delete archivelog all貌似无法清除所有的归档日志,到底是什么原因呢?

1、演示环境
代码如下:
SQL> select * from v$version where rownumBANNER
----------------------------------------------------------------
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文件夹为空,否则,整个文件夹连同上级空目录会被删除
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1669
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
鍵盤刪除鍵是哪個 鍵盤刪除鍵是哪個 Mar 16, 2023 pm 04:48 PM

鍵盤刪除鍵有兩個:del(delete)鍵和backspace鍵。 backspace又稱退格鍵,這個按鍵可以把遊標前面的文字內容刪除掉;而delete鍵可以刪除字元、檔案和選取物件。每按一次del鍵,就會刪除遊標右側的一個字符,遊標右側的字符向左移動一幀;當選中一個或多個文件/資料夾時,按Del鍵可快速刪除;在某些應用程式中選取某個對象,按Del鍵可快速刪除選取對象。

delete鍵有什麼功能 delete鍵有什麼功能 Mar 10, 2023 pm 06:07 PM

delete鍵的功能為:1、刪除字符;每按一次delete鍵,就會刪除遊標右側的一個字符,遊標右側的字符向左移動一幀。 2、刪除檔案;選取一個或多個檔案/資料夾時,按Delete鍵快速刪除(移至回收站,可恢復)。 3.刪除選取對象;在某些應用程式中選取某個對象,按Delete鍵可快速刪除選取對象。

如何控制 + Alt + 刪除:Mac 教學課程 如何控制 + Alt + 刪除:Mac 教學課程 Apr 16, 2023 pm 12:37 PM

Control+Alt+Delete:「Mac」方式Ctrlaltdel是Windows使用者用來開啟「工作管理員」的常用組合鍵。他們通常會從管理器選單中退出不需要的應用程序,以釋放電腦上的一些空間。 Control+Alt+DeleteMac變體可讓您開啟「強制退出」功能表。如果Mac用戶想要退出導致問題的程式或查看開啟的程序,他們可以與選單互動以進一步調查。如何在Mac上執行ControlAltDelete?如果您有任何故障的應用程序,您必須使用此組合鍵來擺

delete刪除的檔案可以恢復嗎 delete刪除的檔案可以恢復嗎 Feb 24, 2023 pm 03:49 PM

delete刪除的文件可以恢復;因為當使用者使用delete來刪除文件,會將這些文件移入回收站,並沒有完全刪除。恢復方法:1、開啟“回收站”,選取要恢復的文件,點擊“還原此項目”即可;2、開啟“回收站”,選取要復原的文件,使用撤銷捷徑“ctrl+z”即可。

如何在jQuery中新增、編輯和刪除表格行? 如何在jQuery中新增、編輯和刪除表格行? Sep 05, 2023 pm 09:49 PM

在當今的Web開發時代,有效且有效率的表管理變得非常重要,特別是在處理資料量大的Web應用程式時。從表中動態新增、編輯和刪除行的能力可以顯著增強使用者體驗並使應用程式更具互動性。實現這一目標的一種有效方法是利用jQuery的強大功能。 jQuery提供了許多功能來幫助開發人員執行操作。表格行表格行是相互關聯的資料的集合,由HTML中的元素表示。它用於將表格中的單元格(由元素表示)分組在一起。每個元素用於定義表中的一行,對於多屬性表,通常包含一個或多個元素。語法$(selector).append(co

SpringBoot中的PUT和Delete請求怎麼使用 SpringBoot中的PUT和Delete請求怎麼使用 May 13, 2023 pm 12:16 PM

PUT和Delete請求使用在Form表單中,只支援get和post方式,而為了實現put方式我們可以透過以下三個步驟實作1)SpringMVC中配置HiddenHttpMethodFilter2)頁面建立一個post表單3)建立一個input項,name ="_method",值就是指定的請求方式其中在HiddenHttpMethodFilter類別中取得"_method"的值,得到新的請求方式。其中th標籤是thymeleaf模板,表示只有當employe

資料庫Delete怎麼用 資料庫Delete怎麼用 Nov 13, 2023 am 11:50 AM

資料庫Delete用法:1、刪除單一記錄;2、刪除多筆記錄;3、刪除所有記錄;4、刪除特定條件的記錄。

delete鍵的功能是什麼 delete鍵的功能是什麼 Dec 31, 2020 pm 04:17 PM

delete鍵的功能是:1、刪除文字;2、刪除檔案;3、刪除所選物件。 delete鍵通常位於鍵盤的右上角區域,當我們按下delete鍵時可以刪除遊標右邊的一個字元。

See all articles