前天用户突然反映某软件总是报错ora-00603。起初,bit是常见的表空间不足之类的问题,但是看一下日志就知道没那么简单。
一些截获的日志如下:
2009年11月5日星期四15时28分53秒
文件d:\ Oracle \ admin \ orcl \ udump \ orcl _ ora _ 4684 . TRC中的错误:
ORA-00603: ORACLE服务器会话因致命错误而终止
ORA-01114:将块写入文件11时出现IO错误(块# 42773)
ORA-27041:无法打开文件
OSD-04002:无法打开文件
错误:(OS 32)另一个程序正在使用这个文件,进程不能访问它。
ORA-01114:将块写入文件11时出现IO错误(块# 42773)
ORA-27041:无法打开文件
OSD-04002:无法打开文件
错误:(OS 32)另一个程序正在使用这个文件,进程不能访问它。
ORA-01114:将块写入文件11时出现IO错误(块# 42773)
ORA-27041:无法打开文件
OSD-04002:无法打开文件
错误:(OS 32)另一个程序正在使用这个文件,进程不能访问它。
其中的文件11是我的程序使用的表空间的数据文件。表中有四个数据文件,加起来大概8G,整体利用率大概70%。数据文件编号分别为9、11、13和14。问题的档案号不一定,时间是随机的。一分钟重复以上日志是可能的,几秒钟重复一次也是可能的。
以下是orcl_ora_4684.trc文件的片段:
JServer版本9.2.0.1.0 -生产
Windows 2000版本5.2服务包2,CPU类型586
实例名:orcl
此实例装入的重做线程:1
Oracle流程编号:30
Windows线程id: 4684,映像:ORACLE。可执行程序的扩展名
***会话ID:(39.280)2009-11-05 15:28:52.000
*** 2009-11-05 15:28:52.000
ksedmp:内部或致命错误
ORA-01114:将块写入文件11时出现IO错误(块# 42773)
ORA-27041:无法打开文件。
OSD-04002:无法打开文件
错误:(OS 32)另一个程序正在使用这个文件,进程不能访问它。
ORA-01114:将块写入文件11时出现IO错误(块# 42773)
ORA-27041:无法打开文件。
OSD-04002:无法打开文件
错误:(OS 32)另一个程序正在使用这个文件,进程不能访问它。
ORA-01114:将块写入文件11时出现IO错误(块# 42773)
ORA-27041:无法打开文件。
OSD-04002:无法打开文件
错误:(OS 32)另一个程序正在使用这个文件,进程不能访问它。
此会话的当前SQL语句:
INSERT INTO 'VIO_JDCZP' ('XH '' HPHM '' HPZL '' PHOTO1 ')值(:1,2,3,4)将ROWID返回到:5
-调用堆栈跟踪-
以十六进制调用入口参数值
位置类型点(?意味着可疑的价值)
- - - -
_ ksedmp 147 CALLrel _ ksedst 0
.1.44 _ 7 . except . 114 CALLrel _ ksed MP 0 3
足球俱乐部(Football Club)
.1.1 _ 3 . except . 34 a CALLrel _ ksupop 0 2
f
_ TTC pip a86 call reg 00000000 5E 14 8 ace 738 0
_opitsk 2f4 CALLrel _ttcpip 0
_ opi ino 5fc call rel _ opit sk 0 0 a 616320 6d1f 564 C2 0
_ opi ODR 4cd call reg 0000000 3C 4 8 ACF BD 8
_ opi drv 233 call rel _ opi ODR 0 3C 4 8 ACF BD 8 0
_sou2o 19 CALLrel _opidrv 0
_opimai 10a CALLrel _sou2o 0
_ Oracle threadstart @ call rel _ opi mai 0
4 35c
7C824826呼叫注册0000000
根据该日志,“此会话的当前SQL语句:
Insert' VIO _ JDCZP' ('XH '' HPHM '' HPZL ''照片1 ')值(:1,2,3,4)将rowid返回到:5)表示“insert into' VIO _ JDCZP '被执行。”HPZL ","照片1 ")值(:1,2,3,4)将rowid返回成:5 "是个问题,所有错误都一样。将图片写入数据库。
该软件是CS结构的,共有八个客户端。八个客户端每3秒输入一条数据。数据包括一些文字信息,还有一张图片,大小从80KB到200KB不等。图片直接存储在数据库中。
现在单个用户进入不会有问题,八个用户一起进入很快就会出现这个问题。检查oracle的参数后,用户和会话的数量没有限制。
现在很奇怪ORACLE是一个大型数据库,不可能出现类似并发访问这种问题。从日志简单分析,是一个用户的数据没有被另一个用户写入时,数据文件被占用造成的。程序经过测试,使用transaction和不使用transaction的结果是一样的,基本可以排除transaction锁文件的原因。
两种解决方案:
1要将数据库升级到9.2.0.1或更高版本,您不必使用10G或类似的东西。升级到9.2.0.3或者更高,当然越高越好。
2图片不写入数据库,保存为文件之类的。
外国人解决问题的方法:
解决方案是(如本主题所述):
alter system set事件“10046 trace name context off”;
alter system set timed _ statistics=false;
执行完这两个脚本后,问题就解决了。
注意:
Timed _ staticstices用于启用或禁用定时统计数据(如杯时间和占用时间)以及动态性能表中各种统计数据的收集。
ORA-00603错误解决过程
今天查看作业运行状态时,发现一个数据同步的作业已经运行了很长时间,但是没有异常记录。手动执行后出现错误ORA-00603,解决过程如下:
1.insert操作报告ORA-00603错误,网上搜索说临时空间不够,但是实际用户使用的临时表空间并不是系统的临时空间,而是自定义的。