app教程网 综合百科 ora-01034 oracle不可用(oracleora12560报错的解决办法)

ora-01034 oracle不可用(oracleora12560报错的解决办法)

前天,有用户突然反映,某个软件老是报ora-00603错误。起初只是表空间不足之类的普通问题,但是当我查看日志时,发现事情并没有那么简单。

部分日志拦截如下:

Thu Nov 05 15:28:53 2009文件d:\oracle\admin\orcl\udump\orcl_ora_4684.trc:ORA-00603: ORACLE 服务器会话因致命错误而终止ORA-01114: IO 错误将块写入文件11(块# 42773)OR A-27041: 无法打开fileOSD -04002: 无法打开文件O/S-Error: (OS 32) 该文件正在被另一个程序使用,进程无法访问它。 ORA-01114: IO 错误将块写入文件11(块# 42773)ORA-27041: 无法打开文件OSD-04002: 无法打开文件O/S-Error: (OS 32) 该文件正在被另一个程序使用,进程无法访问它。 ORA-01114: IO 错误将块写入文件11(块# 42773)ORA-27041: 无法打开文件OSD-04002: 无法打开文件O/S-Error: (OS 32) 该文件正在被另一个程序使用,进程无法访问它。

里面的文件11是我的程序使用的表空间中的一个数据文件。表空间总共有4个数据文件,加起来大约8G,整体使用率在70%左右。数据文件编号分别为9、11、13 和14。问题的文件号不一定一定,时间也是随机的。上面的日志可能会在一分钟内重复,也可能会在几秒钟内重复。

以下是orcl_ora_4684.trc 文件的片段:

JServer 版本9.2.0.1.0 - ProductionWindows 2000 Version 5.2 Service Pack 2,CPU 类型586实例名称: orcl

本实例挂载的重做线程: 1

Oracle进程号: 30

Windows线程id: 4684,image: ORACLE.EXE

*** 会话ID:(39.280) 2009-11-05 15:28:52.000*** 2009-11-05 15:28:52.000ksedmp: 内部或致命错误ORA-01114: IO 错误(块号42773)ORA -27041: 无法打开文件OSD-04002: 无法打开文件O/S-Error: (OS 32) 此文件正被另一个程序使用,进程无法访问它。 ORA-01114: 将块写入文件11 时出现IO 错误(块# 42773) ORA-27041: 无法打开文件OSD-04002: 无法打开文件O/S-Error: (OS 32) 该文件正被另一个程序使用,进程无法访问它。 ORA-01114: 将块写入文件11 时出现IO 错误(块# 42773) ORA-27041: 无法打开文件OSD-04002: 无法打开文件O/S-Error: (OS 32) 该文件正被另一个程序使用,进程无法访问它。此会话的当前SQL 语句:INSERT INTO 'VIO_JDCZP' ('XH','HPHM','HPZL','PHOTO1') VALUES (:1,2,3,4) RETURNING ROWID into :5----- 调用堆栈跟踪- ----调用十六进制类型点中的调用入口参数值(?表示可疑值)-------------------- -------- - -------------------------------------------------- _ksedmp+147 CALLrel _ksedst +0.1.44_7. except.114 CALLrel _ksedmp+0 3+fc.1.1_3. except.34+a CALLrel _ksupop+0 2f_ttcpip+a86 CALLreg 00000000 5E 14 8ACE738 0_opitsk+2f4 CALLrel _t tcpip+ 0_opiino+5fc 调用rel_opitsk +0 0 0 A616320 6D1F564 C2 0_opiodr+4cd CALLreg 00000000 3C 4 8ACFBD8_opidrv+233 CALLrel _opidr+0 3C 4 8ACFBD8 0_sou2o+19 CALLrel _opidrv+0 _opimai+10a CALLrel _sou2o +0_OracleThreadStart@ CALLrel _opimai+04+35c7C824826 CALLreg 00000000 从这个日志看,这句话“Current SQL statements for this session:INSERT INTO 'VIO_JDCZP' ('XH','HPHM','HPZL','PHOTO1') VALUES (:1,2,3,4) RETURNING ROWID into :5 ” 解释了执行语句“INSERT INTO 'VIO_JDCZP' ('XH','HPHM','HPZL','PHOTO1') VALUES (:1,2,3,4) RETURNING ROWID into :5”时出现的问题,这就是有些错误是什么样的。这句话将一张图片写入数据库。

该软件采用CS结构,共有8个客户端。 8个客户端每3秒输入一条数据。数据包括一些文本信息和图片。图片大小从80KB到200KB不等。图像直接存储到数据库中。

现在单个用户登录没有问题,但是八个用户一起登录很快就会出现这个问题。我检查了Oracle的参数,发现没有对用户或会话数的限制。

现在我只是觉得奇怪。 ORACLE是一个大型数据库,不可能出现并发访问之类的问题。从日志简单分析可以看出,当一个用户的数据写入未完成时,另一个用户正在写入数据,则数据文件被占用。经过在程序中测试,使用事务和不使用事务的结果是一样的。基本上我们就可以排除事务锁文件的原因了。

两种解决方案: 1、升级数据库到9.2.0.1以上版本。不一定非要10G之类的。升级到9.2.0.3 或更高版本。当然是越高越好。 2 图片不写入数据库,而是保存为文件什么的。

老外的问题解决方案:解决方案是(正如这个线程上提出的):alter system set events '10046 trace name context off';alter system set timed_statistics=false;执行这两个脚本后,问题确实解决了。注:timed_staticstices用于启用或禁用定时统计信息(如CUP时间、占用时间)以及动态性能表中各种统计信息的收集。

ORA-00603错误解决过程

今天查看作业运行状态时,发现有一个数据同步作业执行时间较长,但没有任何异常记录。手动执行后,出现ORA-00603错误。解决过程如下: 1. 插入操作报ORA-00603错误。网上一查说是temp空间不够,但是用户实际使用的临时表空间并不是系统的temp空间,而是自定义的。

本文来自网络,不代表本站立场,转载请注明出处:https: