目录
!!问题1:ORA-03113:end-of-file on communication channel
最近在玩oracle冷备份的知识,居然把数据库搞崩了很多次~~~mark一下出现的问题和弄了很久才解决的办法。
!!问题1:ORA-03113:end-of-file on communication channel
这个是在什么情况下出现的呢,源于我要将冷备份恢复到其他目录,具体是这样做的:
将冷备份的数据库恢复到其它磁盘
1。将冷备份的数据库恢复到不同的磁盘
2。修改参数文件中control_files的值,指到新的文件(记得重启数据库)
3。启动数据库到mount状态
4。改文件的名称到新位置(日志文件也要复制)
5。Alter database open;
报了上面那个错误,然后任何操作都做不了了,一直说没连上数据库,百度了n多文章,大多数都说是归档文件满了,可我的数据库是非归档模式,压根就没用到归档日志。。。。最后,是这样解决的,这里顺便分享个解决问题的思路:看警告日志——找到具体的原因——再对症下药
在说解决03113的问题之前先说个小小插曲,也是一个error,是关于上面第4步的,为什么我要在括号内写个日志文件也要复制呢,因为我最初只复制了数据文件,然后所有日志文件都会报错ORA-01113: file 1 needs media recovery
这个小错误的解决方法:
SQL> RECOVER DATAFILE '/u01/app/oracle/oradata/dtberp/system01.dbf'
Media recovery complete.
SQL> recover tablespace system;
Media recovery complete.
SQL> RECOVER DATABASE;
Media recovery complete.
SQL> ALTER DATABASE OPEN;
Database altered.
但是如果你连日志文件也一起复制就不会出现这个问题啦。好了下面进入正题~~~
问题1的解决办法:
1、先查出你的警告日志是放在哪的——show parameter background_dump
2、查看你的警告日志,定位问题,具体的话你可以根据时间去查,我这边查到的问题是这样的
由于error338而导致的实例终结
ORA-00338: log 1 of thread is more recent than control file
ORA-00312: online log 1 thread 1: 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG'
USER (ospid: 2876): terminating the instance due to error 338
Instance terminated by USER, pid = 2876
这下清晰了,不是归档日志,不是其他原因,而是error338!我们看一下这个错误 log 1 of thread is more recent than control file,日志文件比控制文件新。
为什么会出现这个错误呢??拷贝出来控制文件,然后对数据库进行一些操作,这时我的数据文件和日志文件已经修改了,然后关闭数据库,使用拷贝出来的控制文件替换原控制文件,启动数据库,实例错误。原因是拷贝的控制文件太旧了,后面又做了许多修改。
3、这边附上一个该问题的解决办法:http://www.oracleplus.net/arch/344.html
我就是参考上面网址的方法搞定的——重建控制文件(具体大家可以参考上面的网址,比较详细,我这边直接列出我修改的过程)
3.1 将重建控制文件的SQL命令保存到跟踪文件中——alter database backup controlfile to trace;
3.2 找到这个跟踪文件(怎么找等我有空再整理整理吧哈哈懒得写了),复制出创建控制文件的脚本
3.3关闭数据库——shutdown abort;
3.4执行重建控制文件的脚本,我的长下面这样
3.5恢复数据库——recover database; 在recover的时候会出现一个新的问题,看这位博主的文章:
https://blog.youkuaiyun.com/shaochenshuo/article/details/46650455
同样的,也是很详细,照着做就行了哈哈。贴个最后成果吧,终于救回了崩溃的实例