Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Индикатор длительной работы, Oracle & ODAC 
:(
    Опции темы
Dimich
Дата 8.9.2004, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Такая вот ситуация: В БД на Oracle есть хранимая процедура, которая выполняет очень длительную работу. Для индикации хода процесса я завел отдельную табличку Indicator и по ходу работы процедуры делаю update indicator и commit. Тут все работает нормально.
Далее в прикладной программе я по таймеру делаю select from indicator и вывожу данные в виде ProgressBar. Работает нормально. Но если я в этой программе создаю отдельный поток и в нем запускаю ту самую хранимую процедуру, то пока она выполняется select from indicator тормозится до ее завершения. В программе я соединяюсь с БД из разных сессий (OraSession1 для select from indicator и OraSession2 для запуска хранимой процедуры). Использую ODAC. Может что не так делаю? Дайте хоть совет!
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
LSD
Дата 8.9.2004, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
Dimich
Дата 8.9.2004, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



А если во время работы процедуры делать select from indicator в SQL+, то все нормально выбирается и результат получаем правильный. Делал даже другую программу, которая смотрит табличку Indicator, тоже нормально работает....
А вот в рамках одной программы такая бяка получается............ тормозится select!
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Dimich
Дата 9.9.2004, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Вот одного понять не могу: почему из разных приложений мои select и exec myproc проходят одновременно, а в рамках одного (но в разных потоках и разных сессиях) никак! Может это я что-то делаю не так?
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
AntonSaburov
Дата 9.9.2004, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 118



У тебя основной поток вызывает эту до-о-о-о-олгую процедуру ? Если да - то ее вызов надо вынести в другой поток.
PM MAIL WWW ICQ   Вверх
Dimich
Дата 9.9.2004, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Нет, долгая процедура вызывается из отдельного потока (не основного). Вот я думаю, может select from indicator перенести из таймера в отдельный поток.... Хотя какая разница?
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
LSD
Дата 9.9.2004, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Попробуй:
Код
select * from indicator nowait

по идее ты должен сразу вывалиться (по моему даже с ошибкой).
Если нет значит проблема не в сервере, а в клиенте, скорее всего используется некий пул соединений, который твои потоки и делят. Можно попробовать в другом потоке соединяться от имени другого пользователя.


--------------------
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.
PM MAIL WWW   Вверх
Dimich
Дата 10.9.2004, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



select * from indicator nowait - так не проходит. Кажется такая конструкция не поддерживается Ораклом....
Уже думаю бросить эту затею и exec и select вообще зазнести по разным приложениям и связать приложения. Хотя все же интересно, почему так происходит? Ведь разные сессии же? Если докапаюсь, то напишу обязательно!
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
LSD
Дата 10.9.2004, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Так должно работать.
Код
SELECT * FROM indicator FOR UPDATE NOWAIT



--------------------
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.
PM MAIL WWW   Вверх
Dimich
Дата 2.10.2004, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Нашел я наконец решение этой проблемы (весь отпуск думал)... Просто компоненты ODACа, которыми я пользуюсь из потока надо в этом потоке и создавать динамически (TOraSession, TOraStoredProc, TOraQuery, TOraDataSource). Тогда все работает нормально. А я до этого пытался все это сделать в дизайне! Все оказывается просто! Но спасибо Вам за помощь, это Вы меня на это натолкнули!
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.