2017-02-28 85 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()也不應該失敗,因爲該錯誤沒有任何應用程序。