问题:
启动数据库的时候出现下面的错误信息。
SQL> startup
ORACLE instance started.
Total System Global Area 629144664 bytes
Fixed Size 8899672 bytes
Variable Size 507510784 bytes
Database Buffers 104857600 bytes
Redo Buffers 7876608 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 100109
Session ID: 237 Serial number: 16487
查看alert的启动日志会出现下面查错误。
[oralce12:oracle:sso$]ls -aclr|grep alter
[oralce12:oracle:sso$]ls -aclr|grep alert
-rw-r-----. 1 oracle oinstall 268891 Jul 23 16:19 alert_sso.log
RA-00313: open failed for members of log group 1 of thread
ORA-00312: online log 3 thread 1: '/u01/app/oradata/SSO/redo03.log'
原因分析:
从上面alert_sso.log的错误日志可以知道日志组1的数据文件已经损坏或者丢失。
解决方案:
1、查看v$log视图
SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 19 NO INACTIVE
3 18 NO INACTIVE
2 20 NO CURRENT
可以知道,改组是非当前状态,没有归档。所以需要执行第三步命令。
2、用clear命令重建该日志文件。
SQL> alter databse clear logfile group 3;
3、如果该日志组还没有归档,则需要用。
SQL> alter database clear unarchived logfile group 3;
Database altered.
4、打开数据库,重新备份数据库
SQL> alter database open;
Database altered.
说明:
1)、如果损坏的是非当前的联机日志文件,一般只需要clear就可以重建该日志文件,但是如果该数据库处于归档状态但该日志还没有归档,就
需要强行clear.
2)、建议clear,特别是强行clear后作一次数据库的全备份。
3)、此方法适用于归档与非归档数据库。
损坏当前联机日志:
归档模式下当前日志的损坏有两种情况,
一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用alter database clear unarchived
logfile group n来重建。
二、是日志组中有活动的事务,数据库需要媒体恢复,日志组需要用来同步,有两种补救办法
A. 最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份
B. 通过强制性恢复,但是可能导致数据库不一致。




