Weblogic8.1sp3 Oralce 错误解决.

来源:百度文库 编辑:神马文学网 时间:2024/07/08 09:50:27
终于搞定Weblogic8.1sp3下奇怪的Oracle错误了!也算是新Bug喽!   本来计划新服务器割接要在本月底完成,可是在部署完成以后在操作数据库的时候却出了岔子。怎么也不能用了,连接很正常,就是不能 select,update,insert等操作。最经常报的三个错误是:

OALL8 is in an inconsistent state.
Bigger type length than Maximum
Protocol Violation

三个错误随机出现,最常见的是前两个。

因为现有的程序正在一台 Linux 服务器上正常运行,我只是把整套系统原模原样的重新部署到了一台 Sun V480 服务器上,操作系统是 Solaris 9,依然用的是 Weblogic。数据库依然同一台 DELL 服务器,不同的只是操作系统以及JDK,所以首先怀疑的是 Solaris 上的JDK是不是该打补丁了,去了Sun的网站也看到了for Solaris的补丁,但是好像没有关系。然后又重新下载了最新的JDK 1.4.6 beta ,问题依旧。然后又装了 JDK 1.5,这次连 weblogic 都运行不起来了。为了再次验证是不是JDK的问题,我在控制台下写了一个简单的Java程序来连接那台数据库服务器,惊讶的发现一切正常,说明跟JDK没关系了。

莫非是驱动的问题?可是在linux服务器上用的就是这个驱动呀,都是ojdbc14,看了一下CLASSPATH,也有啊。DELL 服务器上的Oracle版本是8.0.5,要不换成它自带的ojdbc看看,更换以后问题依旧!

于是又把怀疑的目光转向了 weblogic,觉得是不是因为字符集的问题?又按照bea提供的一份中文化文档一步一步操作了一遍,确保提交数据的编码、连接oracle的编码、页面输出编码都是GBK,问题依旧!

然后又怀疑到了 Solaris 上,毫无有道理的怀疑是不是因为字符集的不同,导致连接Oracle时发生的错误?因为这台服务器的操作系统是数据分公司的工程师负责安装的,他在安装的时候没有安装中文语言包,所以我设置了 LANG=zh_CN.GBK 后,系统不停的提示 couldn't set locale correctly。于是我又去了IDC机房,找来 Solaris 9的语言包光盘,把中文语言包安装上去,再次测试,问题依旧!

实在没辙了,决定装上Tomcat看看,去了apache的网站后,发现tomcat有了5.5的版本,也没仔细看发行说明就直接下载回来了,却发现不能用,提示只能运行在JDK1.5下。幸亏前面已经下回来JDK1.5了,重新设置了JAVA_HOME后,哈,成功了。于是又再次怀疑weblogic的问题。

我静下来仔细想了一下两台服务器除了系统不同之外,还有哪里不同?Linux上weblogic没有配置cluster,新装的Sun V480上配置了Cluster,我的神经再次兴奋起来,我重新部署了一个新的配置,只写了一个简单的JSP页面,上面就是连接那台 Oracle 数据库,也没有用群集,问题依旧!

看来与Cluster没有关系喽,问题会在哪里呢?于是又怀疑了我现在用的数据库连接池,这个连接池虽然简陋,但是已经用了很长时间,也从没见过这个问题的发生。于是在weblogic上配置了一个连接池,然后又写了一个页面,哈,问题依旧!可是先前我一直用的是我下载回来的那个ojdbc14啊。

不会跟开发版的license有关吧,我又找来公司的一个有时间限制的license,明年1月15号就要到期了。不管他,先换了,可是问题依旧!

于是又不停的在google上搜索,看来出现这种问题的几率实在小,就找到寥寥可数的几个页面,不过在oracle的官方论坛上看到了一个相关帖子,据说是oracle老驱动的问题,需要升级驱动,可是最新的驱动就是1.4,我现在用的就是啊,无果,继续找。

实在找不到什么结果,看来问题十之八九就在 weblogic 自己身上,我又去bea网站上看有关 weblogic 8.1 sp3 的发行信息,主要看了有关Oracle的部分,上面写的是在 weblogic 8.1 sp3 上的Oracle数据库已经把ojdbc1.4默认安装上去,而且默认的驱动就是ojdbc1.4,可是在先前我没有用过weblogic自带的连接池,应该和这个没有什么关系吧,但是抱着死马当做活马医的心态看了一下weblogic里面的ojdbc,发现也有一个ojdbc14.jar,但是和我用的大小不一样。不过既然都是1.4的版本,那我就把我一直用的把Weblogic的覆盖了吧,然后又是重新启动服务,打开测试页面,哇呜呜,成功了!!!

问题竟然就是 weblogic 下 ojdbc 的问题!!!可是我在系统的CLASSPATH中已经添加了我自己的ojdbc,但是可恶的weblogic却优先使用了自己带的ojdbc!版本分明都是一样的,weblogic下的却有问题。浪费了我好几天,正所谓家贼难防啊,呜呜呜呜……

最后的总结:

看来在weblogic上部署的web应用程序,在使用相同的类库的时候,weblogic自带的相同类库优先,其次是CLASSPATH里添加的,最后才是WEB-INF/lib里的。在前面的问题中,虽然我在CLASSPATH里添加了ojdbc14的驱动,但是weblogic里已经有了,所以当然是用的weblogic自带的那个驱动了,CLASSPATH是没有效果的了。

至于为什么那台Linux服务器上很正常,是因为上面装的是Weblogic 8.1 sp2!!!

本月的任务看来有望在明天完成了……

Weblogic 里的 ojdbc 还是是个老版本的?该升级啦,这也算是Bug吧