• 代码访问Oracle,出现ORA01000超出打开游标的最大数 错误之解决方法


    前天一同事在从excel中批量导入数据时,出现 ORA-01000 的错误。

    网上google了下,有类似现象出现过,是Java代码访问oracle时出现的,而我们用的是c#,应该原因是一样的。

    Java情景如下(伪代码描述):

    1、创建Connection,创建Transaction

    2、循环创建Statement,附sql,执行Statement

    3、事务Commit,Conn关闭释放

    C#情景如下(伪代码描述):

    1、创建Connection,创建Transaction

    2、循环创建Commander,附sql,执行Commander

    3、事务Commit,Conn关闭释放

      

     但结果都出现如题错误,当多批量操作时。

    看下游标的默认连接数:show paramenter cursor , 300

    而我们同事执行批量导入的执行次数也是在>300时出错。 由此可断定与cursor的设置有关。


    解决方法:

    1、增大默认cursor数量(但很别动)

    2、程序代码中解决。

    分析:上述场景代码中,循环体中的Statement和Commander对象,都是每次创建的。难道是这个引起的:每次循环后就该被回收(.NET&JAVA都可自动回收对象),但因为GC来不及处理,导致来不及释放,而导致cursor超过默认限制数?

    尝试:循环体中每次都手动关闭Statement和Commander对象。 结果错误不在...

    原因:果真是我们想象的那样,一个Statement/Commander也即对应一个Connection上的一个cursor。

    解决方法:那就很简单了,既然知道这个原因。恩,每次循环体中关闭Statement/Commander,或者在循环体外声明此对象,循环体内进行sql的赋值即可解决该问题。 ^_^  

  • 相关阅读:
    [转]使用Java Mission Control进行内存分配分析
    JDE开发端安装问题(JDE初步卸载重装)
    JDE开发端安装笔记
    [转]JDE910--jas.ini参数说明
    [转]十个常见的缓存使用误区及建议
    JDE910笔记2--OMW项目建立及简单使用
    JDE910笔记1--基础介绍及配置
    [转] 编程之美--字符串移位包含的问题
    关于JDBC
    [转]何时使用委托而不使用接口(C# 编程指南)
  • 原文地址:https://www.cnblogs.com/FallingAutumn/p/1617395.html
Copyright © 2020-2023  润新知