WARN - 获取ImportedKeys 失败游标先前已被释放且不可用
Posted
技术标签:
【中文标题】WARN - 获取ImportedKeys 失败游标先前已被释放且不可用【英文标题】:WARN - Failed to getImportedKeys The cursor has been previously released and is unavailable 【发布时间】:2019-03-11 16:47:33 【问题描述】:我在一个相当庞大的 Informix 12.10 架构上运行 SchemaSpy v6.1.0-SNAPSHOT,我收到错误“警告 - 无法获取导入密钥游标已被释放且不可用。”
我对 Java 一无所知,但我注意到 Liquibase(也是用 Java 编写的)有一个非常相似的错误,我想知道:
-
鉴于我不是特别想学习 Java,是否有人可以告诉我导致此错误的原因以及如何避免/解决它 :-)
这是 Informix 特有的还是在其他数据库中也可以看到?
【问题讨论】:
你又一次超越了我的知识范围。 我永远不会那样做。 你刚刚做到了。 Java 是装在咖啡杯里的东西。 【参考方案1】:您在How do I use --logLevel in Liquibase 中获得的liquidbase 堆栈跟踪实际上给了我们一个提示,但我花了一段时间才弄清楚可能发生了什么。在那里我们可以看到使用缓存结果集的 liquibase。缓存 ResultSets(游标)是危险的,因为 Informix JDBC 驱动程序不会在提交上保存游标。所以很有可能软件打开了一个结果集(游标)做了一些其他操作导致 Informix/JDBC 关闭游标,然后它尝试使用已经关闭的游标导致你的错误。
有一个 API 可以强制 JDBC 保持游标打开:
connection.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT)
但我猜你没有能力在这些产品中影响这一点来尝试它。遗憾的是,Informix 不允许在 URL 中进行此设置。应该添加的功能:)
我针对我的一个数据库(22 个表,126 列)针对 schemaspy 进行了测试,最新的 Informix JDBC 驱动程序 4.10.JC12W1 没有问题。确切的问题可能需要重现以供支持团队确定。
【讨论】:
谢谢,布赖恩。我提出了一个 RFE,我很高兴提供一个模式来支持您可以用来复制的模式。我还请我的一个知道 Java 的团队查看 SchemaSpy 代码,看看他是否可以添加您建议的修复。 @SpokeyWheeler 是的,如果你能给我或我的团队提供架构,我很乐意使用它来尝试从我们这边追查问题。【参考方案2】:我想我这次真的得到了正确的答案。我不得不寻求一些帮助来追踪这个问题,因为这是驱动程序中的时间问题 + 错误。
这里的问题在于某些版本的 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 驱动程序。
【讨论】:
以上是关于WARN - 获取ImportedKeys 失败游标先前已被释放且不可用的主要内容,如果未能解决你的问题,请参考以下文章
WARN 发送 SSL 关闭消息失败(Kafka SSL 配置问题)
npm WARN 可选 dep 失败,继续 fsevents@0.3.6
WARN ReliableDeliverySupervisor:与远程系统的关联失败,地址现在被门控 [5000] 毫秒。原因:[解除关联]
Python:Selenium Firefox Webdriver 失败并出现错误:“无法加载配置文件...WARN addons.xpi...”