cxytz01 发表于 2013-01-08 12:48

oracle bug,ORA-24550?

本帖最后由 cxytz01 于 2013-01-08 16:48 编辑

有一多线程程序:

线程一: 使用oci(oracle call interface)从oracle取一个sequence,取完之后关闭session,然后connect A server端,组成报文丢给A 的server端; ---成功,链接显示ESTABLISHED

线程二: 监听38889端口,等待A client端链接。A 的client链接之后,立马被断开(我的程序没有close(fd),而是accept之后直接recv(fd,..... MSG_WAITALL)),因为对方被断开,所以recv(fd为默认属性,没有被设置成非阻塞)立即返回0,errno:successed。同样,对方使用telnet链接我的38889端口,立即显示connect refused。

分别2次使用命令netstat -an |grep 38889显示:

proto   Local Address             Foreign Address         State
tcp      127.0.0.1:38889       0.0.0.0:*                      LISTEN
tcp      127.0.0.1:38889       56.16.71.37:端口号      FIN_WAIT_1

------------中间应该有FIN_WAIT_2状态,来不及截取-------------

proto   Local Address             Foreign Address         State
tcp      127.0.0.1:38889       0.0.0.0:*                      LISTEN
tcp      127.0.0.1:38889       56.16.71.37:端口号      TIME_WAIT

根据tcp状态转换图,得知线程二的链路肯定是被close()了。


-------------------------------------------------------------------------------------------------------------
上面问题无解,曾以为是A 端的程序问题,但由于是另外一个机构,不好确定。所以更改服务器的代码的线程二,为循环accept(原来只允许accept一次,不方便测试),然后pthread_create()。通过本机使用telnet到服务器的线程二,立马出现下图:


ora-24550: signal received:        ---segment fault!

可以肯定的是,我的程序不会出现segment fault情况。 之前在本机测试n遍,模拟的A 服务端程序连接我的线程二,一切正常。

经上网查询ora-24550的情况,没有满意的,但大概知道好像是oracle 的 bug?

为了验证,我程序的正确性,把调用oci的函数给去掉了,然后程序一切正常~~~~~~~~~~~~~~~~~(注意,原线程一使用完oci函数后立即关闭session,释放所有数据库相关资源,再也不会去和oracle打交道了。线程二根本就不会去碰oracle)。

此问题何解,大侠们帮帮忙啊?


附上,2篇老外的回答:
http://www.dba-oracle.com/t_ora_24550_unhandled_signal.htm
https://scn.sap.com/thread/2071168
页: [1]
查看完整版本: oracle bug,ORA-24550?