powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
21 сообщений из 21, страница 1 из 1
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038591
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложение на 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. Две одинаковые ДЛЛ-ки - не то, чтобы мешает, но сам факт странный.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038603
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74Бекап-компонента же для работы в Embedded режиме требует
я не силен в FireDAC, но вообще-то компоненты не могут "требовать" чего-то там в отношении Embedded, потому что у Firebird режим Embedded обеспечивается самим сервером. Приложение понятия не имеет, embedded это или нет, разница только в строке коннекта. А строка коннекта компонентам тоже до лампочки.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038617
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,
"требуют" в смысле не работают, если указать fbclient.dll. Ошибка "Unable to complete network request to host "xnet://Global\FIREBIRD"

Подозреваю, что работает вот этот кусочек из TIBLib.GetLibraryInfo
Код: pascal
1.
2.
3.
4.
  if Pos('FIREBIRD', sProd) <> 0 then begin
    FBrand := ibFirebird;
    FEmbedded := Pos('embed', sLib) > 0;
  end


ну и далее в TIBService.Attach
Код: pascal
1.
2.
        if (Lib.Brand = ibFirebird) and (Lib.Version >= ivFB030000) and not Lib.FEmbedded then
          sProt := 'xnet://'


Значение галочки Embedded в DriverLink, я так понимаю, игнорируется.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038632
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74,

господи, вот это ... шляпа. xnet:// это разумеется никакой не ембеддед, а локальный коннект к серверу через протокол xnet.

Вообще, нахрена этот код - мне непонятно. У FB 1.5-2.5 fbembed.dll назывался клиент с вкомпилированным сервером. Имя было изменено только для того чтобы отличать обычный fbclient.dll от аналогичного fbclient.dll с вкомпилированным сервером.
Никаких других отличий для приложения больше не было.
У ФБ 3 embedded устроен по другому. там fbclient.dll в случае embedded-коннекта (без имени сервера) сам подгружает engine12.dll, т.е. движок сервера. Соответственно, переименования клиентской либы не только не нужны (они никогда и не были нужны), но и наоборот, "ломают систему".

В общем оба эти куска надо переделывать. Вопрос, зачем FireDAC-у вообще проперть FEmbedded.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038643
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где же господин Арефьев? :-)
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038680
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Nick74,
господи, вот это ... шляпа. xnet://

'xnet://Global\FIREBIRD' - это стандартная подстановка FireDAC'а, когда он не понимает чего от него хотят.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038693
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Вопрос, зачем FireDAC-у вообще проперть FEmbedded.

Про последнее могу сказать - по последним изысканиям если не указать название ДЛЛ-ки вообще, то он сам подставляет fbclient, если нет галочки, и fbembed если есть. Но IBLib определяет "ембеднутость" исключительно по названию библиотеки, невзирая на галочку. Поэтому и fbclient с галочкой Embedded рассматривается все равно как не-embedded.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038698
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может у меня версия FireDac какая-то старая, проверьте плиз есть у вас вообще такое в FirуDAC.Phys.IBWrapper.
Покупалось оно года 3 назад, надо отметить.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038740
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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-то лепить, "авось законнектится"???
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038761
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74,

я умолкаю, ждем или Арефьева или людей с кодом FireDac.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40038775
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил на 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
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40040876
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подтверждено, что проблема именно из-за двух разных DLL.
Бекап-компоненты для работы в Embedded-режиме требуют fbembed.dll, а компоненты доступа - fbclient.dll.
Если в TIBLib.GetLibraryInfo поправить
Код: pascal
1.
2.
3.
4.
  if Pos('FIREBIRD', sProd) <> 0 then begin
    FBrand := ibFirebird;
    FEmbedded := Pos('embed', sLib) > 0;
  end


на
Код: pascal
1.
2.
3.
4.
  if Pos('FIREBIRD', sProd) <> 0 then begin
    FBrand := ibFirebird;
    FEmbedded := true; //Pos('embed', sLib) > 0;
  end


и вписать fbclient.dll в LibName в компоненте драйвера, то ошибка исчезает.
Ну правда и компонента, подозреваю, не будет работать с полноценным сервером, но в Embedded режиме все работает без проблем.
Корректное для всех случаев изменение оставляю авторам FD, ибо не очень понимаю как правильно получить свойство компоненты драйвера Embedded в TIBLib.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40041719
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74,

я уже предлагал посмотреть код FireDAC, на предмет "за каким" там вообще существует свойство FEmbedded.
Напомню, что для клиентского приложения нет никакой разницы, embedded или нет, и какая архитектура на сервере - superserver, superclassic, или classic.
Embedded начинает работать только тогда, когда строка коннекта к БД не содержит имени сервера. И никто не запрещал в 2.5 переименовать fbembed.dll в fbclient.dll.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40041843
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Nick74,
я уже предлагал посмотреть код FireDAC, на предмет "за каким" там вообще существует свойство FEmbedded.
Dmitry Arefiev
Embedded=True - будет попытка загрузить fbembed.dll, потом fbclient.dll. Если False - в обратном порядке.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40041871
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
Embedded=True - будет попытка загрузить fbembed.dll, потом fbclient.dll. Если False - в обратном порядке.

Тогда он тем более не должен выставляться автоматически в каких-либо обработчиках, а только вручную, осознанно.
Поставьте, наконец телегу и лошадь в нужном порядке. Причем все это для версии ниже тройки, в ней Embedded mode конфигурируется вообще снаружи (есть опыт с FireDAC).
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40042247
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpEmbedded=True - будет попытка загрузить fbembed.dll, потом fbclient.dll. Если False - в обратном порядке.
это вообще чудовищная левизна. Которая к embedded не имеет никакого отношения.
Допустим, у меня есть программа, которая работает И с ИБ, и с ФБ. И она должна искать gds32.dll или fbclient.dll.
Что она еще должна пытаться искать fbembed.dll я просто не смог додуматься. Просто потому что я в курсе, почему эти dll имеют такие названия.
Поскольку переход с 2.5 на 3.0 уже явно происходит, этот ахтунг надо срочно убирать. Либо, НИКОГДА не включать это самое свойство Embedded в FireDAC.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40042259
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv

Допустим, у меня есть программа, которая работает И с ИБ, и с ФБ. И она должна искать gds32.dll или fbclient.dll.

Это свойства линка для FB, для IB там другой линк, насколько я понимаю.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40046703
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Либо, НИКОГДА не включать это самое свойство Embedded в FireDAC.

Если Embedded=false, то компонента дописывает xnet://... к пути, и без установленного полноценного сервера FB бекап в этом случае выдает ошибку.
Вернее не так, Embedded линка действительно влияет только на имя библиотеки. Но для TIBLib есть свой собственный FEmbedded, который не связан с Embedded линка и определяется исключительно по названию библиотеки. И если использовать fbclient, то бекап не работает без сервера. А если не использовать, то бекап работает. Но через минуту глушит коннект к базе данных.
Текст ошибки и фрагменты сорс кода см. ранее в топике.
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40046713
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18.02.2021 14:46, Nick74 пишет:
> Если Embedded=false, то компонента дописывает xnet://... к пути, и без установленного полноценного сервера FB бекап в этом случае выдает ошибку.
> Вернее не так, Embedded линка действительно влияет только на имя библиотеки. Но для TIBLib есть свой собственный FEmbedded, который не связан с Embedded линка и определяется исключительно по названию библиотеки. И если использовать fbclient, то бекап не работает без сервера.

ну и на кой черт вам эта контуженная прокладка в лице FireDAC?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40046746
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
она бесплатная и отлично работает под андроид, чего не скажешь по unidac
...
Рейтинг: 0 / 0
Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
    #40046759
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди
она бесплатная и отлично работает под андроид, чего не скажешь по unidac
Вам намекают, что нужно использовать родное API, а компоненты выкинуть. Для создание бэкапа нужно вызвать пару функций из fbclient
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблемы с использованием FireDAC - незапланированный Shutdown при Backup'е
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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