Jasper报告使用SELECT语句导致CURSOR问题

时间:2017-09-15 17:56:35

标签: java oracle jdbc jasper-reports cursor

我们正在将Jasper报告与java用于我们的报告应用程序之一,并使用“SELECT”查询来获取数据并使用Jasper报告模板生成报告。它们是一堆旧查询,有些没有调整,它们的性能取决于它们所采用的参数。出日期范围,类别等

最近,我们遇到了奇怪的光标问题,应用程序持有的游标数量很高,有时高达900,这导致了一些严重的空间问题。我们正在手动关闭它们以暂时解决此问题。然而,这个问题一次又一次地重新出现,一直是一个严重的问题。

我对'SELECT'语句的理解是它们将隐式使用CURSOR方法,但确保一旦操作完成,它们就会被关闭。而且我们对应用程序方面没有太多控制权。

调试/解决问题:

  • 使用的数据库 - Oracle,Jasper - jasperreports-3.7.0,ODBC驱动程序 - ojdbc14
  • 我们通过DBA运行查询并且没有看到任何问题,这只是一个问题 常规SELECT查询,我们没有明确创建任何游标。

  • 将数据库调用更改为只读状态,不起作用。

  • 看起来Jasper服务器使用常规JDBC预处理语句 - ODBC 司机 - ojdbc14。

  • 未使用分页。

问题

我们在这个问题上缺乏线索,如果有人可以帮助我们,那就太棒了。

修改

SID = 4385具有以下具有打开游标计数的sql

SQL_ID COUNT(*)

  • djuwsn5numsqv 2
  • fw5920rbrun82 131 0wk7fbztn67zh 1
  • c29qmb59gggtv 1
  • 6y1ajq8xaw294 1
  • 9q3btvwzg96k6 487 ------->>>
  • 3zzkryq60kua1 1
  • anp287ycdrnp6 1
  • 58tzy7dhpwnq4 1
  • cfgz3kzhx53jy 1
  • 0bxwy62tx9n2w 1
  • cygg3t2hc6mr2 12
  • 29s08m4n6xuwt 1

sql_id = 9q3btvwzg96k6不断打开新游标。

1 个答案:

答案 0 :(得分:1)

本地静态游标已关闭。

您可以看到max open cursors参数,如下所示:

show parameter open_cursor

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     300

在内部区块内打开的游标显然没有被隐式关闭。如果他们被关闭了,我就不会超过打开游标的最大数量。

如果光标已经打开,则不要关闭它,只需使用它。

无论如何,最快的解决方法是

alter system set open_cursors = 1000 scope=both;