您的位置:首页 > 数据库

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

2012-05-10 09:35 537 查看
今天数据库启动的时候出现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 博客,请务必保留此出处/article/4449810.html

在命令窗口里面执行

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%';

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

一个比较好的办法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐