公司的一个已上线的应用数据库突然问题,提示:ora-03115 ORA-03115 unsupported network datatype or representation,可以确定的是应用没有发生变更,前段时间对数据库做了一些调整。
数据库是10g,运行在aix上。
由于不是我负责的应用,因此没办法看到警告日志,不确定具体产生的原因,但肯定和调整某些参数有关系,联系调整的人员后得知,改动了参数cursor_sharing=FORCE。
在网上查询错误的原因,摘录如下:
Applies to:
Oracle Net Services - Version: 10.2.0.3
This problem can occur on any platform.
Connections to the database
Symptoms
Connections that were working, start to fail with error ORA-03115: unsupported network datatype or representation. This can happen when the database is under heavy load or a few hours after the database has been re-started. Setting database parameters SHARED_CURSORS=EXACT and SESSION_CACHED_CURSORS = 0, does not help. Flushing the shared pool does resolve the problem for a short while.
查询该参数的意义,如下:
CURSOR_SHARING
参数类型:字符串
语法:CURSOR_SHARING = {SIMILAR|EXACT|FORCE}
默认值:EXACT
参数类别:动态:ALTER SESSION,ALTER SYSTEM
CURSOR_SHARING用来指定SQL语句如何共享游标。值如下:
FORCE:如果SQL表述只是字面上的不一样,而效果是一样的,则共享游标;
SIMILAR:如果SQL表述只是字面上的不一样,效果和查询计划的维度都一样,则共享游标。这比FORCE多了一个限制:查询计划的维度;
EXACT:仅当SQL表述在字面上完全相同时才共享游标
CURSOR_SHARING参数缺省为EXACT,若指定为FORCE,则优化器可能将语句中所有的常数转换为绑定变量,虽然减少了语句分析,但是也会带来如下副作用:
优化器可供利用的信息可能减少,从而改变执行路径,例如条件中对于某个特定值索引有较好的选择性,改为绑定变量时优化器并不会发现这一点。
查询输出格式发生变化。虽然返回的数据长度不变,但列的长度可能改变。例如对于SELECT id, ‘tom’ name from emp; name应该为VARCHAR2(3),但是由于‘tom’被改为绑定变量,则可能name的显示长度变为32.
查询计划更难评估。由于语句的改变,EXPLAIN PLAN看到的查询与数据库看到的可能不一致,从而使AUTOTRACE等的输出与实际执行路径不一致。
因此,完善的应用系统不应当依靠CURSOR_SHARING来提高效率,仅能作为权宜之计。
解决方法:
ALTER SYSTEM SET cursor_sharing = FORCE SCOPE=BOTH;
alter system flush shared_pool;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/352988/viewspace-616418/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/352988/viewspace-616418/