Oracle归档日志清理
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