1、定时清除归档日志
[root@hfcwroot ~]# su - oracle
[oracle@hfcwroot ~]$ mkdir -p /home/oracle/delarchlog
[oracle@hfcwroot ~]$ cd /home/oracle/delarchlog
[oracle@hfcwroot delarchlog]$ vi del_arch.sh
把下面内容粘贴到脚本中,保存退出
#!/bin/bash
# 删除归档脚本
# 修改区域
# ==========================
# 1. 指定生成删除归档日志的存放路径
log_dir=/home/oracle/delarchlog# 如果无目录创建目录
if ! test -d ${log_dir}
then
mkdir -p ${log_dir}
fi# 自动执行区域
# ================================
# 脚本执行日期
TODAY=`date +%y%m%d`
msg_log=${log_dir}/delete_archive${TODAY}.log
log_summary=${log_dir}/summary.log# 补充调用环境变量
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi# 清除失效归档,删除1天前归档,并记录
$ORACLE_HOME/bin/rman target / msglog=${msg_log} append <<EOF
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time 'sysdate-30';
exit;
EOF# 记录操作结果
RC=$?# 记录磁盘使用情况
echo -e "\n------------------------" >> ${msg_log}
echo "------ Disk Space ------" >> ${msg_log}
df -h >> ${msg_log}# 判断,汇报清除归档结果
if [ "$RC" == 0 ]; then
echo "------ no error occured ------" >> ${msg_log}
else
echo "------ error ------" >> ${msg_log}
fiecho -e "$(date +%y%m%d) : $(grep error ${msg_log})" >> ${log_summary}
给脚本赋权:
[oracle@hfcwroot delarchlog]$ chmod 777 del_arch.sh
注:脚本中的归档日志为清除30天之前的,根据实际需求修改
添加到计划任务
crontab -e
30 1 * * * sh /home/oracle/delarchlog/del_arch.sh
service crond restart
2、手动清除归档日志:
查看归档日志大小
[root@hfcwroot ~]#su - oracle
[oracle@hfcwroot ~]$sqlplus / as sysdba
SQL>show parameter recover
可查看到归档日志目录为:/u01/app/oracle/fast_recovery_area/******/archivelog
可以查看该目录的大小,对比数据库设置的日志空间,该目录大小不能大于数据库设置的空间。
扩大归档日志大小
SQL>alter system set db_recovery_file_dest_size=100G;
清理归档日志
扩大后还需设置定时计划清理归档日志,需要切换到oracle账号执行命令
[root@hfcwroot ~]#su - oracle
[oracle@hfcwroot ~]$rman target /
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;
RMAN> delete archivelog until time 'sysdate-7';
上面三条命令的解释:
1、第一条命令可以把无效的expired的archivelog标出来。
2、第二条命令直接全部删除过期的归档日志。
3、第三条命令直接删除七天前所有的归档日志。