Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / apex listener и компиляция объектов БД / 12 сообщений из 12, страница 1 из 1
03.09.2014, 14:34
    #38736240
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
Если покривели пакеты, типы - то в апексе получаю ошибку - об этом.
После перекомпиляции всех кривых объектов - ошибка все равно не исчезает! Приходится рестартовать приложение apex-listener.

в OHS такого не наблюдалось. Как перешли на Oracle REST Data Service - началась такая трабла на технологическом сервере, на котором и ведется разработка.

я так понимаю, должен происходить reset_package_state?

Oracle REST Data Service использует свой JDBC пул. В полу glassfish я такой проблемы тоже не замечал.
Думаю не хватает какой-то настройки...
-------
GlassFish Server Open Source Edition 4.0 (build 89)
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

------
Конфиг:

автор<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM " http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Saved on Wed Jun 18 13:03:47 GMT+06:00 2014</comment>
<entry key="cache.caching">false</entry>
<entry key="cache.directory">/tmp/apex/cache</entry>
<entry key="cache.duration">days</entry>
<entry key="cache.expiration">7</entry>
<entry key="cache.maxEntries">500</entry>
<entry key="cache.monitorInterval">60</entry>
<entry key="cache.procedureNameList"/>
<entry key="cache.type">lru</entry>
<entry key="db.hostname">host</entry>
<entry key="db.password">@pass</entry>
<entry key="db.sid">sid</entry>
<entry key="db.port">1521</entry>
<entry key="db.username">APEX_PUBLIC_USER</entry>
<entry key="debug.debugger">false</entry>
<entry key="debug.printDebugToScreen">false</entry>
<entry key="error.keepErrorMessages">true</entry>
<entry key="error.maxEntries">50</entry>
<entry key="jdbc.DriverType">thin</entry>
<entry key="jdbc.InactivityTimeout">1800</entry>
<entry key="jdbc.InitialLimit">3</entry>
<entry key="jdbc.MaxConnectionReuseCount">1000</entry>
<entry key="jdbc.MaxLimit">10</entry>
<entry key="jdbc.MaxStatementsLimit">10</entry>
<entry key="jdbc.MinLimit">1</entry>
<entry key="jdbc.statementTimeout">900</entry>
<entry key="log.logging">false</entry>
<entry key="log.maxEntries">50</entry>
<entry key="misc.compress"/>
<entry key="misc.defaultPage">apex</entry>
<entry key="security.disableDefaultExclusionList">false</entry>
<entry key="security.maxEntries">2000</entry>
</properties>
...
Рейтинг: 0 / 0
04.09.2014, 15:50
    #38737704
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
EDUARD_2,

Инвалидация типов и пакетов дело обычное. Но чтобы apex listener после этого перезапускать пришлось - ни разу такого не было.

Может у вас где-то кеш включен ? В ords вижу: <entry key="cache.caching">false</entry>,
проверьте еще кеш на уровне glassfish, на уровне апекс, и на уровне браузера.

+ пример ошибки привести не помешает.
...
Рейтинг: 0 / 0
08.09.2014, 12:18
    #38740379
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
SvDevEDUARD_2,

Инвалидация типов и пакетов дело обычное. Но чтобы apex listener после этого перезапускать пришлось - ни разу такого не было.

Может у вас где-то кеш включен ? В ords вижу: <entry key="cache.caching">false</entry>,
проверьте еще кеш на уровне glassfish, на уровне апекс, и на уровне браузера.

+ пример ошибки привести не помешает.

На уровне браузера кеша нету - ctrl+f5 это подтвердило, да и отправляю POST запрос.

На уровне глассфиша - тоже нету.

В общем час получаю ошибку, пример:

Код: plsql
1.
2.
3.
4.
5.
ORA-20810: ORA-04061: существующее состояния type body "MP.RETAILENGINE" стало неприемлемым
ORA-04065: не выполнено, type body "MP.RETAILENGINE" изменено или удалено
ORA-06508: PL/SQL: невозможно найти вызываемый блок программы: "MP.RETAILENGINE"
ORA-06512: на  "MP.ABSENGINE", line 7
ORA-06512: на  line 44



Меняю процесс apex в котором идет вызов, в самом начале вставляю raise_application_error - еще раз сабмичу - появляется текст райза. убираю райз - обратно появляется ошибка состояния пакетов. Помогает только Релоад приложения ORDS - ошибка больше не появляется... так же помогает (ради интереса) - релоад БД.

это при том, что тип валидный - даже самостоятельно зашел и рекомпилил его, в списке инвалидных объектов - ПУСТО!

я делаю вывод что JDBC кеширует

а где посмотреть кеш апекса? Ведь раньше на OHS такого не происходило.
...
Рейтинг: 0 / 0
08.09.2014, 12:22
    #38740383
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
у страницы в приложении Cached:NO
...
Рейтинг: 0 / 0
08.09.2014, 13:03
    #38740437
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
В сессиях апекс-листенера нашел такой код:

Код: plsql
1.
2.
3.
begin
 dbms_session.modify_package_state(dbms_session.reinitialize);
end;



в доке сказано:
авторBecause the client-side PL/SQL code cannot reference remote package variables or constants, you must explicitly use the values of the constants. For example, DBMS_SESSION.MODIFY_PACKAGE_STATE(DBMS_SESSION.REINITIALIZE)does not compile on the client because it uses the constant DBMS_SESSION.REINITIALIZE


теперь вопрос - как заставить апекс делать
Код: plsql
1.
dbms_session.modify_package_state(dbms_session.FREE_ALL_RESOURCES);



???
...
Рейтинг: 0 / 0
08.09.2014, 14:44
    #38740590
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
автор
Код: plsql
1.
2.
3.
4.
5.
ORA-20810: ORA-04061: существующее состояния type body "MP.RETAILENGINE" стало неприемлемым
ORA-04065: не выполнено, type body "MP.RETAILENGINE" изменено или удалено
ORA-06508: PL/SQL: невозможно найти вызываемый блок программы: "MP.RETAILENGINE"
ORA-06512: на  "MP.ABSENGINE", line 7
ORA-06512: на  line 44


ошибки как ошибки, ничего подозрительного не вижу.

EDUARD_2а где посмотреть кеш апекса? Ведь раньше на OHS такого не происходило.
shared components > security attributes и page attributes.

Покажите apex debug, что там у вас происходит, и проверьте, что в этот же момент, например, в sqlplus нормально процедуры вызываются.
...
Рейтинг: 0 / 0
08.09.2014, 18:36
    #38740983
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
EDUARD_2делаю вывод что JDBC кеширует

кеширует кто-то или нет, проверяется просто,

Код: plsql
1.
2.
3.
4.
5.
6.
begin
...
  :PX_ITEM := 'Ошибок нет';
exception when ... then 
  :PX_ITEM := :PX_ITEM || '1';
end;



EDUARD_2теперь вопрос - как заставить апекс делать
Код: plsql
1.
dbms_session.modify_package_state(dbms_session.FREE_ALL_RESOURCES);



Обычно не надо выполнять ни того ни другого, достаточно повторно запустить анонимный блок...
Впрочем нашел тему-случай похожий на ваш
Автоматическая перекомпиляция при обращении к пакету

только вот конкретно при вызове того примера в апексе ошибок не появляется, только в sql workshopе, и то, если снять галочку аутокоммит.

EDUARD_2 ORA-20810: ORA-04061: существующее состояния type body "MP.RETAILENGINE" стало неприемлемым
что все-таки не исключает, что вы с вызовом процедуры и обработкой исключений где-то могли перемудрить.
...
Рейтинг: 0 / 0
09.09.2014, 08:00
    #38741271
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
SvDevавтор
Код: plsql
1.
2.
3.
4.
5.
ORA-20810: ORA-04061: существующее состояния type body "MP.RETAILENGINE" стало неприемлемым
ORA-04065: не выполнено, type body "MP.RETAILENGINE" изменено или удалено
ORA-06508: PL/SQL: невозможно найти вызываемый блок программы: "MP.RETAILENGINE"
ORA-06512: на  "MP.ABSENGINE", line 7
ORA-06512: на  line 44


ошибки как ошибки, ничего подозрительного не вижу.


Ошибка инвалидации типа, при следующем вызове этого блока кода вызывающий данный тип - должна произойти компиляция и ошибка исчезнет.

Но в моем случае, тип уже валидный, а ошибка не пропадает.

SvDevEDUARD_2а где посмотреть кеш апекса? Ведь раньше на OHS такого не происходило.
shared components > security attributes и page attributes.

Покажите apex debug, что там у вас происходит, и проверьте, что в этот же момент, например, в sqlplus нормально процедуры вызываются.

процедуры вызываются без ошибок.

авторВпрочем нашел тему-случай похожий на ваш
нет, это совсем другое и я ее встречал и решал. В его случае ошибка вылезает всегда, не только в апексе.
...
Рейтинг: 0 / 0
09.09.2014, 09:07
    #38741305
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
у меня в полу 4 сессии, так вот жму F5 много раз в браузере - иногда попадаю на сессию, в которой этой ошибки нету, а иногда на ошибку.

В общем я выше уже написал причину ошибки.
...
Рейтинг: 0 / 0
09.09.2014, 11:06
    #38741423
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
EDUARD_2В общем я выше уже написал причину ошибки.
нифига подобного

EDUARD_2в доке сказано:
авторBecause the client-side PL/SQL code cannot reference remote package variables or constants, you must explicitly use the values of the constants. For example, DBMS_SESSION.MODIFY_PACKAGE_STATE(DBMS_SESSION.REINITIALIZE)does not compile on the client because it uses the constant DBMS_SESSION.REINITIALIZE
то этот кусок доки относится к Oracle Forms, к апексу он не относится:
http://www.oracle.com/technetwork/issue-archive/2010/10-sep/apex-for-forms-098747.html Oracle Forms runs client-side PL/SQL. Application Express uses server-side PL/SQL .

и я так и не понял, чем вам не нравится DBMS_SESSION.REINITIALIZE

PL/SQL Packages and Types Reference 11g Release 2DBMS_SESSION.REINITIALIZE (or 2)—reinitializes
packages without actually being freed and recreated
from scratch. Instead the package memory is reused. In
terms of program semantics, the DBMS_
SESSION.REINITIALIZE flag is similar to the DBMS_
SESSION.FREE_ALL_RESOURCES flag in that both
have the effect of reinitializing all packages.

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

скажем, в том примере, в апексе, сколько обновить не жму вылезает
Код: plsql
1.
htp.p('pk_test2 successfuly called pk_test (' || sys_context('USERENV', 'SID') || ')' );



Код: sql
1.
pk_test2 calling pk_test: This is a test from pk_test! var=16 pk_test2 successfuly called pk_test (364)


при том, что sid не меняется, тот пример воспроизводится только в других средах, где DBMS_SESSION.REINITIALIZE не вызывается либо в SQL Worshop-е, где реализация unchecked autocommit через джобы.

P.S. лично я думаю, у вас ошибка связана конкретно с местом в пакете, где эта ошибка генерируется, либо с тем, как вы вызываете процедуру/вложенную процедуру/...

или если это кеш, это тоже легко проверяется, как я уже написал
...
Рейтинг: 0 / 0
11.09.2014, 09:29
    #38743794
EDUARD_2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
SvDev,

предположим, что процесс апекса закешировался:
- Добавляю в процесс дополнительной код, например логирования (автономная транзакция, до обращения к "кривому" типу), еще раз запускаю - текст залогировался. Так же делаю райз до места поломки - отображается ошибка из моего Райза. Следовательно кеша тут нету.

- Конектюсь Pl/Sql девелопером к БД, беру процесс из апекса и вставляю в тестовое окно - исполняю - не ругается.

- Убиваю сессии Апекс-листенера, обновляю страницу, он создает новые подключения - и ошибка пропадает.

- Ошибка не зависит от типа/пакета, важно только то, что его спецификацию рекомпилили когда в этот момент было обращение из апекса.

- Не все сессию кешируют ошибку, именно та, которая сломалась в пункте выше. Т.е. если jdbc пул выдаст другую - страница отработает нормально.

- Когда к базе конетюсь через свое веб-приложение, работающее на глассфише, я в конце делаю DBMS_SESSION.RESET_PACKAGE; это если другой клиент веб-приложения подхватит мою отработанную сессию (оракла) не получил мои глобальные пакетные переменные, а заново произошла иницилизация, при этом такого глюка как с апекс листенером никогда не происходило.
По доке я понял, что DBMS_SESSION.REINITIALIZE и DBMS_SESSION.RESET_PACKAGE имеют разный эффект.

В общем надо экспериментировать, ошибку и то не всегда можно получить. Хоть она и появляется в самый не нужный момент :D
...
Рейтинг: 0 / 0
11.09.2014, 13:16
    #38744118
SvDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
apex listener и компиляция объектов БД
EDUARD_2По доке я понял, что DBMS_SESSION.REINITIALIZE и DBMS_SESSION.RESET_PACKAGE имеют разный эффект.

PL/SQL Packages and Types Reference
11g Release 2The MODIFY_PACKAGE_STATE interface,
introduced in Oracle9i, provides an equivalent of the RESET_
PACKAGE capability. It is an efficient, lighter-weight variant for
reinitializing the state of all PL/SQL packages in the session.
...
Invoking MODIFY_PACKAGE_STATE with the DBMS_
SESSION.FREE_ALL_RESOURCES parameter provides
functionality identical to the DBMS_SESSION.RESET_
PACKAGE() interface.

про отличия параметров уже писал:
PL/SQL Packages and Types Reference
11g Release 2In
terms of program semantics, the DBMS_
SESSION.REINITIALIZE flag is similar to the DBMS_
SESSION.FREE_ALL_RESOURCES flag in that both
have the effect of reinitializing all packages.

EDUARD_2
Код: plsql
1.
type body


EDUARD_2автономная транзакция
Скорее какой-нибудь локальный баг, что dbms_session.modify_package_state не срабатывает. Особенно если присутствуют всякие блоки инициализаций пакетов/конструкторы объектных типов и т.д.

В общем, тут без тест кейса далеко не уедешь
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / apex listener и компиляция объектов БД / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]