一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - delete archivelog all無法清除歸檔日志解決方法

delete archivelog all無法清除歸檔日志解決方法

2019-11-16 17:09數據庫教程網 Oracle

最近在因歸檔日志暴增,使用delete archivelog all貌似無法清除所有的歸檔日志,究竟是什么原因呢?本文將為您解答,需要的朋友可以參考下

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

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文件夾為空,否則,整個文件夾連同上級空目錄會被刪除

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本丰满www色 | 三叶草私人研究所 | 性绞姿始动作动态图 | 能播放的欧美同性videos | 全黄h全肉细节修仙玄幻文 全彩调教侵犯h本子全彩妖气he | a级亚洲片精品久久久久久久 | 亚洲波霸 | 欧美视频一区二区专区 | 久热在线这里只有精品7 | 亚洲一成人毛片 | 国产精品极品美女自在线 | 美女gif趴跪式抽搐动态图 | 国产一区二区三区免费在线视频 | 欧美一区不卡二区不卡三区 | 欧美又黄又激烈真实床戏 | 狠狠色婷婷丁香六月 | 无码天堂亚洲国产AV久久 | 麻豆天美精东果冻传媒在线 | 日本捏胸吃奶视频免费 | 爽爽窝窝午夜精品一区二区 | 国产肥女bbwbbw | 色综合中文字幕天天在线 | 射18p| 亚洲男人的天堂网站 | 美国一级大黄大色毛片 | 欧美亚洲一区二区三区 | 男人使劲躁女人视频免费 | 国产在线视频在线观看 | 欧美在线观看一区二区三 | 三体动漫在线观看免费完整版2022 | 日本 视频 在线 | 久久机热视频 这里只有精品首页 | 国产性tv国产精品 | yellow视频在线观看免费 | 欧美ggg666| 192.168.191 | 免费观看小视频 | 国产日本久久久久久久久婷婷 | 美女用屁股把人吞进肚子 | 四神集团1涨奶是第几章 | 私人黄色影院 |