资讯专栏INFORMATION COLUMN

weblogic填坑一记

IT那活儿 / 1499人阅读
weblogic填坑一记
前戏:
 为响应某公司安全部门要求,针对该公司使用了weblogic中间件的系统进行2019年10月发布的最新PSU补丁进行更打,以修复对应的安全漏洞。

而本文要讲的故障案例,就是由本次补丁更打而引发的,而通过这个案例,我们能得到了哪些启发?且看下文道来。

故障概述    
2019/11/19某公司营业系统订单相关业务办理时,相同的业务请求间歇性的出现“ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值”报错。
故障处理过程:
1、系统维护人员发现报错“ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值”,第一反应是程序有问题,向ORACLE数据库中插入或更新数据时插入的字符串长度越界?但是相同的请求数据时而成功,时而报错。
核实发现代码近期没做过变更上线,相关业务也早就存在,代码问题的可能性较小。

 2、数据库侧核实,对应的一体机Oracle19C库没有异常,且近期没更新。

3、中间件侧运维人员核实昨晚针对故障系统抽取了部分主机进行了weblogic补丁更打!“部分主机”与报错现象对上了,怀疑故障可能与补丁升级相关。

4、搜集了相关故障信息后,针对weblogic升级进行了回滚,应用重启后,问题得到解决。

故障原因分析:
后续针对故障时刻搜集的相关信息进行排查,未发现任何异常信息,仅有的信息只有业务日志“ORA-01461”报错。我们在测试环境进行了weblogic补丁升级准备复现问题,然而问题并未复现。

接着,我们针对能够引发“ORA-01461”报错的可能原因,做了深一步的梳理:
1)插入到字符串长度大于4000字节;

2)插入到表中的记录的某个字段数据的实际长度大于2000个字节(如果是UTF-8,则是1333个字节);或者是插入的记录中有两个或两个以上长度大于2000字节的字符串。

3)数据库与客户端的JDBC驱动不匹配。对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然表定义中为varchar2(4000),但是其实该字段的data_length为其2倍或3倍长。这种情况下oracle会把data_length长度超过4000的当做LONG型处理。

程序未做变更、数据库未做变更,相关业务sql肯定没问题,我们首先排除了1、2两点的可能。针对第三点,我们优先进行了进一步排查。

历史日志记录应用启动加载的JDBC驱动版本为12.1.0.2.0:


当晚补丁更新后,应用启动日志记录使用的JDBC驱动驱动版本为11.2.0.3.0 :


继续核实发现测试环境补丁更新后应用启动加载的JDBC驱动为12.1.0.2.0:


为何同样是补丁更新,却出现了不一样的结果?

我们对当晚补丁升级操作过程进行了复核,发现当晚操作人员补丁升级是采用拷贝安装的形式,直接从其他完成weblogic补丁更打的主机直接拷贝了一份安装到目标系统主机上。

恰巧,故障系统在项目初期,针对weblogic下jdbc驱动包ojdbc6.jar做了定制修改,修改后驱动为12.1.0.2.0版本:


而当晚的拷贝安装相当于将修改后的ojdbc6.jar驱动包还原了,因此驱动版本变成了11.2.0.3.0。

后续我们在测试环境验证,将weblogic产品下驱动包替换后,果然问题复现。引发故障的原因也就此解开。
  
五、剖析总结
综上分析过程,我们很容易看出存在以下几点问题的:
1) 升级当晚缺少业务验证,或者说业务验证不充分 ;
2) 补丁更新拷贝安装的方式欠妥,未按照规范敲命令升级;
3) 厂商在项目上线初期,针对weblogic基础软件的JDBC驱动包做了调整。
第一点非本次故障本质原因,在此不做阐述。

第二点,需要我们再次强调运维操作的规范性,以及不折不扣的执行的重要性,否则你不踩坑谁踩坑!

但是单就weblogic补丁升级这件事来说,运维人员也确有他的难处。

运维人员经常面临的是一晚上几十台、几百台,一轮补丁升级涉及服务器甚至上千计数,而一台服务器按照规范升级,卸载补丁、更打补丁最快可能也要40分钟左右,按照规范升级显然很难完成升级任务。

而针对weblogic在同操作系统,版本差异不大的情况下,拷贝安装是常被采纳的方案,这就是为何操作人员使用拷贝安装的原因。

冤不冤?不冤,你没按规范来啊。冤不冤?冤!鬼知道开发厂商在系统上线初期针对weblogic的JDBC驱动包做了改造啊,完全不知情,甚至是项目开发人员都不知晓或遗忘。

这就要引申出我们的第三点。

第三点,抛开这次问题不讲,以后的weblogic补丁如果针对JDBC驱动做了更新,运维人员按照规范升级,同样会掉坑里!厂商对weblogic默认JDBC驱动做了改造,还有什么地方被改了没人知晓。

牵扯到后续,如果系统迁移呢?咱们可以拷贝安装迁移啊,但是目标主机操作系统都换了呢,显然拷贝安装是不成立的。

这等于埋了一个大坑在这,谁踩谁软。该故障的本质是缺少了对基础软件安装管理规范,以及运维交接规范,进一步思考是缺少依托平台软件流转内部入网上线标准化规范化执行落地意识。毕竟,人是最可靠,但也是最不可靠的。




文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130240.html

相关文章

  • SpringBoot 2.X Kotlin系列之AOP统一打印日志

    showImg(https://segmentfault.com/img/remote/1460000018819338?w=1024&h=500); 在开发项目中,我们经常会需要打印日志,这样方便开发人员了解接口调用情况及定位错误问题,很多时候对于Controller或者是Service的入参和出参需要打印日志,但是我们又不想重复的在每个方法里去使用logger打印,这个时候希望有一个管理者统一...

    Nino 评论0 收藏0
  • weblogic 脚本创建Managed Server (受管服务器)

    摘要:直接执行该脚本即可运行工具。有离线和在线两种模式,通过命令可以从进入,按照目录形式对资源进行管理,甚至连操作的命令都和高度相似,比如是切换到指定资源路径下,是列出该目录下所有资源。 说明 weblogic安装目录下有一个创建Managed Server的脚本,脚本位于/u01/app/Oracle/Middleware/oracle_common/common/bin/config.s...

    shinezejian 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<