|
|
|
FireDAC. Обрыв Firebird 3 Embedded-соединения после 60 секунд после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Похоже, что FireDAC разрывает соединение с Firebird 3 в Embedded-режиме, если была выполнена хранимая процедура с выражением on external. Удалось сделать "минимальный" пример. Что я сделал: 1. Скачал Firebird-3.0.7.33374-1_Win32.zip и распаковал 2. Через isql cоздал пароль для SYSDBA, создал пользователя TUSER, создал от его имени 2 базы. команды создания баз create database "C:\Work\FiredacBug\TESTDB1.FDB" user TUSER password 'test'; commit; create database "C:\Work\FiredacBug\TESTDB2.FDB" user TUSER password 'test'; commit; 3. Настроил databases.conf. databases.conf TESTDB1=C:\Work\FiredacBug\TESTDB1.FDB TESTDB2=C:\Work\FiredacBug\TESTDB2.FDB 4. Настроил firebird.conf для работы в Embedded. firebird.conf Providers = Engine12 ServerMode = SuperClassic 5. Создал хранимую процедуру (через isql, от пользователя TUSER) в TESTDB1, которая обращается к TESTDB2. команда создания ХП Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. select * from test_proc; отрабатывает как положено - возвращает 1. 6. Создал копию fbclient.dll, назвал fbembed.dll - такую библиотеку будет искать реальный клиент (раньше работал с FB 2.5). Подготовка завершена, теперь сам пример. 7. Создаю новый проект в Delphi, компиляция - в папку в распакованным Firebird. Кидаю на форму TFDConnection, TFDPhysFBDriverLink, два TFDQuery и TButton. 8. Создаю обработчик - соединение с TESTDB1 и вызов test_proc. Button1Click Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Пока все хорошо - соединение создается, единичка возвращается. 7. Добавляю любой другой запрос к TESTDB1 (FDQuery2) в цикле. По наблюдениям в программе разрыв происходит не сразу, так что выполняю запросы с интервалом в 1 секунду. Button1Click Код: pascal 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. 33. 34. 35. 8. Получаю shutdown connection по истечении 60-ти секунд. В call stack что-то странное - падает на TIBTransaction.StartTransaction в FireDAC.Phys.IBWrapper. При этом StartTransaction предыдущих 59-ти вызовов проходил успешно. Реальный пример гораздо сложнее, но смысл приблизительно такой же. Вопрос - я что-то в настройке Embedded-соединения сделал не так? Или в Embedded нельзя использовать on external? Или это баг в FireDAC? Проверял в Delphi 10.2.3 и Delphi 10.4.1 - поведение одинаковое. Папку с Firebird, базами и проектом выложил на Я.Диск: https://yadi.sk/d/Yydzw9AfSyWG9w ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2020, 21:38 |
|
||
|
FireDAC. Обрыв Firebird 3 Embedded-соединения после 60 секунд после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
nicholaos, А что если промоделировать ситуацию в IBExpert/isql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2020, 22:42 |
|
||
|
FireDAC. Обрыв Firebird 3 Embedded-соединения после 60 секунд после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
nicholaosСоздал копию fbclient.dll, назвал fbembed.dll - такую библиотеку будет искать реальный клиент (раньше работал с FB 2.5). С тройкой так делать нельзя. Поменяй имя библиотеки в ДАКе. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2020, 22:55 |
|
||
|
FireDAC. Обрыв Firebird 3 Embedded-соединения после 60 секунд после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Шавлюк Евгений, не воспроизводится. Насколько я знаю, IBExpert использует FIB, а не FireDAC. Я тестировал еще компоненты IB (переименовывал в ibtogo.dll) - на них ошибки нет. Dimitry Sibiryakov, В RN написано, что переименовывать не нужно, а не нельзя. Но да - если заменить название библиотеки на fbclient.dll, то ошибки не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2020, 23:22 |
|
||
|
FireDAC. Обрыв Firebird 3 Embedded-соединения после 60 секунд после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Хм, немного не так. Переименовать fbclient с удалением исходного файла нельзя - тогда коннект вообще не создается. А вот переименовать копию и оставить fbclient вроде таки можно. Да и работает везде кроме этой комбинации - FireDAC + ХП с on external. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2020, 23:46 |
|
||
|
FireDAC. Обрыв Firebird 3 Embedded-соединения после 60 секунд после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Попробуй со свежим снапшотом. Что-то в этой области правилось недавно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 01:26 |
|
||
|
FireDAC. Обрыв Firebird 3 Embedded-соединения после 60 секунд после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
nicholaos, в 3.0 для embedded не надо ничего переименовывать. И вообще, наоборот - в 2.5 fbembed.dll надо было переименовывать в fbclient. Потому что это были 2 разные либы, и в fbembed.dll был и клиент и сервер, а по умолчанию программы использовали даже не fbclient.dll, а чаще gds32.dll. А в 3.0 в fbclient никакого сервера нет, поэтому переименовывать ее в fbembed бессмыслено. nicholaosесли заменить название библиотеки на fbclient.dll, то ошибки не будет. так что, проблема решена? p.s. вообще проверять сначала надо на обычном сервере. А уже потом пробовать embedded. И в 3.0 для этого, в общем-то, надо только вырубить сервер и указать fbclient.dll из корня установки сервера. Ну и чтобы в данном случае битность сервера соответствовала битности приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 02:22 |
|
||
|
FireDAC. Обрыв Firebird 3 Embedded-соединения после 60 секунд после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Проверил последние снапшоты Firebird-3.0.8.33398 и Firebird-4.0.0.2290 - поведение такое же. kdv nicholaos, так что, проблема решена? Да. Нужно будет только найти все обращения к fbembed.dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 12:30 |
|
||
|
FireDAC. Обрыв Firebird 3 Embedded-соединения после 60 секунд после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
nicholaosПроверил последние снапшоты Firebird-3.0.8.33398 и Firebird-4.0.0.2290 - поведение такое же. Значит пиши в трекер, мол "переименованный fbclient.dll выгружает не свои провайдеры". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 13:10 |
|
||
|
FireDAC. Обрыв Firebird 3 Embedded-соединения после 60 секунд после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Я до сих пор виню FireDAC, а не Firebird. Тот же пример с другими компонентами-то не падает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 13:48 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40025016&tid=2037801]: |
0ms |
get settings: |
14ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 353ms |

| 0 / 0 |
