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 / <<EOF
# delete force archivelog all completed before 'sysdate-1/24'; # 这里执行清除归档日志,如果不想手动输入YES,则可以添加noprompt参数
delete force noprompt archivelog all completed before 'sysdate-1/24';
exit;
EOF
"
echo " " >> $BACK_DIR/$DATE/rman_backup.log
备注:个人博客同步至简书。
网友评论