1

我有一个非常奇怪的问题,我没有成功搜索过。

它开始发生时没有更改数据库、连接设置、代码等。

问题是,当访问 servlet 时,其中一个 EJB 正在执行直接 SQL 调用,非常简单

"select \n" +
" value, \n" +
" other_value \n" +
" from \n" +
" some_table \n" +
" where some_condition = ? "

这显然不是直接的 SQL,但非常接近。出于某种原因,这开始返回一个错误,指出“ORA-00942:表或视图不存在”。

该表存在,如果我在调试器中挂接,在查询中更改空格或其他小东西(不更改查询本身),然后热部署更改,它就可以正常工作。这不是我第一次遇到这种情况。它似乎只发生在开发环境中(还没有在 q/a、沙盒或生产环境中看到它),并不总是可复制的,这让我非常疯狂。

并非总是可复制的,我的意思是偶尔干净的构建和重新部署有时会解决问题,但并非总是如此。它并不总是同一个表(尽管如果发生错误,它会继续使用相同的查询)。

只是在外面试一下,看看是否有人以前遇到过这样的问题,以及他们可能发现了什么来解决它。

4

1 回答 1

1

听起来您的 JDBC 池中的一个连接可能有问题,这可以解释间歇性的性质,并且重新部署有时会修复它,因为之后您可能最终仍然使用相同的连接。也许您可以尝试重置连接池而不是重新部署。(java weblogic.Admin -url t3://<server_url> RESET_POOL <pool_name>,我认为)

您已经说过只有一种模式,但这是否意味着只存在一种模式或所有表都在一个模式下?您是否有可能在ALTER SESSION SET CURRENT_SCHEMA某个地方做某事,并且当发出的任何连接都返回到池中然后随机用于查询时,它在主模式中再也看不到任何东西了?这可能发生在包或触发器中,也可能发生在 Java 端,并且可能是在异常后不会恢复的“临时”更改。听起来也可能只存在于开发环境中......

于 2010-04-08T08:41:08.940 回答