昨天在一个自己编写的windows服务运行中出现了这个问题,功能大体上是通过调用web服务从一个数据库获取数据更新到另一个数据库中(这2个数据库业务实现的要求有相似之处,但表结构设计差异较大,彼此又存在数据交互的需要,因此就采用了这种设计方案),每天23点进行一次操作,白天测试用了几条数据跑没发现任何问题,部署以后晚上在真实环境下运行出现了如下错误:ORA-01000: 超出打开游标的最大数
仔细检查了代码发现我只在RSyncTer方法中声明并打开一个数据库连接,而在RSyncTer方法中调用的OperateTer方法以及OperateTer方法调用的GetTEngineInfo方法统统使用了这个连接,再看一下操作数据库的底层方法里并没有关闭连接,我只是在RSyncTer方法的finally块里关闭了连接,这样看似是仅使用了一个连接,目的是想减少对连接资源的占用,但在运行时由于涉及的多个方法都要用到数据库连接(通过传连接参数)实际上是循环一次执行一条数据打开了多个连接,要命的是这些连接每次都没关闭,对数据库查询来说就是打开了多个游标,数据量大的时候(当时运行环境也就1500条的样子)这个问题才会出现了。看来大家在使用第三方数据访问类时(本人这个项目所用到的类也是直接从网上down的)仔细检查一下还是很有必要的。