powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DOA Много потоков External exception EBF00BAA
25 сообщений из 36, страница 1 из 2
DOA Много потоков External exception EBF00BAA
    #39604536
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Delphi 10.2 DOA 4.1.3 OracleInstantClient 12_2
Создаю 1, 2, 5, 15 или 20 потоков для записи данных в БД. В кажом потоке создаются свои OracleSession и OracleQuery. Все работает хорошо. При увеличении количества потоков МОЖЕТ происходить External exception EBF00BAA. Не всегда и не во всех потоках.
На форумах DOA пишут, что для недопущении этой ошибки нужно OracleSession.ThreadSafe:=True И да, это помогает, НО
разработчики DOA говорят, что если сессия в отдельном потоке, то OracleSession.ThreadSafe:=True ставить не нужно .
Можно было бы конечно оставить OracleSession.ThreadSafe:=True , но из-за этой опции немного снижается производительность.
А мне это критично.
Подскажите, может кто-то сталкивался с таким поведением?
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604554
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

а что для тебя критичнее - стабильность или более быстрая работа, но с External exception и вероятностью крэша приложения?
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604608
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2, для меня важнее стабильность, но хочется полной ясности почему так происходит
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604757
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb OracleSession.ThreadSafe:=True И да, это помогает, НО
разработчики DOA говорят, что если сессия в отдельном потоке, то OracleSession.ThreadSafe:=True ставить не нужно Наверно, это они так планировали, а на деле заюзали какую-то глобальную переменную или еще что.
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604816
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock, Вот пытаюсь в исходниках найти это место. Думал, может уже кто-то нашел
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604824
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

OraSession создается в конструкторе потока или в Execute? Попробуйте перенести в Execute
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604893
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, В конструкторе. В Execute попробовать можно, но не слишком ли много накладных расходов?
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604927
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbне слишком ли много накладных расходов?Каких?

У Вас объект создается в одном потоке, а используется в другом

И, я надеюсь, Вы ему никакого Owner не передаете?
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604937
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, Вы имеете не мой цикл while not Terminated do в методе Execute, а один раз в начале Execute? Если так, то ошибка остается.
А если создавать session + query перед каждым выполнением запроса, то расходы на создание, а потом и на очищение этих объектов будут
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604938
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, никаких Owner'ов нет
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604943
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если создавать и удалять при каждом выполнении - ошибка остается
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604949
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cptngrb,

Не очень понятно, что конкретно вызывает External Exception: DOA, OracleClient или сервер. Нельзя ли подключить исходники DOA в режиме отладки и выяснить какой модуль вызывает исключение?

Есть ли ограничение у сервера Oracle на количество одновременных сессий?
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604953
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конструктор потока
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
oraSession := TOracleSession.Create(nil);
  oraSession.LogonUsername := AUser;
  oraSession.LogonPassword := APasswd;
  oraSession.LogonDatabase := AConnectionString;
  oraSession.ThreadSafe := False;
  oraSession.LogOn;

  OracleQuery:= TOracleQuery.create(nil);
  OracleQuery.Session:=oraSession;
  OracleQuery.DeleteVariables;
  OracleQuery.sql.Text:='хранимая процедура'
  OracleQuery.DeclareVariable('param1', otInteger);
  OracleQuery.DeclareVariable('param2', otDate);
  OracleQuery.DimPLSQLTable('param2', size_, 0);
  OracleQuery.DeclareVariable('param3', otDate);
  OracleQuery.DimPLSQLTable('param3', size_, 0);
  OracleQuery.DeclareVariable('param4', otString);
  OracleQuery.DimPLSQLTable('param4', size_, 10);



Выполнение запроса в Execute потока:

Код: pascal
1.
2.
3.
4.
5.
6.
OracleQuery.close;
  OracleQuery.SetVariable('param1', cnt);
  OracleQuery.SetVariable('param2', varP2);
  OracleQuery.SetVariable('param3', varP3);
  OracleQuery.SetVariable('param4', varP4);
  OracleQuery.Execute

;
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604956
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbКонструктор потока
Код: pascal
1.
oraSession.LogOn;


Хотя бы подключение перенес в Execute, не говоря о создании объектов. Это же долгая операция, зачем один поток должен все их делать.
cptngrb_Vasilisk_, Вы имеете не мой цикл while not Terminated do в методе Execute, а один раз в начале Execute?
Конечно же, он имел ввиду это.
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604957
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbYuRock, Вот пытаюсь в исходниках найти это место
Ищи, на что влияет ThreadSafe (впрочем, это тебе и так понятно, но мне больше нечего предложить, у меня и DOA нет).
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604962
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cptngrb,

В каком месте вызывается External Exception : в конструкторе или в Execute? Поставь try except блок в каждой процедуре. После того как выделишь процедуру, выясни на какой конкретной строке в процедуре вылетает.

Подозреваю, что либо на LogOn либо на Query.Execute.
А может данные некорректны?
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604963
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock, Я не понимаю разницы между созданием объектов в конструкторе потока или Execute? Долго, медленно, на что это может повлиять?
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604964
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belotsky Serge, Ошибка вылетает на OracleQuery.Execute. Все операции обернуты в try/except и ведется лог ошибок
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604965
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbYuRock, Я не понимаю разницы между созданием объектов в конструкторе потока или Execute?
"в конструкторе" отрабатывает в потоке, который создает объект нового потока.
"Execute" - это уже в новом потоке.
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604967
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbДолго, медленно, на что это может повлиять?
На время работы - это однозначно.
А еще - мало ли. Может, там какой-то threadvar используется - в этом случае при создании в одном потоке будет использована одна переменная, а при обращении из другого - другая. Это может быть важно. Но вообще это вряд ли, конечно.
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39604974
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тааааак. Перенес в блок Execute создание объектов. Ошибка начала появляется иногда и на LogOn. Теперь есть куда копать
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39605054
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbОшибка начала появляется иногда и на LogOnТогда вот этомуcptngrbразработчики DOA говорят, что если сессия в отдельном потоке, то OracleSession.ThreadSafe:=True ставить не нужно .верить не стоит. Ошибка вываливается при обращении к клиентской библиотеке в другом потоке. Раньше у Вас это был только Execute, а теперь и LogOn добавился
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39605286
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
верить может и не стоить, но по крайней мере в процедуре LogOn они не виноваты. В клиентская библиотеке не потокобезопасна OCISessionBegin (в этом месте плавающая ошибка).
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39605326
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, как они не виноваты (DOA), когда от ThreadSafe зависит в каком режиме будет работать OCI.dll.
Всем спасибо за внимание. Вопрос закрыт.
...
Рейтинг: 0 / 0
DOA Много потоков External exception EBF00BAA
    #39614628
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думал, думал и решил провести тесты на 32-разрядной версиях oci.dll и DOA, так как старшие товарищи сказали, что все у них работает хорошо и вообще... оказались правы. Подобной ошибки не наблюдалось. Ошибка только в 64-разрядах.
Если кому-нибудь удалось побороть, то прошу отозваться
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DOA Много потоков External exception EBF00BAA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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