环境: OmniFind Enterprise Edtion V8.4,MS SQLSERVER 2005
产品:WebSphere II OmniFind Edition
平台:跨平台
版本:V8.4
问题描述:
当配置数据源为MS SQLSERVER JDBC数据源,爬虫(Crawler)爬寻(Crawling)数据源中的大表时,有时候会遇到错误
FFQD4219E
A database error occurred. Database: database_URL. SQLCODE: 0
此时检查集合的日志,可以看到如下日志信息:
251658517"1"1190570570894"603984231"0"1563268982" col_7451" col_7451.JDBC_62119" zjw-se1" BaseException.java"-1"3 com.microsoft.sqlserver.jdbc.SQLServerException: 系统内存不足。请对大型 ResultSet 使用服务器端游标: 。ResultSet 大小:266,708,558。JVM 总内存大小:1,074,133,504。"3 com.microsoft.sqlserver.jdbc.SQLServerException: 系统内存不足。请对大型 ResultSet 使用服务器端游标: 。ResultSet 大小:266,708,558。JVM 总内存大小:1,074,133,504。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.DBComms.receive(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PreparedStatementExecutionRequest.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.CancelableRequest.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
at com.ibm.es.crawler.db2.jdbc.DB2AbstractCursor.open(Unknown Source)
at com.ibm.es.crawler.db2.DB2AbstractFetcher.connect(Unknown Source)
at com.ibm.es.crawler.FetcherAdapter.connect(Unknown Source)
at com.ibm.es.crawler.archive.ArchiveFileFetcher.connect(Unknown Source)
at com.ibm.es.crawler.DSThread.doJob(Unknown Source)
at com.ibm.es.crawler.DSActiveThread.doMainTask(Unknown Source)
at com.ibm.es.crawler.DSActiveThread.analyzeTask(Unknown Source)
at com.ibm.es.crawler.DSActiveThread.handleRequest(Unknown Source)
at com.ibm.es.crawler.DSThread.run(Unknown Source)
at java.lang.Thread.run(Thread.java:570)
""
67113083"1"1190570570894"603984231"0"1563268982" col_7451" col_7451.JDBC_62119" zjw-se1" BaseException.java"-1"3 jdbc:sqlserver://192.168.1.225:1433;DatabaseName=testdb"0 0"3 ""
251658517"1"1190570570894"603984231"0"1563268982" col_7451" col_7451.JDBC_62119" zjw-se1" BaseException.java"-3"3 com.microsoft.sqlserver.jdbc.SQLServerException: 系统内存不足。请对大型 ResultSet 使用服务器端游标: 。ResultSet 大小:266,708,558。JVM 总内存大小:1,074,133,504。"3 com.microsoft.sqlserver.jdbc.SQLServerException: 系统内存不足。请对大型 ResultSet 使用服务器端游标: 。ResultSet 大小:266,708,558。JVM 总内存大小:1,074,133,504。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.DBComms.receive(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PreparedStatementExecutionRequest.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.CancelableRequest.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
at com.ibm.es.crawler.db2.jdbc.DB2AbstractCursor.open(Unknown Source)
at com.ibm.es.crawler.db2.DB2AbstractFetcher.connect(Unknown Source)
at com.ibm.es.crawler.FetcherAdapter.connect(Unknown Source)
at com.ibm.es.crawler.archive.ArchiveFileFetcher.connect(Unknown Source)
at com.ibm.es.crawler.DSThread.doJob(Unknown Source)
at com.ibm.es.crawler.DSActiveThread.doMainTask(Unknown Source)
at com.ibm.es.crawler.DSActiveThread.analyzeTask(Unknown Source)
at com.ibm.es.crawler.DSActiveThread.handleRequest(Unknown Source)
at com.ibm.es.crawler.DSThread.run(Unknown Source)
at java.lang.Thread.run(Thread.java:570)
""
67113083"1"1190570570894"603984231"0"1563268982" col_7451" col_7451.JDBC_62119" zjw-se1" BaseException.java"-3"3 jdbc:sqlserver://192.168.1.225:1433;DatabaseName=testdb"0 0"3 ""
67111889"1"1190570570894"603981768"0"1563268982" col_7451" col_7451.JDBC_62119" zjw-se1" BaseException.java"-1""
67111875"1"1190570570894"603984415"0"1563268982" col_7451" col_7451.JDBC_62119" zjw-se1" com.ibm.es.crawler.DSThread.java"0"3 jdbc:sqlserver://192.168.1.225:1433;DatabaseName=testdb"3 dbo.yanjiushi""
原因:
造成此错误的原因是由于SQLSERVER 提供的JDBC数据源驱动程序,在默认情况下,将结果集一次性全部取到内存中,所以当大结果集的时候,将会耗费大量JVM内存,导致JVM系统内存不足。
解决方法:
为了解决这个问题,我们可以采用服务器端游标的方式打开结果集,那么要如何来设置呢?
我们可以通过编辑数据源XML文件来实现
1. 找到数据源的XML文件,从日志里可以知道相应的数据源XML文件如
..\ master_config\col_7451.JDBC_62119\jdbccrawler.xml
2. 备份文件后,用文本编辑器打开文件,找到如下字符串
jdbc:sqlserver://192.168.1.225:1433;DatabaseName=testdb
3. 在找到的数据库URL里添加用服务器端游标的方法选项
;selectMethod=cursor
添加选项后,上述字符串变为
;selectMethod=cursor" ID="s1190270547112" >jdbc:sqlserver://192.168.1.225:1433;DatabaseName=testdb;selectMethod=cursor
4. 保存文件,停止Crawler,重新启动后,再次爬寻数据源。FFQD4219E错误就不再出现
注意:此问题只存在于MS SQLSERVER,其它关系型数据库无此问题
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/5718/viewspace-192134/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/5718/viewspace-192134/