Weblogic 10.3, JDBC, Oracle, SQL - таблица или представление не существует - PullRequest
1 голос
/ 07 апреля 2010

У меня действительно странная проблема, из-за которой я не добился успеха в поиске.

Это начало происходить без изменений в БД, настройках соединения, коде и т. Д.

Проблема в том, что при доступе к сервлету один из EJB-компонентов выполняет прямой вызов SQL, очень простой

"select \n" +<br/> " value, \n" +<br/> " other_value \n" +<br/> " from \n" +<br/> " some_table \n" +<br/> " where some_condition = ? "

Это, очевидно, не прямой SQL, но довольно близко.По какой-то причине это начало возвращать ошибку, в которой говорилось: «ORA-00942: таблица или представление не существует».

Таблица существует, и кикер, если я подключаюсь к отладчику, меняю пробел или что-то незначительное(без изменения самого запроса) в запросе, и горячее развертывание изменения, он работает нормально.Это не первый раз, когда я сталкиваюсь с этим.Кажется, что это происходит только в средах разработки (еще не видел его в q / a, песочнице или производстве), не всегда воспроизводимо, и это сводит меня с ума.

Под не всегда воспроизводимым я имею в виду, чтоиногда чистая сборка и повторное развертывание иногда решают проблему, но не всегда.Это не всегда одна и та же таблица (хотя, если возникает ошибка, она продолжается с тем же запросом).

Просто выкиньте пробник, чтобы узнать, сталкивался ли кто-нибудь с подобными проблемами раньше, и что они, возможно, обнаружили, чтобы это исправить.

1 Ответ

1 голос
/ 08 апреля 2010

Похоже, что, возможно, у одного соединения в вашем пуле JDBC есть проблема, которая может объяснить прерывистую природу, и что повторное развертывание только иногда исправляет это, поскольку впоследствии вы могли бы по-прежнему использовать то же соединение. Возможно, вы можете попытаться сбросить пул соединений вместо повторного развертывания. (java weblogic.Admin -url t3://<server_url> RESET_POOL <pool_name>, я думаю)

Вы сказали, что есть только одна схема, но означает ли это, что существует только одна схема, или что все таблицы находятся под одной схемой? Возможно ли, что вы где-то делаете ALTER SESSION SET CURRENT_SCHEMA, и когда какое-либо соединение, которое было установлено, возвращается в пул, а затем случайным образом используется для запроса, оно больше не видит ничего в основной схеме? Это может произойти в пакете или триггере, а также со стороны Java, и может быть «временным» изменением, которое не отменяется после исключения. Похоже, что-то, что может существовать только в среде разработчиков ...

...