【问题标题】:SchemaSpy - Error message while generating the reportSchemaSpy - 生成报告时出现错误消息
【发布时间】:2017-02-28 12:41:10
【问题描述】:

我正在使用SchemaSpy (5.0.0) 来生成我们的 Informix 数据库的报告。 在运行它时,在“收集架构详细信息”的最后一步中出现以下错误:

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)

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

知道有什么问题吗?

【问题讨论】:

    标签: informix schemaspy


    【解决方案1】:

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

    埃里克

    【讨论】:

    • 是否有针对上述问题的修复程序?还是有 informix 票来跟踪这个?我们对新的 informix 驱动程序 4.10.JC9 也有同样的问题 我们通过 Liquibase 运行初始查询。旧版本的 informix 驱动程序 3.70.JC5 没有问题 任何帮助都是可观的
    • @VikramAlva 是的,您可以下载最终解决此问题的 4.50.1 驱动程序。有关详细信息,请参阅我在此处发布的答案。
    【解决方案2】:

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

    【讨论】:

    • 很好的发现。如果可能的话,真的应该将此问题报告给 IBM/Informix 技术支持。后门渠道不如实际客户报告。
    【解决方案3】:

    我刚刚在这里https://stackoverflow.com/a/55458418/8334122 回答了这个类似的问题。该答案的副本如下。

    我不得不寻求一些帮助来追踪这个问题,因为这是一个时间问题 + 驱动程序中的错误。

    这里的问题在于某些版本的 Informix JDBC 驱动程序。快速修复是升级到最新的 4.50.1 驱动程序。它在 Maven 上。

    <!-- https://mvnrepository.com/artifact/com.ibm.informix/jdbc -->
    <dependency>
        <groupId>com.ibm.informix</groupId>
        <artifactId>jdbc</artifactId>
        <version>4.50.1</version>
    </dependency>
    

    详细。 4.10.X 驱动程序引入了一个语句清理线程,该线程每 15 秒运行一次,并查找需要关闭的资源,因为它们没有更多引用并且可能被垃圾收集。问题,然后复合为几个 JDBC 元数据调用错误地未能关闭资源,导致这个更干净的线程有时会在工作中间关闭资源。因此,有些人经常看到它,有些人从来没有。您可以使用 4.10.JC12 解决它,我们在其中添加了一个连接标志来禁用清洁线程 (IFMXCONNECTION_CLEANER_THREADS=0)。或者最好的选择是升级到已正确修复此问题的最新 4.50.1 驱动程序

    【讨论】:

      【解决方案4】:

      查看堆栈,服务器在尝试检索主键列表时无法执行选择并向客户端返回错误:

      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)
      

      我在我的一台服务器上使用 4.10.JC8 对 stores_demo 数据库进行了快速测试,并且没有出现任何故障:

      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工具解码trace文件(应该在引擎bin目录下)

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

      但正如大家所说,打开一个带有技术支持的勾号可能是个好主意。它可能特定于您的数据库/模式(想知道它是否对其他数据库失败),但即使如此 getImportedKeys() 也不应该因该错误而失败,无论应用程序做什么。

      【讨论】:

        猜你喜欢
        • 2014-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多