|
|
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
Приложение на Delphi 10.2 (64bit) использует Firebird embedded (3.0+) в качестве базы данных. Используется компонента TFDIBBackup для создания бекапа (Пробовал также TFDFBNBackup - у нее формат файлов другой, но проблема ровно та же). Проблема: ровно через минуту после успешного создания бекапа (База небольшая и бекап занимает секунду, файл тоже корректный и его можно скормить процедуре восстановления БД) в файле firebird.log каталога приложения появляется строка "Shutting down the server with 1 active connection(s) to 1 database(s), 0 active service(s)", после чего любое действие в приложении вызывает ошибку "Database shutdown". Со стороны приложения (Если ничего не делать) в этот момент никаких ошибок не возникает, Connection активен. Connection и не закрываю при создании Backup. Пытаюсь понять: это глюк компоненты бекапа, или это какая-то хитрая механика Firebird (хотя зачем делать shutdown после backup - ума не приложу). Проблема №2 здесь же - без fbclient.dll программа просто не работает, пишет что-то про инициализацию engine12. Бекап-компонента же для работы в Embedded режиме требует, чтобы VendorLib назывался fbembed.dll. Две одинаковые ДЛЛ-ки - не то, чтобы мешает, но сам факт странный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 10:55 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
Nick74Бекап-компонента же для работы в Embedded режиме требует я не силен в FireDAC, но вообще-то компоненты не могут "требовать" чего-то там в отношении Embedded, потому что у Firebird режим Embedded обеспечивается самим сервером. Приложение понятия не имеет, embedded это или нет, разница только в строке коннекта. А строка коннекта компонентам тоже до лампочки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 11:17 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
kdv, "требуют" в смысле не работают, если указать fbclient.dll. Ошибка "Unable to complete network request to host "xnet://Global\FIREBIRD" Подозреваю, что работает вот этот кусочек из TIBLib.GetLibraryInfo Код: pascal 1. 2. 3. 4. ну и далее в TIBService.Attach Код: pascal 1. 2. Значение галочки Embedded в DriverLink, я так понимаю, игнорируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 11:50 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
Nick74, господи, вот это ... шляпа. xnet:// это разумеется никакой не ембеддед, а локальный коннект к серверу через протокол xnet. Вообще, нахрена этот код - мне непонятно. У FB 1.5-2.5 fbembed.dll назывался клиент с вкомпилированным сервером. Имя было изменено только для того чтобы отличать обычный fbclient.dll от аналогичного fbclient.dll с вкомпилированным сервером. Никаких других отличий для приложения больше не было. У ФБ 3 embedded устроен по другому. там fbclient.dll в случае embedded-коннекта (без имени сервера) сам подгружает engine12.dll, т.е. движок сервера. Соответственно, переименования клиентской либы не только не нужны (они никогда и не были нужны), но и наоборот, "ломают систему". В общем оба эти куска надо переделывать. Вопрос, зачем FireDAC-у вообще проперть FEmbedded. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 12:16 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
где же господин Арефьев? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 12:55 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
kdv Nick74, господи, вот это ... шляпа. xnet:// 'xnet://Global\FIREBIRD' - это стандартная подстановка FireDAC'а, когда он не понимает чего от него хотят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 14:13 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
kdv Вопрос, зачем FireDAC-у вообще проперть FEmbedded. Про последнее могу сказать - по последним изысканиям если не указать название ДЛЛ-ки вообще, то он сам подставляет fbclient, если нет галочки, и fbembed если есть. Но IBLib определяет "ембеднутость" исключительно по названию библиотеки, невзирая на галочку. Поэтому и fbclient с галочкой Embedded рассматривается все равно как не-embedded. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 14:41 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
Может у меня версия FireDac какая-то старая, проверьте плиз есть у вас вообще такое в FirуDAC.Phys.IBWrapper. Покупалось оно года 3 назад, надо отметить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 14:52 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
alekcvp'xnet://Global\FIREBIRD' - это стандартная подстановка FireDAC'а, когда он не понимает чего от него хотят. чего только люди не придумают... Строка коннекта в IB и FB должна содержать имя сервера, порт, или протокол, и полный путь к файлу БД с именем файла. То есть, ни в isc_attach_database, ни в attachDatabase OO API Firebird 3 нет никакого разделения строки коннекта на отдельные части. Всякие поля "протокол", "имя сервера", "имя БД"- это придумки авторов компонент и инструментов. Видимо, отсюда возникает идея "подстановок", хотя, неясно, с какого фига. Если я не указал имя сервера и протокол, почему в случае НЕэмбеддед должно быть xnet? А если я хочу embedded? Собственно, "оглашаю весь список": Connection Strings in Firebird 3 https://www.ibphoenix.com/files/ConnectionStrings_Fb3.pdf расписано всё, включая эмбеддед, шмембеддед и прочее. Причем, теоретически я бы понял этот xnet, в отношении людей, которые в среде Дельфи пытаются работать с Embedded (о геморройности чего я регулярно вещаю). Но ведь " Where embedded is not available, a hostless connection could be established using the Loopback provider, in which case full login credentials would need to be present. On Windows, the provider will try to use XNET (see below) to make the local connection and, failing that, a localhost connection via TCP/IP or, on Windows, via WNET (see below)." То есть, оно само, если embedded "недоступен". А если он должен быть, но недоступен, так зачем искривлять строку коннекта до xnet? Ну пытаюсь я голым fbclient.dll открыть базу "c:\dir\data.fdb". так я сам дурак, наверное. к чему сюда xnet-то лепить, "авось законнектится"??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 16:34 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
Nick74, я умолкаю, ждем или Арефьева или людей с кодом FireDac. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 18:02 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
Проверил на delphi 10.4 - с тех времен ничего не изменилось, ошибка та же. Выложил архив с проектом Delphi с примером ошибки. Запустить, подождать минуту до появления ошибки. Компилировалось под Delphi 10.4. Обвязка для Embedded клиента в каталоге win64/release взята из дистрибутива FB 3.0.7 База данных test.fdb там же - подойдет любая база, я взял security.fdb из дистрибутива FB, ничего мельче под рукой не нашлось. Exe-шник тоже прикладываю для тех, кому лень компилировать. Собственно всего текста программы меньше страницы. https://dropmefiles.com/n603T (Файл будет доступен 2 недели от текущего момента) P.S. Кстати, при компиляции под 10.4 отказался работать компонент TFDIBBackup с ошибкой Invalid clumped buffer structure, вроде бы даже нашел Work around от Арефьева про SizeOf(Byte), но в сорсах Firedac уже стоит SizeOf(Word), ну да не в этом суть, у меня все равно купленный 10.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2021, 18:45 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
Подтверждено, что проблема именно из-за двух разных DLL. Бекап-компоненты для работы в Embedded-режиме требуют fbembed.dll, а компоненты доступа - fbclient.dll. Если в TIBLib.GetLibraryInfo поправить Код: pascal 1. 2. 3. 4. на Код: pascal 1. 2. 3. 4. и вписать fbclient.dll в LibName в компоненте драйвера, то ошибка исчезает. Ну правда и компонента, подозреваю, не будет работать с полноценным сервером, но в Embedded режиме все работает без проблем. Корректное для всех случаев изменение оставляю авторам FD, ибо не очень понимаю как правильно получить свойство компоненты драйвера Embedded в TIBLib. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 14:07 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
Nick74, я уже предлагал посмотреть код FireDAC, на предмет "за каким" там вообще существует свойство FEmbedded. Напомню, что для клиентского приложения нет никакой разницы, embedded или нет, и какая архитектура на сервере - superserver, superclassic, или classic. Embedded начинает работать только тогда, когда строка коннекта к БД не содержит имени сервера. И никто не запрещал в 2.5 переименовать fbembed.dll в fbclient.dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2021, 16:56 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
kdv Nick74, я уже предлагал посмотреть код FireDAC, на предмет "за каким" там вообще существует свойство FEmbedded. Dmitry Arefiev Embedded=True - будет попытка загрузить fbembed.dll, потом fbclient.dll. Если False - в обратном порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2021, 21:51 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev Embedded=True - будет попытка загрузить fbembed.dll, потом fbclient.dll. Если False - в обратном порядке. Тогда он тем более не должен выставляться автоматически в каких-либо обработчиках, а только вручную, осознанно. Поставьте, наконец телегу и лошадь в нужном порядке. Причем все это для версии ниже тройки, в ней Embedded mode конфигурируется вообще снаружи (есть опыт с FireDAC). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2021, 00:00 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
alekcvpEmbedded=True - будет попытка загрузить fbembed.dll, потом fbclient.dll. Если False - в обратном порядке. это вообще чудовищная левизна. Которая к embedded не имеет никакого отношения. Допустим, у меня есть программа, которая работает И с ИБ, и с ФБ. И она должна искать gds32.dll или fbclient.dll. Что она еще должна пытаться искать fbembed.dll я просто не смог додуматься. Просто потому что я в курсе, почему эти dll имеют такие названия. Поскольку переход с 2.5 на 3.0 уже явно происходит, этот ахтунг надо срочно убирать. Либо, НИКОГДА не включать это самое свойство Embedded в FireDAC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2021, 16:54 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
kdv Допустим, у меня есть программа, которая работает И с ИБ, и с ФБ. И она должна искать gds32.dll или fbclient.dll. Это свойства линка для FB, для IB там другой линк, насколько я понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2021, 17:14 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
kdv Либо, НИКОГДА не включать это самое свойство Embedded в FireDAC. Если Embedded=false, то компонента дописывает xnet://... к пути, и без установленного полноценного сервера FB бекап в этом случае выдает ошибку. Вернее не так, Embedded линка действительно влияет только на имя библиотеки. Но для TIBLib есть свой собственный FEmbedded, который не связан с Embedded линка и определяется исключительно по названию библиотеки. И если использовать fbclient, то бекап не работает без сервера. А если не использовать, то бекап работает. Но через минуту глушит коннект к базе данных. Текст ошибки и фрагменты сорс кода см. ранее в топике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2021, 14:46 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
18.02.2021 14:46, Nick74 пишет: > Если Embedded=false, то компонента дописывает xnet://... к пути, и без установленного полноценного сервера FB бекап в этом случае выдает ошибку. > Вернее не так, Embedded линка действительно влияет только на имя библиотеки. Но для TIBLib есть свой собственный FEmbedded, который не связан с Embedded линка и определяется исключительно по названию библиотеки. И если использовать fbclient, то бекап не работает без сервера. ну и на кой черт вам эта контуженная прокладка в лице FireDAC? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2021, 14:55 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
она бесплатная и отлично работает под андроид, чего не скажешь по unidac ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2021, 15:37 |
|
||
|
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
|
|||
|---|---|---|---|
|
#18+
энди она бесплатная и отлично работает под андроид, чего не скажешь по unidac ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2021, 15:58 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40038775&tid=2037606]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
137ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 470ms |

| 0 / 0 |
