`

ORA-03113: end-of-file on communication channel 错误定位过程(转)

阅读更多

今天数据库不能启动了,报ORA-03113: end-of-file on communication channel的错误,经过网上搜索相关信息如下:

 

手动关闭Oracle之后打算再次启动Oracle:

$sqlplus ‘/as sysdba’

SQL> startup

ORA-03113: end-of-file on communication channel

结果便出现了以上错误。


通过上网查询出错原因,常见的原因有以下几个:

1、Unix核心参数设置不当

2、Oracle执行文件权限不正确/环境变量问题

3、客户端通信不能正确处理

4、数据库服务器崩溃/操作系统崩溃/进程被kill

5、Oracle 内部错误

6、特定SQL、PL/SQL引起的错误

7、空间不够

8、防火墙的问题


因为oracle已经正常运行了一个月,因此unix参数不对、权限环境变量、防火墙这些在首次启动就会发现的问题不应该现在才出现;而对于客户端通信、特定的SQL引起的错误,因为在启动过程中就已经报错,所以也排除。

由此判断,数据库服务崩溃/系统崩溃/进程被kill、Oracle内部错误、空间不够可能是原凶。


首先从最容易查起的原因开始,查询磁盘空间,结果磁盘空间利用不到30%,剩余空间足够;


于是检查Oracle内部错误:

$cd $ORACLE_HOME/admin/SID/cdump

发现大量的core,看来原因找到了。但所有的core目录都是空的,没有任何文件。

使用ulimit –a查看,原因core的文件大小为0,这是什么原因导致的core呢?


现在原因不明,于是检查bdump目录下的日志。

$cd $ORACLE_HOME/admin/SID/bdump

$cat alert_SID.log

发现日志量很大,满屏的都是同一个错误,扩展表空间失败:

ORA-1654: unable to extend index SID.INDEX by 128 in tablespace TABLESPACE

ORA-1653: unable to extend table SID.TABLE by 1024 in tablespace TABLESPACE

看来表空间已经满了并且无法扩展导致oracle出现core的。


$cd $ORACLE_BASE/oradada/SID

$ls –lh

-rw-r----- 1 oracle oinstall 2.1G Oct 14 15:10 SID_DATA01.DBF

-rw-r----- 1 oracle oinstall 201M Oct 14 12:28 SID_INDEX01.DBF

原来是空间已经达到2G,但应该触发扩展才对。


安装数据库时并没有限制SID_DATA01.DBF文件大小。

查看创建表空间的脚本,发现在脚本中对该文件有限制。脚本如下:

CREATE TABLESPACE SID_DATA DATAFILE

‘/data/oracle/oradata/SID/SID_DATA01.DBF' SIZE 200M AUTOEXTEND ON NEXT 200M MAXSIZE 2048M’

MAXSIZE UNLIMITED

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT MANUAL;

原来是在创建表空间时人为限制了表空间大小最大为2G,这是优化导致的问题,今后在新建数据库时都要记住,数据库要根据用户的使用场景来变更表空间。

很多程序只支持2G大小的文件,所以才定为2G,以避免此类问题,虽然使用的是ext3的文件系统,为了方便解决问题才定为2G。但数据库文件为2.1G,难道是文件太大导致的不能启动?

似乎问题找到了,只需要修改表空间即可解决问题。

但要修改表空间,首先要启动数据库,才能够修改表空间的参数,问题又绕回来了,数据库启不动。


于是再次在网上搜索资料,表空间满导致数据库启动不了的,还没有人遇见这样的问题,看来我们碰到的问题并不是前面所列出的八种原因,而是一种特殊原因。

尝试过多种启动方式:

Startup   直接启动

Startup mount   加载数据库

Startup unmount   不加载数据库

Startup force    强行启动

全是报同一个错误提示:ORA-03113: end-of-file on communication channel

经过几个小时,总结了一下,表空间满应用程序不停向数据库写数据,oracle出现异常,之后无法启动。但要解决数据库空间问题必须先启动。


于是在网上查询是否有办法在不启动数据库的情况下修改表空间,但找了很久没有此类方法。

难道真的要用删除数据库的方法才能够解决?

细心的人可能发现了我们问题解决过程,startup mount 和startup unmount执行结果都是相同的。或许是启动过程中碰到了什么问题导致无法启动,难道和数据库的文件大小根本没关系?是不是oracle启动时还需要其它文件,而这些文件也增大了?

于是使用find命令查询大于2G文件

$cd $ORACLE_BASE

$find . -size +2097160192c

./product/9.2.0.4/admin/SID/bdump/alert_SID.log

./oradata/SID/SID_DATA01.DBF

真的还有一个,清空该日志文件,启动….成功,再次修改oracle的表空间属性,日志中错误消失。


总结

1、经查询资料,了解到Oracle对自身日志文件有一个限制就是每个日志文件不能大于2G,大于2G以后会出现各种问题。且同样对日志文件有这样限制的软件还有不少,如Squid,RoseHA等。因此以后我们在今后要实际生产环境中部署的时候,一定要针对这一特点手工对Oracle做自动日志切割和清理。

2、千万不要删除oracle的数据库文件,即使备份后恢复数据也会丢掉,因为Oracle的数据文件是与磁盘物理位置有关联的,不像mysql那样。
 

一次 ORA-03113: end-of-file on communication channel 错误定位过程
2010-01-30 01:44
手动关闭Oracle之后打算再次启动Oracle:

$sqlplus ‘/as sysdba’

SQL> startup

ORA-03113: end-of-file on communication channel

结果便出现了以上错误。


通过上网查询出错原因,常见的原因有以下几个:

1、Unix核心参数设置不当

2、Oracle执行文件权限不正确/环境变量问题

3、客户端通信不能正确处理

4、数据库服务器崩溃/操作系统崩溃/进程被kill

5、Oracle 内部错误

6、特定SQL、PL/SQL引起的错误

7、空间不够

8、防火墙的问题


因为oracle已经正常运行了一个月,因此unix参数不对、权限环境变量、防火墙这些在首次启动就会发现的问题不应该现在才出现;而对于客户端通信、特定的SQL引起的错误,因为在启动过程中就已经报错,所以也排除。

由此判断,数据库服务崩溃/系统崩溃/进程被kill、Oracle内部错误、空间不够可能是原凶。


首先从最容易查起的原因开始,查询磁盘空间,结果磁盘空间利用不到30%,剩余空间足够;


于是检查Oracle内部错误:

$cd $ORACLE_HOME/admin/SID/cdump

发现大量的core,看来原因找到了。但所有的core目录都是空的,没有任何文件。

使用ulimit –a查看,原因core的文件大小为0,这是什么原因导致的core呢?


现在原因不明,于是检查bdump目录下的日志。

$cd $ORACLE_HOME/admin/SID/bdump

$cat alert_SID.log

发现日志量很大,满屏的都是同一个错误,扩展表空间失败:

ORA-1654: unable to extend index SID.INDEX by 128 in tablespace TABLESPACE

ORA-1653: unable to extend table SID.TABLE by 1024 in tablespace TABLESPACE

看来表空间已经满了并且无法扩展导致oracle出现core的。


$cd $ORACLE_BASE/oradada/SID

$ls –lh

-rw-r----- 1 oracle oinstall 2.1G Oct 14 15:10 SID_DATA01.DBF

-rw-r----- 1 oracle oinstall 201M Oct 14 12:28 SID_INDEX01.DBF

原来是空间已经达到2G,但应该触发扩展才对。


安装数据库时并没有限制SID_DATA01.DBF文件大小。

查看创建表空间的脚本,发现在脚本中对该文件有限制。脚本如下:

CREATE TABLESPACE SID_DATA DATAFILE

‘/data/oracle/oradata/SID/SID_DATA01.DBF' SIZE 200M AUTOEXTEND ON NEXT 200M MAXSIZE 2048M’

MAXSIZE UNLIMITED

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT MANUAL;

原来是在创建表空间时人为限制了表空间大小最大为2G,这是优化导致的问题,今后在新建数据库时都要记住,数据库要根据用户的使用场景来变更表空间。

很多程序只支持2G大小的文件,所以才定为2G,以避免此类问题,虽然使用的是ext3的文件系统,为了方便解决问题才定为2G。但数据库文件为2.1G,难道是文件太大导致的不能启动?

似乎问题找到了,只需要修改表空间即可解决问题。

但要修改表空间,首先要启动数据库,才能够修改表空间的参数,问题又绕回来了,数据库启不动。


于是再次在网上搜索资料,表空间满导致数据库启动不了的,还没有人遇见这样的问题,看来我们碰到的问题并不是前面所列出的八种原因,而是一种特殊原因。

尝试过多种启动方式:

Startup   直接启动

Startup mount   加载数据库

Startup unmount   不加载数据库

Startup force    强行启动

全是报同一个错误提示:ORA-03113: end-of-file on communication channel

经过几个小时,总结了一下,表空间满应用程序不停向数据库写数据,oracle出现异常,之后无法启动。但要解决数据库空间问题必须先启动。


于是在网上查询是否有办法在不启动数据库的情况下修改表空间,但找了很久没有此类方法。

难道真的要用删除数据库的方法才能够解决?

细心的人可能发现了我们问题解决过程,startup mount 和startup unmount执行结果都是相同的。或许是启动过程中碰到了什么问题导致无法启动,难道和数据库的文件大小根本没关系?是不是oracle启动时还需要其它文件,而这些文件也增大了?

于是使用find命令查询大于2G文件

$cd $ORACLE_BASE

$find . -size +2097160192c

./product/9.2.0.4/admin/SID/bdump/alert_SID.log

./oradata/SID/SID_DATA01.DBF

真的还有一个,清空该日志文件,启动….成功,再次修改oracle的表空间属性,日志中错误消失。


总结

1、经查询资料,了解到Oracle对自身日志文件有一个限制就是每个日志文件不能大于2G,大于2G以后会出现各种问题。且同样对日志文件有这样限制的软件还有不少,如Squid,RoseHA等。因此以后我们在今后要实际生产环境中部署的时候,一定要针对这一特点手工对Oracle做自动日志切割和清理。

2、千万不要删除oracle的数据库文件,即使备份后恢复数据也会丢掉,因为Oracle的数据文件是与磁盘物理位置有关联的,不像mysql那样。

 

 

 

 

原文:http://hi.baidu.com/lanbo0829/blog/item/d67b8ac14b35815eb319a83b.html

 

 

 

PS:看过上文后,我确定了我遇见的问题的原因极大可能是由于空间不足导致的,于是进行了文件排查,最后确定了几个位置:

 

    1、${oracle}/admin/bdump/  此目录下的文件数量很可能占了很大空间,如无特殊需要可以删除

    2、${oracle}/oradata/   此目录下有相关实例的控制文件,同时里面应该有一文件为undotbs01.dbf的文件,这个是回退文件,为了解决空间不足的问题,对这个文件可以进行操作,具体操作方法见:《UNDOTBS01.DBF太大(16.7G)引起的ORA-01033(转)》地址:http://chevy.iteye.com/admin/blogs/1096236

经过如上的操作后,数据库实例无法启动的问题得到了解决。目前没有发现有不良状况。

 

 

 

 

分享到:
评论

相关推荐

    oracle ORA-03113 "end_of_file on communication channel"

    ORA-03113 "end_of_file on communication channel" ORA-03113 "end_of_file on communication channel" ORA-03113 "end_of_file on communication channel

    ora-01033:oracle initialization or shutdown in progress 解决方法

    ### ora-01033: Oracle Initialization or Shutdown in Progress 解决方法 #### 一、问题背景及原因 **标题**: “ora-01033: Oracle initialization or shutdown in progress 解决方法” **描述**: “ora-01033: ...

    如何处理错误ORA-29275:部分多字节字符

    ### 如何处理错误ORA-29275:部分多字节字符 #### 问题背景与描述 在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$...

    ORA-04052p5731178_92080_WINNT.zip

    ORA-00604: 递归SQL层1出现错误 ORA-03106: 致命的双工通信协议错误 ORA-02063: 紧接着line(源于dblink) 以及 ORA-04052: 在查找远程对象时出错 ORA-00604: 递归SQL层1出现错误 ORA-03120: 双工转换例行程序:整数...

    ORA-32001:请求写入spfile,但没有使用spfile的解决方法

    ORA-32001:write to spfile requested but no spfile is in use请求写入spfile,但没有使用spfile的解决方法 在输入以下语句中报了这样的错误: SQL>alter system set control_files=’/u01/app/oracle/oradata/prod/...

    Oracle 授权 ORA-00990: 权限缺失或无效

    在Oracle数据库管理中,"ORA-00990: 权限缺失或无效"是一个常见的错误代码,它表示用户尝试执行的操作没有足够的权限。这个错误通常发生在试图访问、修改或者管理数据库对象(如表、视图、索引等)时。在本篇文章中...

    ORA-12154: TNS: 无法解析指定的连接标识符的解决方法

    ORA-12154: TNS: 无法解析指定的连接标识符的解决方法

    oracle ora-03113错误

    ORA-03113 是一个较为常见的Oracle错误,通常出现在网络通信出现问题时,具体表现为“end-of-file on communication channel”(通信通道上的文件结束)。此错误可能由多种因素引发,包括但不限于Unix核心参数设置...

    oracle特有的错误:ORA-01036:非法的变量名/编号

    在Oracle数据库系统中,"ORA-01036:非法的变量名/编号"是一个常见的错误,通常出现在PL/SQL代码或者SQL查询语句中,当你尝试使用一个不正确或者未定义的变量时,Oracle数据库会抛出这个错误。这个错误可能是由于...

    oracle报错大全(珍藏版)

    #### ORA-00029: No Lock on Object 当尝试操作一个没有锁的对象时触发。这可能是因为锁不存在或已被其他用户释放。 #### ORA-00030: Lock ID Not Found 指定的锁ID未找到时触发。这可能是由于锁ID无效或已被删除。...

    ORA-00904: "WM_CONCAT": 标识符无效

    在Oracle数据库中,"ORA-00904"是一个常见的错误代码,它表示尝试引用一个不存在或无效的标识符。在这个场景下,错误信息提到的是"WM_CONCAT"函数,这表明在Oracle 19c数据库环境中,用户尝试使用WM_CONCAT函数,但...

    oracle 回闪日志 满了 ORA-03113 通信信道结束 进入 rman 删除日志

    在Oracle数据库管理过程中,经常遇到的一些问题包括回闪日志空间不足以及ORA-03113错误等。这些问题若不及时解决,可能会导致数据库性能下降甚至停机。下面我们将详细探讨这些现象的原因及解决方法。 #### Oracle回...

    oracle12c ORA-01017: 用户名/口令无效; 登录被拒绝 解决方案

    oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。

    ORA-00060: 等待资源时检测到死锁--oracle 数据库表死锁异常

    在Oracle数据库系统中,"ORA-00060: 等待资源时检测到死锁" 是一个常见的错误提示,它表明两个或多个事务在执行过程中陷入了无法继续进行的状态,因为彼此都在等待对方释放资源。这种情况通常发生在并发操作中,比如...

    CLOB 字段类型报错 ORA-01704: 文字字符串过长的解决

    然而,当你尝试向CLOB字段插入数据时,如果超过了Oracle规定的最大限制,就会遇到“ORA-01704: 文字字符串过长”的错误。这个错误通常意味着你试图插入的字符串超过了Oracle数据库允许的最大长度,对于VARCHAR2类型...

    Oracle错误码大全

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程;无法转换...

    Oracle 回收站功能,彻底删除表ORA-00933:SQL command not properly ended

    ### Oracle回收站功能详解与彻底删除表方法 #### 一、Oracle回收站功能概述 Oracle数据库自10g版本开始引入了回收站功能...同时,需要注意避免因SQL语句编写不当而导致的ORA-00933错误,以确保操作的顺利进行。

    ORA-00031:标记要终止的会话

    在处理Oracle数据库时,我们经常遇到错误代码ORA-00031,它表明指定的会话已经被标记为终止。这个错误通常与数据库锁定和会话管理有关。本文将详细解析这一问题的解决方案,并提供一系列SQL语句和命令来处理和解决...

    WMSYS.zip解决ORA-00904:

    -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... ...

Global site tag (gtag.js) - Google Analytics