刪除 ORACLE ARCHIVE LOG
下面指令,都請至該台DB SERVER cmd模式下執行
1.查看archive相關設定值
c:\>sqlplus / as sysdba
SQL> SHOW PARAMETER ARCH
NAME TYPE VALUE
—————————- ——– ——————-
………(篇幅關係 上面還有,只取下面)
log_archive_dest_state_9 string enable
log_archive_duplex_dest string
log_archive_format string ARC%S_%R.%T
log_archive_local_first boolean TRUE
log_archive_max_processes integer 2
log_archive_min_succeed_dest integer 1
log_archive_start boolean FALSE
log_archive_trace integer 0
remote_archive_enable string true
standby_archive_dest string %ORACLE_HOME%\RDBMS
SQL>EXIT
2.查看寫入目錄路徑及目錄size限制
c:\>sqlplus / as sysdba
SQL> show parameter db_recovery
NAME TYPE VALUE
———————————— ————– —————————————-
db_recovery_file_dest string D:\oracle\flash_recovery_area
db_recovery_file_dest_size big integer 20G
上面的資訊表示 D:\oracle\flash_recovery_area\ 不能超過20G,
否則oracle會罷工的。
3.刪除archive log
1.執行下面指令,注意!!target 與 / 中間有空格
C:\>Rman target /
RMAN> backup archivelog all delete input;
channel ORA_DISK_1: backup set complete, elapsed time: 00:29:36
channel ORA_DISK_1: deleting archive log(s)
archive log filename=D:\ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\ARC00807_0618831482.001
recid=798 stamp=650904762
archive log filename=D:\ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\ARC00808_0618831482.001
recid=799 stamp=650935209
…………..
Finished backup at 02-MAY-08
RMAN>exit;
2.可能還會有另一份Archive log需刪除。
查看 剛剛參數,一般預設如下
standby_archive_dest string %ORACLE_HOME%\RDBMS
則
檢查 D:\oracle\product\10.2.0\db_1\RDBMS\
若還有ARC*.* 請自行刪除。
補充:
1.若是您手動到D:\oracle\flash_recovery_area\目錄
刪除archive log,手動刪除的,
就算執行了backup archivelog all delete input;
因為元配不在,
副的(D:\oracle\product\10.2.0\db_1\RDBMS\arc*.*)
也不會刪,
以後請勿直接去os刪archive。
直接執行下面指令,即可一併刪除。
backup archivelog all delete input;
2.使用backup archivelog all delete input; 仍不行?
有可能磁碟容量大爆滿,rman要備份後刪除也不行
可以改用下面的指令:
C:\>Rman target /
RMAN>delete force noprompt archivelog until time 'sysdate – 5';
RMAN>exit;
完成
3.要是您無法使用EM的自動備份後刪除archivelog?
同事傳授的方法:(使用rman的run script作法)
3.1 產生一bat如下:
rman target=/ cmdfile=c:\rman.txt
3.2 產生c:\rman.txt內容如下:(每次都只保留5天內的archive log)
delete force archivelog until time 'sysdate – 5';
exit;
3.3 最後把bat放到排程,每天執行一次。
4.大絕招增加空間(因為後來還是有遇到上面的方法都不行的)
到db console 用 sqlplus / as sysdba登入 執行下面指令 增大空間到100g
(每個人空間不一樣請自行更正)
SQL> ALTER SYSTEM SET db_recovery_file_dest_size=100g scope=both;
SQL> shutdown immediate;
SQL> startup;
其實到補充3應該就要能可以了,原因是flash_recovery_area目錄下不只擺archive log 檔案還有backupfile目錄(備份檔案)。
一直以來遇到這類問題大家的焦點都擺在怎麼清除archive 其實若有定期做排程備份也是一個佔空間的原因,下次有時間在找出指令刪除備份檔
[oracle@example ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.5.0 – Production on Tue Oct 4 13:54:37 2011
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
SQL> conn / as sysdba;
Connected.
SQL> show parameter db_recovery
NAME TYPE VALUE
———————— ——- ———————
db_recovery_file_dest string /u01/app/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 20G
Delete archive log
備份後刪除:
[oracle@ksfm2 ~]$ rman target /
Recovery Manager: Release 10.2.0.5.0 – Production on Tue Oct 4 14:21:52 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: KCLV (DBID=3445048213)
RMAN> CROSSCHECK ARCHIVELOG ALL;
….
….
RMAN> BACKUP ARCHIVELOG ALL DELETE ALL INPUT;
直接刪除不備份
RMAN> delete force noprompt archivelog until time 'sysdate – 7';
RMAN> exit;
Shell Scripts 清除範例,可以排在 Cron job
(1) clearArchivelogs.sh
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=ORCL
export RMAN_CMDFILE=RMAN_CMDFILE
$ORACLE_HOME/bin/rman target=/ cmdfile=$RMAN_CMDFILE
# Cleaning Empty Folder
find /u01/app/oracle/flash_recovery_area/ORCL/archivelog -type d -empty -exec rm -rf {} \;
(2) RMAN_CMDFILE
delete force archivelog until time 'sysdate – 7';
exit;