当oracle 归档日志满了后,将无法正常登入oracle,需要删除一部分归档日志才能正常登入oracle。
一、首先删除归档日志物理文件,归档日志一般都是位于archive目录下,aix系统下文件格式为“1_17884_667758186.dbf”,建议操作前先对数据库进行备份,删除时至少保留最近几天的日志用于数据库恢复。
二、把归档日志的物理文件删除后,我们就可以正常登入oracle了,但是还没完全把归档日志删除干净,oracle的controlfile中仍然记录着这些archivelog的信息,在oracle的oem管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,接下去我们要做的就是这个工作。
我们利用rman进行删除操作,操作步骤如下:(win客户端系统为例)
1.指定数据库实例
c:\documents and settings\administrator>set oracle_sid =orcl
2.连接数据库
c:\documents and settings\administrator>rman target sys/sysadmin@orcl
3.查看归档日志的状态
rman> list archivelog all;
4.手工删除归档日志文件
rman> delete archivelog all completed before 'sysdate-7';
说明:
sysdata-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。
同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,,做完这个删除,最好马上进行全备份数据库
delete archivelog from time 'sysdate-7'; 删除从7天前到现在的全部日志,慎用
unix/linux下也可以通过find找到7天前的归档数据,使用exec子操作删除
find /oraarchive -xdev -mtime +7 -name *.dbf -exec rm -f {} ;
这样做仍然会在rman里留下未管理的归档文件
仍需要在rman里执行下面2条命令
crosscheck archivelog all;
delete expired archivelog all;
所以还不如上面的方法好用,不过用find的好处就是,可以在条件上,和exec子项上做很多操作,实现更复杂的功能
