ORA-03113: end-of-file on communication channel ORA-00257: archiver error. Connect 归档日志满导致数据库没有办法启动

今天数据库启动的时候出现ORA-03113: end-of-file on communication channel,这个错误,网络上面查了一下

经查询资料,了解到Oracle对自身日志文件有一个限制就是每个日志文件不能大于2G,大于2G以后会出现各种问题。且同样对日志文件有这样限制的软件还有不少,如Squid,RoseHA等。因此以后我们在今后要实际生产环境中部署的时候,一定要针对这一特点手工对Oracle做自动日志切割和清理

用oracle用户身份登陆

解决方法:

sqlplus / as sysdba

startup mount   加载数据库

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /opt/oracle/archivelogs   --归档文件位置
Oldest online log sequence     3621
Next log sequence to archive   3624

Current log sequence           3624

查看规档空间使用情况

 select * from v$recovery_file_dest;

NAME        SPACE_LIMIT        SPACE_USED        SPACE_RECLAIMABLE      NUMBER_OF_FILES
----------        -----------                        ----------                 -----------------                        ---------------
?                             ?                           ?                               ?                                              ?

查看归档文件位置

select  name,sequence#,registrar,standby_dest,archived,status from v$archived_log;

exit   --退出sqlplus /终端

切换到相关的位置

cd /opt/oracle/archivelogs

可以使用mv将相关的日志文件转移到别的地方

mkdir /home/oracle/archivebackupfiles

mv  *.* /home/oracle/archivebackupfiles


删除失效的日志记录信息:

rman target /

crosscheck archivelog all;

delete expired archivelog all;

alter database open




oracle 的归档日志,达到设置的极限值之后,数据库就不能使用了。

出现的错误提示是:

ORA-00257: archiver error. Connect internal only, until freed



那么这时候可以选择把它的日志文件移动到别的地方去,然后去去删除参数文件里面的值

以oracle用户身份登陆

1、查看归档日志文件位置

sqlplus / as sysdba

archive log list;

2、移动归档日志到别的地方

cd 位置

mv *.* 目标备份位置

3、删除参数文件中的值

在linux终端中输入

rman target /

crosscheck archivelog all;
delete archivelog all;

或则是先备份然后再删除

backup archivelog all format '/home/oracle/archbackup/db1_arch_%U' delete input;

另外的方法

改变规档日志空间的大小

SQL> ALTER SYSTEM SET db_recovery_file_dest_size=40g SCOPE=BOTH;

系统已更改。

SQL> SHOW parameter db_recovery_file_dest ;


本文出自 “鞋chen3888015.taobao.com 博客,请务必保留此出处http://chen3888015.blog.51cto.com/2693016/1039497




在命令窗口里面执行

DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

说明

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

同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全备份数据库

DELETE ARCHIVELOG FROM TIME 'SYSDATE-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子项上做很多操作,实现更复杂的功能

3.简要介绍一下report obsolete命令



使用report obsolete命令报告过期备份

6 试着同步一下,看行不行,结果不行,crosscheck还是失败:

RMAN> resync catalog;



正在启动全部恢复目录的 resync

完成全部 resync



RMAN> crosscheck archivelog all;


7 用list expired看看是否有失效的archive log,证明没有失效的archive log:

RMAN> list expired archivelog all;





====================================
oracle隐藏参数字典 x$ksppi x$ksppstvl 
oracle的隐藏参数字典是 x$ksppi,x$ksppstvl基表中,有关隐含参数说明,可以查询这个基表

SQL> desc x$ksppi

SQL> desc x$ksppcv
比如我现在要查询隐含参数
_allow_resetlogs_corruption /// 这个参数说明允许数据库在不一致的条件下,进行数据库打开


查看隐含参数的值,方式是


SQL> col ksppinm format a30
SQL> col ksppstvl format a30
SQL> select ksppinm,ksppstvl from x$ksppcv cv,x$ksppi pi wherecv.indx=pi.indx a
nd pi.ksppinm like '_allow%';


这个参数一般在数据库正常无法恢复了,可以用它来强行打开数据库,把数据文件先备份出来,这是
一个比较好的办法。


你可能感兴趣的:(数据库,Linux,oracle,rman清空规档日志,清除规档日志,规档日志)