![]() |
|
Модераторы: LSD |
![]()
|
|
| Dimich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 25.8.2004 Где: Брянск Репутация: 3 Всего: 7 |
Такая вот ситуация: В БД на Oracle есть хранимая процедура, которая выполняет очень длительную работу. Для индикации хода процесса я завел отдельную табличку Indicator и по ходу работы процедуры делаю update indicator и commit. Тут все работает нормально.
Далее в прикладной программе я по таймеру делаю select from indicator и вывожу данные в виде ProgressBar. Работает нормально. Но если я в этой программе создаю отдельный поток и в нем запускаю ту самую хранимую процедуру, то пока она выполняется select from indicator тормозится до ее завершения. В программе я соединяюсь с БД из разных сессий (OraSession1 для select from indicator и OraSession2 для запуска хранимой процедуры). Использую ODAC. Может что не так делаю? Дайте хоть совет! --------------------
Не работает - исправь, работает - не трогай!!! |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
А если попробовать из 2-х разных сессий в SQL+, результат какой?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Dimich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 25.8.2004 Где: Брянск Репутация: 3 Всего: 7 |
А если во время работы процедуры делать select from indicator в SQL+, то все нормально выбирается и результат получаем правильный. Делал даже другую программу, которая смотрит табличку Indicator, тоже нормально работает....
А вот в рамках одной программы такая бяка получается............ тормозится select! --------------------
Не работает - исправь, работает - не трогай!!! |
|||
|
||||
| Dimich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 25.8.2004 Где: Брянск Репутация: 3 Всего: 7 |
Вот одного понять не могу: почему из разных приложений мои select и exec myproc проходят одновременно, а в рамках одного (но в разных потоках и разных сессиях) никак! Может это я что-то делаю не так?
--------------------
Не работает - исправь, работает - не трогай!!! |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 1 Всего: 118 |
У тебя основной поток вызывает эту до-о-о-о-олгую процедуру ? Если да - то ее вызов надо вынести в другой поток.
|
|||
|
||||
| Dimich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 25.8.2004 Где: Брянск Репутация: 3 Всего: 7 |
Нет, долгая процедура вызывается из отдельного потока (не основного). Вот я думаю, может select from indicator перенести из таймера в отдельный поток.... Хотя какая разница?
--------------------
Не работает - исправь, работает - не трогай!!! |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Попробуй:
по идее ты должен сразу вывалиться (по моему даже с ошибкой). Если нет значит проблема не в сервере, а в клиенте, скорее всего используется некий пул соединений, который твои потоки и делят. Можно попробовать в другом потоке соединяться от имени другого пользователя. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Dimich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 25.8.2004 Где: Брянск Репутация: 3 Всего: 7 |
select * from indicator nowait - так не проходит. Кажется такая конструкция не поддерживается Ораклом....
Уже думаю бросить эту затею и exec и select вообще зазнести по разным приложениям и связать приложения. Хотя все же интересно, почему так происходит? Ведь разные сессии же? Если докапаюсь, то напишу обязательно! --------------------
Не работает - исправь, работает - не трогай!!! |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Так должно работать.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Dimich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 25.8.2004 Где: Брянск Репутация: 3 Всего: 7 |
Нашел я наконец решение этой проблемы (весь отпуск думал)... Просто компоненты ODACа, которыми я пользуюсь из потока надо в этом потоке и создавать динамически (TOraSession, TOraStoredProc, TOraQuery, TOraDataSource). Тогда все работает нормально. А я до этого пытался все это сделать в дизайне! Все оказывается просто! Но спасибо Вам за помощь, это Вы меня на это натолкнули!
--------------------
Не работает - исправь, работает - не трогай!!! |
|||
|
||||
![]()
|
| Правила форума "Oracle" | |
|
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Oracle | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |