Windows环境下的Oracle 11g在一次关机后,无法正常启动,且无法启动到mount状态,一直提示:

ORA-03113: end-of-file on communication channel
Process ID: 4276
Session ID: 1286Serial number: 2
在D:\app\Administrator\diag\rdbms\wind\wind\trace目录里根据Process ID: 4276找到相应号码的trc文件查看(实例名_ora_XXXXX.trc都是前台服务器进程的trace文件),发现如下提示:
Error:kccpb_sanity_check_2
Control filesequence number mismatch!
fhcsq: 168754bhcsq: 168757 cfn 0
所以确认为控制文件问题引起。

首先退出了SQLPLUS,然后把库文件所在的整个目录备份了一份。
然后尝试restore控制文件:
         C:\> rman target/
         RMAN> shutdownimmediate
         RMAN> startupnomount
         RMAN> restorecontrolfile from ‘D:\ptc\Windchill_10.0\ocu\oradata\wind\CONTROL03_WIND.CTL’;
完成以上操作后,重新进入SQLPLUS,启动数据库时问题依旧。
可以确认所有控制文件全部出了问题,因库文件等都存在,所以决定重建控制文件:
C:\> sqlplus /nolog
SQL> conn / as sysdba
SQL> shutdown immediate
SQL> startup nomount

SQL> CREATE CONTROLFILE REUSE DATABASE "WIND"NORESETLOGS NOARCHIVELOG
            MAXLOGFILES 16
            MAXDATAFILES 100
            MAXINSTANCES 2
            MAXLOGHISTORY 453
            LOGFILE
            GROUP 1'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDREDO01.LOG' SIZE 50M,
            GROUP 2'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDREDO02.LOG' SIZE 50M,
            GROUP 3'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDREDO03.LOG' SIZE 50M
            DATAFILE
            'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDBLOBS01.DBF',
            'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDINDEX01.DBF',
            'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDSYSAUX01.DBF',
            'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDSYSTEM01.DBF',
            'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDUNDOTBS01.DBF',
            'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDUSERS01.DBF',
            'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDWCAUDIT01.DBF'
            CHARACTER SET ZHS16GBK;
SQL> RECOVER DATABASE;
SQL> alter database open;
SQL> alter tablespace temp
            add tmpfile'D:\ptc\Windchill_10.0\ocu\oradata\wind\WINDTEMP01.DBF'
            SIZE 200M REUSE AUTOEXTEND ON MAXSIZE 5G;
完成以上步骤后,重启数据库正常。

==========================================================================
CREATE CONTROLFILE REUSE DATABASE "PARSEDB2"NORESETLOGS NOARCHIVELOG
MAXINSTANCES 8
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
Datafile
'F:\Program\Oracle\oradata\PARSEDB2\SYSTEM01.DBF',
'F:\Program\Oracle\oradata\PARSEDB2\SYSAUX01.DBF',
'F:\Program\Oracle\oradata\PARSEDB2\UNDOTBS01.DBF',
'F:\Program\Oracle\oradata\PARSEDB2\USERS01.DBF'
LOGFILE GROUP 1 ('F:\Program\Oracle\oradata\PARSEDB2\redo01.log') SIZE 51200K,
GROUP 2 ('F:\Program\Oracle\oradata\PARSEDB2\redo02.log') SIZE 51200K,
GROUP 3 ('F:\Program\Oracle\oradata\PARSEDB2\redo03.log') SIZE 51200K;


alter tablespace temp
            add tmpfile'F:\Program\Oracle\oradata\PARSEDB2\TEMP01.DBF'
            SIZE 200M REUSE AUTOEXTEND ON MAXSIZE 5G;

==================================================================================

实际问题解决记录:(无法启动到mount状态

ORA-03113: 通信通道的文件结尾,是一个通用的错误提示,很多错误都会产生这个错误提示。

本问题的最终原因是Control filesequence number mismatch



开始是通过网络连接方式(即如sqlplus user/mima@IP地址/服务名(或是sid,看sqlnet文件支持的命名方法))访问数据库服务端,发现错误提示如下:

ERROR:
ORA-27101 Shared memory realm does not exist
ORA-01034 ORACLE not available 

参看:解决ORA-01034/ORA-27101

于是,换成 以本地连接方式(即如sqlplus / as sysdba)访问数据库服务端,发现错误提示如下:

ERROR:
ORA-01031: insufficient privileges

解决该错误后,继续以本地连接方式(即如sqlplus / as sysdba)访问数据库服务端,发现错误提示如下:

已连接到空闲例程。

SQL> startup
ORACLE 例程已经启动。

ORA-03113: 通信通道的文件结尾

注释:

网络连接方式要经过Oracle数据库软件的SQL*NET层来间接访问数据库服务端,而本地连接方式不用经过该层直接访问数据库服务端。由此可以看出,因为网络连接方式要经过Oracle数据库软件的SQL*NET层来间接访问数据库服务端,即多了一个环节,所以由此获得的错误提示不易于发现错误提示的本质原因(SQL*NET层错误的干扰不易于发现数据库服务端实例的错误)。故而,每次以网络连接方式连接时若有问题,就先以本地连接方式访问数据库服务端,看是否会有错误提示出现,若有,说明是数据库服务端实例的错误,若是没有,则应该考虑SQL*NET层的错误(即网络问题)。

以本地连接方式(即如sqlplus / as sysdba)访问数据库服务端的具体实际操作过程如下:

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\h>set oracle_sid=parsedb2

C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 13:20:27 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-01031: insufficient privileges


请输入用户名:  ^V
C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 13:33:22 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-12560: TNS: 协议适配器错误


请输入用户名:  ^V^V
C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 13:34:27 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-01031: insufficient privileges


请输入用户名:  ^V
C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 13:47:36 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  778387456 bytes
Fixed Size                  1374808 bytes
Variable Size             444597672 bytes
Database Buffers          327155712 bytes
Redo Buffers                5259264 bytes
ORA-03113: 通信通道的文件结尾
进程 ID: 1340
会话 ID: 191 序列号: 1


SQL> quit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断


C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 13:48:49 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  778387456 bytes
Fixed Size                  1374808 bytes
Variable Size             444597672 bytes
Database Buffers          327155712 bytes
Redo Buffers                5259264 bytes
ORA-03113: 通信通道的文件结尾
进程 ID: 5896
会话 ID: 191 序列号: 1


SQL>
SQL> +
SP2-0042: 未知命令 "+" - 其余行忽略。
SQL> archive log list;
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
SQL> quit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断


C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 14:25:58 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> archive log list;
ORA-01012: not logged on
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  778387456 bytes
Fixed Size                  1374808 bytes
Variable Size             444597672 bytes
Database Buffers          327155712 bytes
Redo Buffers                5259264 bytes
ORA-03113: 通信通道的文件结尾
进程 ID: 3196
会话 ID: 191 序列号: 1


SQL> startup nomount;
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
SQL> quit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断


C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 14:26:54 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup nomount;
ORACLE 例程已经启动。

Total System Global Area  778387456 bytes
Fixed Size                  1374808 bytes
Variable Size             444597672 bytes
Database Buffers          327155712 bytes
Redo Buffers                5259264 bytes
SQL> archive log list;
ORA-01507: ??????
SQL> alter database mount;
alter database mount
*
第 1 行出现错误:
ORA-03113: 通信通道的文件结尾
进程 ID: 4112
会话 ID: 191 序列号: 1


SQL> quit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断


C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 15:27:20 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup nomount;
ORACLE 例程已经启动。

Total System Global Area  778387456 bytes
Fixed Size                  1374808 bytes
Variable Size             444597672 bytes
Database Buffers          327155712 bytes
Redo Buffers                5259264 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "PARSEDB2"NORESETLOGS NOARCHIVELOG
  2  MAXINSTANCES 8
  3  MAXLOGHISTORY 1
  4  MAXLOGFILES 16
  5  MAXLOGMEMBERS 3
  6  MAXDATAFILES 100
  7  Datafile
  8  'F:\Program\Oracle\oradata\PARSEDB2\SYSTEM01.DBF',
  9  'F:\Program\Oracle\oradata\PARSEDB2\SYSAUX01.DBF',
 10  'F:\Program\Oracle\oradata\PARSEDB2\UNDOTBS01.DBF',
 11  'F:\Program\Oracle\oradata\PARSEDB2\USERS01.DBF'
 12  LOGFILE GROUP 1 ('F:\Program\Oracle\oradata\PARSEDB2\redo01.log') SIZE 5120
0K,
 13  GROUP 2 ('F:\Program\Oracle\oradata\PARSEDB2\redo02.log') SIZE 51200K,
 14  GROUP 3 ('F:\Program\Oracle\oradata\PARSEDB2\redo03.log') SIZE 51200K;

控制文件已创建。

SQL> RECOVER DATABASE;
完成介质恢复。
SQL> alter database open;

数据库已更改。

SQL> alter tablespace temp
  2              add tmpfile'F:\Program\Oracle\oradata\PARSEDB2\TEMP01.DBF'
  3              SIZE 200M REUSE AUTOEXTEND ON MAXSIZE 5G;
            add tmpfile'F:\Program\Oracle\oradata\PARSEDB2\TEMP01.DBF'
                *
第 2 行出现错误:
ORA-00905: ???????????????


SQL> alter tablespace temp
  2              add tempfile'F:\Program\Oracle\oradata\PARSEDB2\TEMP01.DBF'
  3              SIZE 200M REUSE AUTOEXTEND ON MAXSIZE 5G;

表空间已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> quit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断


C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 15:36:23 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  778387456 bytes
Fixed Size                  1374808 bytes
Variable Size             444597672 bytes
Database Buffers          327155712 bytes
Redo Buffers                5259264 bytes
数据库装载完毕。
数据库已经打开。
SQL> quit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断


C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 15:37:11 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> conn hdl/123456
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝


警告: 您不再连接到 ORACLE。
SQL> quit

C:\Users\h>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 21 15:37:57 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> alter user hdl identified by 123456;

用户已更改。

SQL> conn hdl/123456
已连接。
SQL>

====================================
ora-03113 controlfile sequence number mismatch 解决

http://www.iyunv.com/thread-15076-1-1.html

http://ljblog.sinaapp.com/?p=309


ora-03113 control file sequence number mismatch

Control file sequence number mismatch
http://blog.csdn.net/marvelyu/article/details/7432417

控制文件序列号不匹配


问题根源

 

Oracle出现错误,于是去错误日志里去找问题根源:在e:\app\kang\diag\rdbms\oracle\oracle\trace\文件夹下找到oracle_ora_6320.trc文件,打开显示错误日志:

 

[plain] view plain copy

  1. Trace filee:\app\kang\diag\rdbms\oracle\oracle\trace\oracle_ora_6320.trc  

  2. Oracle Database 11gEnterprise Edition Release 11.2.0.1.0 - 64bit Production  

  3. With thePartitioning, OLAP, Data Mining and Real Application Testing options  

  4. Windows NT VersionV6.1 Service Pack 1  

  5. CPU                 : 4 - type 8664, 2 PhysicalCores  

  6. Process Affinity    : 0x0x0000000000000000  

  7. Memory (Avail/Total):Ph:2805M/6087M, Ph+PgF:6761M/12173M  

  8. Instance name: oracle  

  9. Redo thread mountedby this instance: 1  

  10. Oracle processnumber: 19  

  11. Windows thread id:6320, p_w_picpath: ORACLE.EXE (SHAD)  

  12.    

  13.    

  14. *** 2014-08-1608:18:55.461  

  15. *** SESSIONID:(191.3) 2014-08-16 08:18:55.461  

  16. *** CLIENT ID:()2014-08-16 08:18:55.461  

  17. *** SERVICE NAME:()2014-08-16 08:18:55.461  

  18. *** MODULENAME:(sqlplus.exe) 2014-08-16 08:18:55.461  

  19. *** ACTION NAME:()2014-08-16 08:18:55.461  

  20.    

  21. ORA-19815: 警告:db_recovery_file_dest_size 字节 (共 4102029312 字节) 已使用 100.00%, 尚有 0 字节可用。  

  22. ************************************************************************  

  23. You have followingchoices to free up space from recovery area:  

  24. 1. Consider changingRMAN RETENTION POLICY. If you are using Data Guard,  

  25.    then consider changing RMAN ARCHIVELOGDELETION POLICY.  

  26. 2. Back up files totertiary device such as tape using RMAN  

  27.    BACKUP RECOVERY AREA command.  

  28. 3. Add disk space andincrease db_recovery_file_dest_size parameter to  

  29.    reflect the new space.  

  30. 4. Delete unnecessaryfiles using RMAN DELETE command. If an operating  

  31.    system command was used to delete files,then use RMAN CROSSCHECK and  

  32.    DELETE EXPIRED commands.  

  33. ************************************************************************  

  34. ORA-19809:超出了恢复文件数的限制  

  35. ORA-19804: 无法回收33961984 字节磁盘空间 (从 4102029312 限制中)  

  36. *** 2014-08-1608:18:55.502 4132 krsh.c  

  37. ARCH: Error 19809Creating archive log file to'E:\APP\KANG\FLASH_RECOVERY_AREA\ORACLE\ARCHIVELOG\2014_08_16\O1_MF_1_159_%U_.ARC'  

  38. *** 2014-08-1608:18:55.502 2747 krsi.c  

  39. krsi_dst_fail: dest:1err:19809 force:0 blast:1  

  40. DDE: Problem Key 'ORA312' was flood controlled (0x1) (no incident)  

  41. ORA-00312: 联机日志 3 线程1: 'E:\APP\KANG\ORADATA\ORACLE\REDO03.LOG'  

  42. ORA-16038: 日志 3sequence# 159 无法归档  

  43. ORA-19809:超出了恢复文件数的限制  

  44. ORA-00312: 联机日志 3 线程1: 'E:\APP\KANG\ORADATA\ORACLE\REDO03.LOG'  

  45.    

  46. *** 2014-08-1608:18:55.565  

  47. USER (ospid: 6320):terminating the instance due to error 16038  



 

 

从这里我们发现了问题的根源:“

ORA-19815: 警告: db_recovery_file_dest_size 字节 (共 4102029312 字节) 已使用100.00%, 尚有 0 字节可用。db_recovery_file_dest_size也叫归档日志空间不足导致的,既然找到问题的根源,那解决起来也就容易了。

 

解决途径

 

空间小,那摆在我们面前办法就是,一个是将空间设置大点,另一个就是将多余的文件删除掉即可,那么我们就将这两个办法都使用一下。

 

通过命令窗口:

--------设置归档日志空间的大小

[sql] view plain copy

  1. sqlplus / as sysdba  

  2. shutdown abort     ----关闭进程  

  3. startup mount       ---- 装载数据库  

  4. select * from v$recovery_file_dest; ---查询归档日志  

  5. db_recovery_file_dest_size=10737418240; --设置归档日志空间为10G  

  6. Exit ---到这里空间大小已经设置完成  



 

--------删除归档日志

[sql] view plain copy

  1. rmantarget /   -----进入rman工具窗口  

  2. RMAN>crosscheck archivelog all;  --运行这个命令可以把无效的expired的archivelog标出来。  

  3. RMAN>delete noprompt archivelog until time "sysdate -3";  -- -即删除3天前的归档日志 



到这里就彻底ok了。接下来重新打开数据库:正常使用

 

在删除归档文件中有一点要注意,通过命令窗口显示显示归档文件都在E:\app\kang\flash_recovery_area\oracle\ARCHIVELOG 下,但是我们不能手工在操作系统中直接把这些文件删除掉,这是因为在controlfile中记录着每一个archivelog的相关信息,当我们在OS中删除这些文件后,我们的controlfile中仍然记录着这些archivelog的信息,因此在Oracle的OEM管理器中还会存在这些日志。因为当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,也就是oracle并不知道这些文件已经不存在了。所以还是要通过命令窗口去执行删除这些文件的命令。

 

后记

 

归档日志其实是为了方便我们在恢复数据库时使用的,但是有时候这些归档日志有时确实会给我们带来一点点的小麻烦,所以这些归档日志还是需要我们去注意的。