免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3595 | 回复: 9
打印 上一主题 下一主题

好奇怪的问题,这是Oracle的一个BUG吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-26 23:24 |只看该作者 |倒序浏览
10可用积分
最近我的程序从ORACLE9.2移置到10.2,发现程序很怪。不知道是不是ORACLE10.2的一个BUG。

我的程序是在AIX5.3上开发的。程序逻辑大概如下:
程序A用system()函数调用一个SHELL程序B.sh,其中B.sh有一个逻辑如下:
programC
if [ $? -ne 0 ]; then
   ......
   exit
fi

在B.sh中调用了一个业务处理程序programC,然后检查programC的处理结果,如果programC返回失败则进行失败处理。

现在的现象就是如果程序A在调用B.sh前有数据库操作,则在B.sh中,不管programC返回是否成功,if判断总是显示$?为0;
如果程序A在调用B.sh前没有数据库操作,则B.sh没问题。同时,单独运行B.sh显示没有问题。

其中programC有数据库操作,在业务逻辑处理失败时exit(1),成功时exit(0)。

这个程序在Oracle9.2下是没有任何问题的,但在Oracle10.2下就有问题了。请各位高手指教,谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-08-27 09:20 |只看该作者
不懂,等待版主解决

论坛徽章:
0
3 [报告]
发表于 2008-08-27 10:16 |只看该作者
有没有跟踪programC的处理情况

论坛徽章:
0
4 [报告]
发表于 2008-08-27 22:25 |只看该作者
programC很简单的,没什么复杂处理。

论坛徽章:
0
5 [报告]
发表于 2008-08-27 22:29 |只看该作者
结合上次的execlp调用imp的问题和本问题来看,个人觉得应该是10.2在进程处理上有问题。也就是父进程没法获得子进程的结束状态,即子进程运行完毕就完全消失了,父进程没法监控到子进程。

论坛徽章:
0
6 [报告]
发表于 2008-08-28 08:53 |只看该作者
仅从LZ提供的信息,还不足以证明是ORACLE升级导致问题的产生。
如果在程序方面没有做过修改的话,更应该考虑其他方面的问题,除非有更直接的证据指向Oracle

3个程序都应该做调试,多加一些调试信息。即便programC很简单,但也不说明就不会出问题。
我们不需要猜想,需要线索和证据

[ 本帖最后由 doni 于 2008-8-28 08:57 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-08-28 23:46 |只看该作者
哪位老大可以在自己的机器上试试啊,真的不知道怎么解决了

论坛徽章:
0
8 [报告]
发表于 2008-08-29 03:23 |只看该作者
原帖由 Mubai 于 2008-8-26 23:24 发表
最近我的程序从ORACLE9.2移置到10.2,发现程序很怪。不知道是不是ORACLE10.2的一个BUG。

我的程序是在AIX5.3上开发的。程序逻辑大概如下:
程序A用system()函数调用一个SHELL程序B.sh,其中B.sh有一个逻辑如 ...


我想,不要怀疑oracle

这里给你提个醒
shell的$?查看到的是exit (n) 中n的低8位的值; 或者是128+信号数。
在整数低8位的限制下,意味着你exit (256)或者exit (-256)在外边看起来都是0。
仔细查你进程的退出值吧。这个和oracle可没有关系

论坛徽章:
0
9 [报告]
发表于 2008-08-29 03:24 |只看该作者
原帖由 Mubai 于 2008-8-27 22:25 发表
programC很简单的,没什么复杂处理。


贴出你的程序来,我想这个问题应该不会很难解决的

论坛徽章:
0
10 [报告]
发表于 2008-09-01 21:43 |只看该作者
终于收到ORACLE的一个回信了。贴出来大家分享分享,明天去公司验证一下。大家有什么研究成功,可要贴出来共享啊。呵呵

Article-ID: Note 556440.1
Topic: Miscellaneous Title: System() Always Returns 0 When Done After An IPC Connection. Works Fine With TNS

Applies to:
Precompilers - Version: 10.2.0.3
This problem can occur on any platform.

Symptoms
Customer's Pro*C application calls a script with a system() call after connecting to Oracle and acts on the return value.  In 9.2 this worked fine.  Since upgrading to 10.2 this no longer works, if the bequeath adapter is used.

This problem occurred on Platform 212 AIX5L Based Systems (64-bit).  Other platforms have not been tested, and behaviour may differ from platform to platform.

Cause
This is caused by a redesign in the Oracle software to streamline signal handling.

Solution
There are three possible solutions to this issue:

1. Use TWO_TASK instead of Bequeath
2. Set bequeath_detach=yes in sqlnet.ora
3. define a signal handler.  In this case, the existence of a signal handler is detected by Oracle and bequeath_detach=yes is implied.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP