今天数据库启动的时候出现ORA-03113: end-of-file on communication channel,这个错误,网络上面查了一下
经查询资料,了解到Oracle对自身日志文件有一个限制就是每个日志文件不能大于2G,大于2G以后会出现各种问题。且同样对日志文件有这样限制的软件还有不少,如Squid,RoseHA等。因此以后我们在今后要实际生产环境中部署的时候,一定要针对这一特点手工对Oracle做自动日志切割和清理
用oracle用户身份登陆
解决方法:
sqlplus / as sysdba
startup mount 加载数据库
SQL> archive log listCurrent 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 /
或则是先备份然后再删除
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%';
这个参数一般在数据库正常无法恢复了,可以用它来强行打开数据库,把数据文件先备份出来,这是
一个比较好的办法。