2017-02-28 37 views
2

我正在使用SchemaSpy(5.0.0)生成我们的Informix数据库报告。 在运行它,我在“聚会模式细节”的最后一步收到以下错误:SchemaSpy - 生成报告时出现错误信息

java.sql.SQLException: The cursor has been previously released and is unavailable. 
    at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:408) 
    at com.informix.jdbc.IfxSqli.addException(IfxSqli.java:3187) 
    at com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3467) 
    at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2378) 
    at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2303) 
    at com.informix.jdbc.IfxSqli.executeFetch(IfxSqli.java:2037) 
    at com.informix.jdbc.IfxSqli.getaRow(IfxSqli.java:4077) 
    at com.informix.jdbc.IfxResultSet.next(IfxResultSet.java:494) 
    at com.informix.jdbc.IfxDatabaseMetaData.getImportedKeys(IfxDatabaseMetaData.java:5524) 
    at net.sourceforge.schemaspy.model.Table.connectForeignKeys(Table.java:106) 
    at net.sourceforge.schemaspy.model.Database.connectTables(Database.java:984) 
    at net.sourceforge.schemaspy.model.Database.<init>(Database.java:83) 
    at net.sourceforge.schemaspy.SchemaAnalyzer.analyze(SchemaAnalyzer.java:211) 
    at net.sourceforge.schemaspy.Main.main(Main.java:42) 
Caused by: java.sql.SQLException 
    at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:408) 
    at com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3472) 

我使用Informix JDBC驱动程序的版本4.1.0(也试过4.10.8.1)。奇怪的是这个驱动也需要BSON库。

任何想法是什么问题?

回答

2

为了将来的参考,我可以通过用旧版本替换上述驱动程序4.X来解决问题。看起来这个驱动程序有问题,或者SchemaSpy与新的4.X驱动程序不兼容。工作的驱动程序是最新的3.X驱动程序(确切地说3.70.JC8)。

+1

很好的发现。如有可能,应该真正向IBM/Informix技术支持部门报告此问题。后门通道不如实际的客户报告。 –

3

与Jonathan同意100%。这应该报告给IBM技术支持。 IBM每年发布大约3个或Fixpacks,我认为没有理由让Informix 12.10用户受到处罚。打开服务请求会很好。我喜欢schemaSpy!

埃里克

+0

是否有可用于上述问题的修复程序?还是有informix票来跟踪这个? 我们对新的informix驱动程序有同样的问题4.10.JC9 我们通过Liquibase运行初始查询。旧版本的informix驱动程序没有问题3.70.JC5 任何帮助都是可观的 –

0

望着堆在服务器没有做一个选择,当它尝试检索主键列表返回一个错误给客户端:

java.sql.SQLException: The cursor has been previously released and is unavailable. 
    at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:408) 
    at com.informix.jdbc.IfxSqli.addException(IfxSqli.java:3187) 
    at com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3467) <--- means error ;) 
    at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2378) 
    at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2303) 
    at com.informix.jdbc.IfxSqli.executeFetch(IfxSqli.java:2037) 
    at com.informix.jdbc.IfxSqli.getaRow(IfxSqli.java:4077) 
    at com.informix.jdbc.IfxResultSet.next(IfxResultSet.java:494) 
    at com.informix.jdbc.IfxDatabaseMetaData.getImportedKeys(IfxDatabaseMetaData.java:5524) 

我做了快速在我对stores_demo数据库服务器中的一个测试用4.10.JC8并没有完成一个glich:

d:\JJTMP>java -jar \jjtmp\schemaSpy_5.0.0.jar -t informix -db stores7 -s informix -u informix -p password -o \jjtmp -host 420ito:9088 -server ids1210 -dp \infx\jdbc410jc8x\lib\ifxjdbc.jar 
Using database properties: 
    [\jjtmp\schemaSpy_5.0.0.jar]/net/sourceforge/schemaspy/dbTypes/informix.properties 
Gathering schema details....................................................................(4sec) 
Writing/graphing summary..............(7sec) 
Writing/diagramming details.................................................................(6sec) 
Wrote relationship details of 65 tables/views to directory '\jjtmp' in 19 seconds. 
View the results by opening \jjtmp\index.html 

d:\JJTMP> 

如果你得到一个SQLI跟踪,你应该能够明白为什么日在特定的SQL失败。 将SQLIDEBUG属性添加到schemaSpy命令行中的连接字符串以生成一个。 事情是这样的:

d:\JJTMP>java -jar \jjtmp\schemaSpy_5.0.0.jar -t informix -db stores7 -s informix -u informix -p password -o \jjtmp -host 420ito:9088 -server ids1210 -dp \infx\jdbc410jc8x1\lib\ifxjdbc.jar -connprops SQLIDEBUG\=trace 
Using database properties: 
    [\jjtmp\schemaSpy_5.0.0.jar]/net/sourceforge/schemaspy/dbTypes/informix.properties 
Gathering schema details....................................................................(4sec) 
Writing/graphing summary..............(7sec) 
Writing/diagramming details.................................................................(6sec) 
Wrote relationship details of 65 tables/views to directory '\jjtmp' in 18 seconds. 
View the results by opening \jjtmp\index.html 

d:\JJTMP>dir trace* 
Volume in drive D is Data750 
Volume Serial Number is F0B7-2E46 

Directory of d:\JJTMP 

17/08/2017 11:10   2,008,706 trace1502964639886.0 
       1 File(s)  2,008,706 bytes 
       0 Dir(s) 284,868,997,120 bytes free 

然后你可以使用sqliprint/sqliprt CSDK工具解码跟踪文件(它应该是在发动机bin目录下)

d:\JJTMP>sqliprt -notimestamp trace1502964639886.0 > trace.txt 

d:\JJTMP> 

但正如大家所说,它可能打开技术支持打勾是个好主意。它可能是特定于你的数据库/模式(不知道它是否对其他数据库失败),但即使如此getImportedKeys()也不应该失败,因为该错误没有任何应用程序。