Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
CURRENT TIMESTAMP в UDF
|
|||
|---|---|---|---|
|
#18+
Добрый день, коллеги. Быть может, кто-то сталкивался с проблемой : есть sql user defined function UDF1, возвращаюшая таблицу. Функция вызывает sql stored procedure PROC1, которая оперирует переменными timestamp, получая значения из регистра CURRENT TIMESTAMP. Проблема заключается в том, что в процедуре PROC1 значение CURRENT TIMESTAMP не меняется в ходе выполнения при вызове из функции UDF1 и прекрасно меняется при вызове процедуры PROC1 напрямую. Есть ли метод обойти это наследование c помощью настроек БД или DDL UDF1 или PROC1 ? Приложение, к сожалению, не может вызвать PROC1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 09:58 |
|
||
|
CURRENT TIMESTAMP в UDF
|
|||
|---|---|---|---|
|
#18+
aserdjuk, Добрый день. Вроде изменяется... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Если хочется, чтобы всегда изменялось, используйте вместо current timestamp: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 11:41 |
|
||
|
CURRENT TIMESTAMP в UDF
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, большое спасибо, помогло и отпустило. Дабы не затевать новую тему, спрошу тут. Есть проблема в нескольких разновидных приложений, вызывающих процедуру P1. Процедура пишет данные в таблицу и ждет ответа от обработчика. Обработчик (бин на WAS 8) вызывает select field from table( UDF1() ); получая записи для обработки, обрабатывает их и записывает результат в ту же таблицу. Т.к. требования к скорости достаточно жесткие, пытаюсь минимизировать таймауты этой конструкции. UDF1 оптимизирована, данные партиционированы и т.д. Уменьшение интервала сканирования обработчикам нагружает cpu&io, убивает event monitoring. Пробовал dbms_alert и dbms_pipe, но время между send и receive у них порядка 500-700 мс. Пробовал soap wrapper, дополнительные расходы около 1 секунды. Нет ли еще какой-либо альтернативы для быстрого обмена между различными приложениями с помощью функций и процедур в db2 9.7FP8 @aix ? Исключить общение приложений через db2, к сожалению, не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 12:16 |
|
||
|
CURRENT TIMESTAMP в UDF
|
|||
|---|---|---|---|
|
#18+
aserdjuk, А почему бы не кидать нотификации через те же пайпы/другие средства IPC, используя DB2 как брокер (списки подписчиков, прочая информация). Нет возможности заморачиваться всем этим в приложении, писать соответствующие внешние ф-и/процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 14:16 |
|
||
|
CURRENT TIMESTAMP в UDF
|
|||
|---|---|---|---|
|
#18+
aserdjukИсключить общение приложений через db2, к сожалению, не получится. Тут бы подробнее в чем именно "затык" и какое ПО доступно для использования. Можно конечно поиграться с блокировкой/разблокировкой пустой отдельной таблицы, когда факт разблокировки будет служить сигналом начало обработки, но это криво по сути. Откуда растет требование синхронизации действий приложений через СУБД? Можно например написать хранимую (java), которая будет "дергать" EJB/MDB-компонент на WAS и возвращать результаты. Можно из DB2 общаться с IBM WebSphere MQ, можно дергать сервис через SOAP и получать ответ. Желательно видеть постановку задачи более полно, чтобы сформулировать варианты решения. И понимать что в этой постановке можно менять, а что трудно и/или невозможно. Если будет понятен "поток" обработки, т.е. кто кому и что передает, и в какой последовательности обрабатывает, можно будет что-то предложить по вариантам реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 14:42 |
|
||
|
CURRENT TIMESTAMP в UDF
|
|||
|---|---|---|---|
|
#18+
Евгений Хабаров, CawaSPb Трудностей только три, два лиричных и одна практическая : проект большой и команда инерционна, приоритетами является функциональное развитие, а не технологическое усовершенствование, несколько legacy потребителей, которые, в силу своего возраста, знать ничего не знают об mq, soap и rmi. Пока, насколько понимаю, самый практичный вариант это замена SQL процедур и функций на JAVA. Для вызова WAS с db2 понадобится WAS client ? http://pic.dhe.ibm.com/infocenter/pim/v6r0m0/index.jsp?topic=/com.ibm.wpc.ins.doc/wpc_tsk_setting_up_ibm_db2_on_the_app_server.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 16:58 |
|
||
|
CURRENT TIMESTAMP в UDF
|
|||
|---|---|---|---|
|
#18+
aserdjukЕвгений Хабаров, CawaSPb Трудностей только три, два лиричных и одна практическая : проект большой и команда инерционна, приоритетами является функциональное развитие, а не технологическое усовершенствование, несколько legacy потребителей, которые, в силу своего возраста, знать ничего не знают об mq, soap и rmi. Пока, насколько понимаю, самый практичный вариант это замена SQL процедур и функций на JAVA. Для вызова WAS с db2 понадобится WAS client ? http://pic.dhe.ibm.com/infocenter/pim/v6r0m0/index.jsp?topic=/com.ibm.wpc.ins.doc/wpc_tsk_setting_up_ibm_db2_on_the_app_server.html Вариантов много. Попытаюсь изложить то, что навскидку пришло в голову. Основная идея ( с учетом того, что поток обработки я пока не представляю) чтобы доступ к WAS(EJB) шел по более-менее короткому пути. Т.е. вызываем процедуру и передаем ей (или формируем внутри нее) выборку, подлежащую обработке. После чего этот массив данных неким образом (скорее всего как XML) передается на обработку серверу приложений (WAS) Суть хранимой: - Сформировать выборку и представить ее в виде XML. По сути это один или несколько SQL-запросов. - Вызвать EJB-компонент или веб-сервис и получить от него ответ. - Разобрать ответный XML-документ и выполнить модификацию таблиц. Варианты: 1. Если рядом есть сервер WebSphere MQ, то задействовать MQSeries routines . Отправка асинхронная, прием без ожидания. Нужно будет разобраться с настройкой тракта передачи и форматом сообщений. Для приема на стороне WAS достаточно написать весьма несложный MDB, который будет слушать очередь и принимать сообщения. Если рядом MQ нет, можно написать хранимую на Java и использовать Thin Client for JMS для доступа к встроенной службе сообщений WAS. Это все в случае, если нужна асинхронная обработка. Т.е. в этом случае отправка запроса и чтение ответа "распадаются" на разные транзакции. Со стороны DB2 - нужна настройка для взаимодействия с MQ штатных хранимых/функций, или написание собственной хранимой/функции. Со стороны WAS - написание компонент(ы) отвечающей за прием и обработку сообщений. 2. Если есть лицензия на IBM InfoSphere Federation Server, можно задействовать Web service consumer functions со стороны СУБД и дописать/оформить EJB для работы в качестве веб-сервиса. Со стороны DB2 в этом случае настройка минимальна, со стороны WAS - реализация веб-сервиса. Если лицензии нет, то написать Java-хранимую, которая будет обращаться к веб-сервису. Тут даже тонкий клиент может не понадобиться, тк функционал для работы с веб-сервисами разных стандартов либо встроен в JDK (зависит от версии JDK), либо доступен в виде внешних библиотек. Можно задействовать и тонкие клиенты для WAS для JAX-WS и JAX-RPC. Со стороны DB2 в этом случае ннаписать хранимую/функцию, со стороны WAS - реализация веб-сервиса. 3. Можно задействовать Thin Client for EJB для прямого обращения к EJB. Со стороны СУБД - хранимая на Java. Со стороны WAS - возможно ничего. 4. Можно со стороны WAS написать простейший сервлет (который, возможно, вызывает EJB), который будет принимать на входе например JSON (или XML) и на выход аналогично отдавать JSON или XML. На самом деле реализовать веб-сервис (в современных условиях) почти не сложнее, чем сервлет. Посмотрите в сторону JAX-RS. Так что этот пункт считать не рекомендуемым, а просто как доп. вариант. Надеюсь, что схема взаимодействия компонент в существующем виде есть? И чего хочется достичь тоже есть? В графическом представлении рисовать и анализировать потоки обработки информации все же удобнее. Если нет, рекомендую такую схему нарисовать (для себя и коллег), возможно обнаружатся другие варианты(точки) взаимодействия. PS: Это все, что могу придумать навскидку. До понедельника я буду далеко от интернета, поэтому дискуссию смогу продолжить только в понедельник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 22:47 |
|
||
|
CURRENT TIMESTAMP в UDF
|
|||
|---|---|---|---|
|
#18+
Евгений Хабаров 3. Можно задействовать Thin Client for EJB для прямого обращения к EJB. Со стороны СУБД - хранимая на Java. Со стороны WAS - возможно ничего. Спасибо большое ! П.3. я как раз и реализовывал как самый логичный. Схем, графов и прочих накладных расходов у нас много :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 11:05 |
|
||
|
CURRENT TIMESTAMP в UDF
|
|||
|---|---|---|---|
|
#18+
Кстати, посмотрел исходный текст syscat.routines для WAITONE из DBMS_. Тоже самое цикличное сканирование таблицы SYSTOOLS.DBMS_ALERT_INF с поеданием cpu & io. Только, в отличии от меня, PREPARE стоит в цикле :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 13:39 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=38223098&tid=1601462]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 155ms |

| 0 / 0 |
