【问题标题】:com.ibm.db2.jcc.a.SqlException: tableName is an undefined namecom.ibm.db2.jcc.a.SqlException:tableName 是未定义的名称
【发布时间】:2016-04-07 17:13:07
【问题描述】:

我们的代码在 Websphere Application Server 7.0.0.37 中运行,它连接到几个 DB2 数据库。有时我们会收到异常“com.ibm.db2.jcc.a.SqlException:“SCHEMA.TABLENAME”是一个未定义的名称”。当负载特别高时,每天都会发生这种情况。请告知这是否与 websphere 中的连接设置有关。以下是堆栈跟踪:

[4/6/16 21:54:08:083 PDT] 000000f7 SystemErr R com.ibm.db2.jcc.a.SqlException:“SCHEMA.TABLENAME”是未定义的 姓名。 [4/6/16 21:54:08:083 PDT] 000000f7 SystemErr R at com.ibm.db2.jcc.a.zc.e(zc.java:1606) [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R 在 com.ibm.db2.jcc.a.zc.a(zc.java:1206) [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R at com.ibm.db2.jcc.c.eb.h(eb.java:149) [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R 在 com.ibm.db2.jcc.c.eb.a(eb.java:43) [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R at com.ibm.db2.jcc.c.r.a(r.java:30) [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R at com.ibm.db2.jcc.c.tb.g(tb.java:152) [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R at com.ibm.db2.jcc.a.zc.n(zc.java:1186) [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R 在 com.ibm.db2.jcc.a.ad.db(ad.java:1761) [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R at com.ibm.db2.jcc.a.ad.d(ad.java:2203) [4/6/16 21:54:08:084 PDT] com.ibm.db2.jcc.a.ad.W (ad.java:1276) 处的 000000f7 SystemErr R [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R at com.ibm.db2.jcc.a.ad.execute(ad.java:1260) [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecute(WSJdbcPreparedStatement.java:942) [4/6/16 21:54:08:084 PDT] 000000f7 SystemErr R at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.execute(WSJdbcPreparedStatement.java:618)

【问题讨论】:

  • 是的,有一个同名的表。应用程序只是在该表中执行选择和插入。这是作为处理来自 MDB 的消息的一部分执行的
  • 您好 mustaccio,您能否编辑您上面的评论以删除表名。我不确定这是否是我组织中与安全相关的东西。感谢理解
  • 嗯,您说有这样的表,但 DB2 说没有。我们信任谁?

标签: db2 websphere-7


【解决方案1】:

WebSphere Application Server 中的连接设置可能会影响所使用的模式(基于连接的用户名),但是,它是一致的,不会因数据库是否处于负载状态而有所不同。如果您观察到问题发生在负载下,但不是其他情况,则可能存在线程错误。

为了澄清问题, SCHEMA.TABLENAME 是您希望使用的模式和表吗?如果不是,哪一部分是意外的——模式、表名,还是两者都有?或者,如果 SCHEMA.TABLENAME 是预期的,那么在没有负载的情况下,对同一个模式/表的查询是否有效? SCHEMA 模式是在应用程序中明确指定,还是从连接用户名或数据源设置中隐含指定?

【讨论】:

  • 模式和表名是正确的。架构名称在应用程序代码中明确指定,而不是在数据源设置中。您能否编辑您的答案以将架构和表名更改为“SCHEMA.TABLENAME”,因为我不确定我的组织中的安全限制。
  • 当然,我相应地更新了它。鉴于您所说的应用程序硬编码模式/表名称,我可以解释这种情况的唯一方法是您最终以某种方式与无权访问该模式/表的错误用户建立连接。您可以通过在错误发生时捕获错误来进行调查,然后尝试以下操作:connection.getMetaData().getUserName()
猜你喜欢
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2023-02-07
相关资源
最近更新 更多