专栏首页bisal的个人杂货铺Oracle服务端和客户端版本补丁不一致造成Tuxedo应用程序出core案例

Oracle服务端和客户端版本补丁不一致造成Tuxedo应用程序出core案例

这是一个CU**系统调用的查询天气预报的Tuxedo服务,Oracle Pro*C程序,连接的是Oracle 10.2.0.4库,出现问题的现象是不定时的产生core,服务down,触发Tuxedo服务的自动重启机制,但一般MAXGEN配置是100,即1天内若重启100次后服务就不会自动重启了,只能人工干预,每次重启后会好一阵,且该服务已经由被同步调用改为异步调用,因此实际业务上影响不大,只是几乎每天都会有自动重启的报警。

查看产生的core文件,如下是其堆栈信息,

根据提示的应用程序行,找到应用生成的中间.c文件,

这是其中一个core,对应于select sysdate into:sysdate from sys.dual;这条SQL语句,再查看其他core,还有针对于其他一些SQL语句的情况,很随机,单独执行这些SQL均正常。

查下MOS,发现有一篇文章和这很像,Core dump - Access Violation in Client Applications After Upgrade to 9.2.0.8, 10.1.0.5 , 10.2.0.x 11.1 and the client or server is still a prior version (文档 ID 455832.1)。描述信息是:

Existing applications (and new applications) encounter a core dump after a database or client-side patch up to versions 9.2.0.8, 10.1.0.5 or 10.2 is applied. This is because these versions contain a patch for Bug 3396162(not a published bug), a patch which must be applied to both client and server for it to be effective, and when mismatched to a client or server that does not contain the patch, causes a core dump/ Access Violation.

强调如果数据库端或客户端打了patch到9.2.0.8,10.1.0.5或10.2版本,才会碰见这种core。原因是这些版本包含了bug3396162的patch,这个patch需要在客户端和服务端同时应用,一旦出现两端只有一边打了patch,就会可能产生core。

而且有一段说明,这个问题的错误栈并不是每次都会碰见,再次强调只要客户端或服务端只有一边打了这个patch,则就会碰见这个bug。

This issue is intermittent and the error stack is not seen 100% of the time. However, if there is a client / server mismatch where the patch for bug 3396162 has been applied to either client or server, but not to both environments, this bug will be encountered.

如下堆栈信息的描述和上面core的堆栈基本一致,

给出的wrokaround,

The client and server versions must both contain the fix for bug 3396162. This patch is automatically included in 9.2.0.8, 10.1.0.5 and 10.2.0.x or higher releases. The fix is to ensure the patch is applied to both client and server environments.

客户端和服务端必须包含3396162这个bug的补丁,这个补丁自动包含于9.2.0.8,10.1.0.5和10.2.0.x或更高版本中。

其他版本可以下载patch:3396162,

There exists some patches for 9.2.0.7, 10.1.0.3 and 10.1.0.4 for some platforms, downloadable as Patch :3396162.

再次检查应用程序,发现makefile中使用的Oracle客户端库的版本是9.2.0.7,很符合这篇文章的描述,即客户端应用使用的Oracle版本是9.2.0.7,数据库服务端的版本是10.2.0.4,接着推进一些佐证。

1.和DBA确认9.2.0.7库并未应用这个补丁3396162。 2.测试环境中,让开发人员使用原始9.2.0.7编译的应用程序跑一个一天的持续性测试,发现确实会出现core,而且出现问题的SQL是很随机,和生产环境的现象一致。 3.让开发人员使用9.2.0.8以上的客户端库来重新编译应用程序,再次做持续性测试,发现不会再产生core了。

解决方案: 使用9.2.0.8以上的Oracle客户端重新编译应用程序,替换生产环境的二进制文件,重启应用。

总结: C程序出现core dump,跟踪core的信息,往往可以进一步定位问题的出处。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • “Connection refused” vs “No route to host”

    曾经在http://blog.csdn.net/bisal/article/details/42496583这篇博文中提到一个端口连接的验证:

    bisal
  • 如何查看JVM运行的堆内存情况

    《不可不知的7个JDK命令》介绍了些jdk自带的问题排查工具,机器出现CPU飙升的情况,此时就可以借助工具,排查应用端是否存在一些潜在问题。

    bisal
  • 解决导入过程中出现的ORA-02289错误

    用expdp导出生产库数据到测试库,执行impdp的时候报了ORA-02298错误,提示生效TBL_B表的外键约束FK_B_ID的时候出错,

    bisal
  • SAP JAM里的用户profile功能

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • 【FAQ】数据科学是什么?

    小编邀请您,先思考: 1 什么是数据科学? Data science is a multidisciplinary blend of data inferenc...

    陆勤_数据人网
  • 浅谈文件上传漏洞(其他方式绕过总结)

    检测原理:用户上传文件时,服务器会获取这个文件的MIME值,与事先设置好的进行比对,如果不一致,说明上传文件非法。

    雪痕@
  • iOS 刮奖

    Raindew
  • MNIST机器学习入门

    当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。就好比编程入门有Hello World,机器学习入门有MNIST。

    py3study
  • 高效网游服务器实现探讨 - jack-wang - C++博客

    高效网游服务器实现探讨 随着多核处理器的普及,如何充分利用多核并行工作就成为高性能程序设计的一个重点。本系列文章将围绕高性能网游服务器的实现,探讨这方面的技术。...

    李海彬
  • 使用PHPUnit进行单元测试并生成代码覆盖率报告的方法

    这是一个非常简单的测试用例类,可以看到,执行了共3个测试用例,共3个断言,共1个失败,可以参照PHPUnit手册学习更多高级用法。

    砸漏

扫码关注云+社区

领取腾讯云代金券