百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

Oracle服务端和客户端版本补丁不一致案例

citgpt 2024-06-26 15:09 6 浏览 0 评论

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

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

Oracle服务端和客户端版本补丁不一致案例

根据提示的应用程序行,找到应用生成的中间.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的信息,往往可以进一步定位问题的出处。

相关推荐

js中arguments详解

一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...

firewall-cmd 常用命令

目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...

epel-release 是什么

EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...

FullGC详解  什么是 JVM 的 GC
FullGC详解 什么是 JVM 的 GC

前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

2024-10-26 08:50 citgpt

使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
跨域(CrossOrigin)

1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

微服务架构和分布式架构的区别

1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

深入理解与应用CSS clip-path 属性
深入理解与应用CSS clip-path 属性

clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

2024-10-25 11:51 citgpt

HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
Request.ServerVariables 大全

Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...

python操作Kafka

目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...

Runtime.getRuntime().exec详解

Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...

promise.all详解 promise.all是干什么的
promise.all详解 promise.all是干什么的

promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

2024-10-24 16:21 citgpt

Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解

取消回复欢迎 发表评论: