ORA-03115问题分析

ORA-03115问题分析:

一、问题:

东丽医院2010.9.10进行了门诊系统切换后,开始使用我们新的门诊业务模块。

2010.9.11上午约10点左右,门诊收费模块在收费使用过程中,支付界面回车后,突然出现如下的错误,导致门诊收费业务无法正常进行下去。

错误:ORA-03115:unsupported network datatype or representation.

 

 

二、处理:

上网BaiduGoogle查找ORA-03115错误的原因,主要结果如下:

ORA-03115:  unsupported network datatype or representation

(不支持的网络数据类型或表示法)
Cause:  A user bind or define, or an Oracle function, is not supported by

            this heterogeneous Net8 connection.
Action:  Upgrade the older version of Oracle and try again.

(一个用户的绑定或定义或oracle函数不被Net8联接的异构环境所支持,建议更新旧版本的Oracle后再试)

由于问题出现的比较突然,感觉到很茫然,因为有两个现状使人很迷惑:(1)客户端的Oracle与 服务器的Oracle版本是一致的;(2)出错前一直使用的没有问题,也没有发现对ORACLE进行什么调整的操作。

网上查询到的出错原因以及跟踪程序SQL都不能很准确的定位问题所在,但是根据ORA-03115的出错原因分析,有两点很值得怀疑的原因,一是一直以来门诊收费的部分SQL语句存在变量类型混用不严谨的问题(如,字符型数据字混在一起的SQL),二是出错之前可能有某个低版本的客户端程序的联接使用引起了OracleSQL的解析发生了改变,导致问题的发生。

于是尝试,再建议查找这样的Sql语句的同时, 将门诊收费程序的配置文件obilling.ini的数据库连接配置参数进行修改,将原有的缺省的软解析Sql模式设置为硬解析,即:将dbparm参数设置为:dbparm="disablebind=1",再尝试门诊收费业务,能够进行正常收费了。

对于引起问题的Sql语句还在进一步分析查找中。

三、警示:

SQL语句对于字段类型如numbervarchar2的混淆使用,可能报这样的错误。

也许这个语句在某些客户端不会出错,而且原来不会错而经过了Oracle数据库分析之后却又出错了。

所以,写SQL还是要严谨些,按照SQL标准编写;

另外,值得提的是,如果在Powerbuiler里用绑定变量(dbparm="disablebind=1"),可以避免这个问题。

四、参考资料

1)关键字:硬解析、软解析、绑定变量

Oracle 中,对于一个提交的Sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析。

一个硬解析需要经解析、制定执行路径、优化访问计划等许多的步骤。硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和CPU的数量来解决。之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。当一个sql语句提交后,Oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。

而唯一使得Oracle 能够重复利用执行计划的方法就是采用绑定变量。

绑定变量的实质就是用于替代Sql语句中的常量的替代变量。绑定变量能够使得每次提交的Sql语句都完全一样。

但是并不是任何情况下都需要使用绑定变量, 下面是两种例外情况:

1.对于隔相当一段时间才执行一次的Sql语句,这是利用绑定变量的好处会被不能有效利用优化器而抵消;

2.数据仓库的情况下。

 

    2)关键字:OCI

PL/SQL是服务器端执行。程序是客户端交互,两者执行SQL语句的过程并不一定完全相同。PL/SQL是原封不动的传到服务器端去执行的。程序,则是通过OCI*net协议来传递服务器端结果,客户端解析的。

OCIOracle Call Interface:ORACLE公司开发的一个应用程序开发工具,是一个通过访问Oracle数据库的服务器,控制各类SQL语句的执行,进而创建应用程序的的应用程序接口(API)。它支持SQL所有的数据定义,数据操作,查询,事务管理等操作,支持CC++的数据类型, 调用,语法和语义。它提供了一组可对Oracle数据库进行存取的接口子例程(函数)

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页