ORACLE连接异常报ORA-00257,清理归档日志

oracle连接异常报ORA-00257

当oracle归档日志满了后,将无法正常登入oracle,需要扩充空间或删除一部分归档日志。
一.首先删除归档日志物理文件,归档日志一般都是位于archive目录下。建议操作前先对数据库进行备份,删除时至少保留最近几天的日志用于数据库恢复。
二.删除归档日志的物理文件后即可正常登入oracle,但是还没有吧归档日志删除干净,oracle的control file里面仍然记录着这些archivelog的信息。

rman删除归档日志

执行命令

RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

SYSDATA-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。

RMAN清除方式会自动清除磁盘上的归档日志文件,同时会释放控制文件中对应的归档日志的归档信息。可以基于不同的条件来清除归档日志,如基于SCN,基于SEQUENCE,基于TIME等方式。对于上述的三种方式又可以配合from, until, between .. and .. 等等子句来限定范围,方式灵活多变。+下面的命令用于校验归档日志的有效性,列出无效的归档日志,以及以何种方式清除归档日志,搜集如下几种常用的:

delete noprompt archivelog until time "to_date('XXXX-XX-XX','YYYY-MM-DD')";    ---> 清理到某天日期之前的归档
delete noprompt archivelog until time "to_date('2016-09-14 18:00:00','YYYY-MM-DD hh24:mi:ss')";   ---> 清理到具体时分秒之前的归档日志
cross check archivelog all;                           --->校验日志的可用性
list expired archivelog all;                         --->列出所有失效的归档日志
delete archivelog until sequence 16;                 --->删除log sequence为16及16之前的所有归档日志
delete archivelog all completed before 'sysdate-7';   --->删除系统时间7天以前的归档日志,不会删除闪回区有效的归档日志
delete archivelog all completed before 'sysdate - 1'; --->同上,1天以前的
delete archivelog from time 'sysdate-1';             --->注意这个命令,删除系统时间1天以内到现在的归档日志
delete noprompt archivelog all completed before 'sysdate';  --->该命令清除当前所有的归档日志
delete noprompt archivelog all completed before 'sysdate-0';  --->该命令清除当前所有的归档日志
delete noprompt archivelog all;                              --->同上一命令

实现清理一个小时前的归档日志

delete force archivelog all completed before 'sysdate-1/24';

生产环境勿用。

自动化脚本清理

#!/bin/sh
BACK_DIR=/oracle/clear_archlog/data
export DATE=`date +%F`
echo "      " >> $BACK_DIR/$DATE/rman_backup.log
echo `date '+%Y-%m-%d %H:%M:%S'` >> $BACK_DIR/$DATE/rman_backup.log
su - oracle -c "
mkdir -p $BACK_DIR/$DATE
rman log=$BACK_DIR/$DATE/rman_backup.log target / <> $BACK_DIR/$DATE/rman_backup.log

备注:个人博客同步至。

你可能感兴趣的:(ORACLE连接异常报ORA-00257,清理归档日志)