急急急!cursor_sharing=force碰到ora-00937, ora-00979


Oracle 9.2.0.8.0  ,  Linux AS  4.5    64bit   

因为是接手其他单位的一套Oracle9i 系统,  程序写得非常差,   几乎70% 都没有使用绑定变量,   还出现过一次
ORA-04031 ,   虽然找出了很多运行次数较高的SQL 让开发的修改,    但是因为他们也是接手别人的程序,  感觉
不愿意改 (害怕修改完了上线出问题,  怪在自己头上) ,   反复要求DBA想办法,   加 Mem, CPU 来解决 。

即使加硬件配置也需要时间,  生产系统程序还是时不时反映慢,   大家压力比较大,  没有办法了才将 cursor_sharing
值由原来的exact 修改为 force ,  数据库在CPU方面的使用得到了很大的改善,   慢的情况基本消失,  但是没高兴半天,  
2个比较重要的程序因为有group by 语句而报错 :  ora-00937  ,   ora-00979 .    没有办法又修改为 exact (还好
是可以动态修改的).   


在修改回来之前也想了其他办法,   因为这些group by 的SQL语句在Toad等工具中是可以执行的,  就是在程序中不行,
是和特定接口有关系的,   所以想到要将这些语句放到 procedure 中在DB端执行或者在SQL语句前面加入
alter session   set   cursor_sharing = exact  ;     或者让他们改为其他接口 (比如OLEDB, ODAC) 测试一下 。

但是2个程序中居然还有一个程序没有拿到源代码,    .   

万能的Puber ,  是否有其他解决方法  ?     改回来了不知道啥时候系统又得慢了 .......  



请使用浏览器的分享功能分享到微信等