Oracle归档日志清理

来自linux中国网wiki
跳到导航 跳到搜索

oracle归档日志清理

alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'



rman target /

列出并确认归档日志路径

RMAN>list archivelog all;


delete archivelog all completed before 'sysdate-7'; 

–删除系统时间7天以前的归档日志,不会删除闪回区有效的归档日志  今天就直接用了这个 
 SYSDATA-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。 
同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全备份数据库 

注意 
RMAN> delete archivelog all completed before 'sysdate-1'; (“1”对应是一天,若想删除6小时前的归档日志,则改为0.25)
    删除完归档,若有对应的备份策略需要重新启动全备



5、删除失效的归档日志

RMAN>delete expired archivelog all;

6、如果日志爆了,用以上命令可能不起作用,可以使用下面的命令强行删除所有日志

RMAN>delete noprompt force archivelog all;



清除归档日志简单的shell脚本

#对于RAC环境或者ASM需要清除archive,使用shell脚本调用RMAN是比较妥当的方式
#其次,如果你的archive位于闪回区,制定合理的保留策略,也可以让Oracle自动老化无用的归档日志

robin@SZDB:~/dba_scripts/custom/bin> more clean_arch.sh 
# +-------------------------------------------------------+
# +    Clean archived log as specified time               |
# +    Author : Robinson                                  |
# +    Blog   : http://blog.csdn.net/robinson_0612        |
# +    Usage  :                                           | 
# +         clean_arch.sh $ORACLE_SID                     |
# +-------------------------------------------------------+
#
#!/bin/bash 
# --------------------
# Define variable
# --------------------

if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi

if [ -z "${1}" ];then
    echo "Usage: "
    echo "      `basename $0` ORACLE_SID"
    exit 1
fi

ORACLE_SID=$1;                 export ORACLE_SID 
$ORACLE_HOME/bin/rman log=/users/robin/log/rman.log <<EOF   
connect target /
run{
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog all completed before 'sysdate - 1';
}
exit;
EOF
exit 



原文:https://blog.csdn.net/leshami/article/details/9308287


see also

Oracle 11g正确删除归档日志方法

oracle归档日志清理

Oracle RMAN 清除归档日志

Oracle归档日志删除

oracle各类日志清理

oracle归档日志占满系统存储空间,导致数据库启动失败