Есть машина на Windows 10 Pro 32бита, сервер СУБД Firebird 2.5 SuperServer 32 бита и несколько баз данных. Базы данных разбросаны по диску E:\ с именами файлов типа "DBBALBLABLA123.FDB"
Задача: перенести файлы баз данных *.FDB в C:\databases\AmirsDB\*.FDB и дать нормальные имена файлам. Все должно пройти прозрачно для пользователей.
Сделал следующее:
1. переместил БД DBBALBLABLA123.FDB в C:\databases\AmirsDB\a76MS0045.FDB.
2. Создал симлинк (через mklink) на файл в старом расположении БД на новое расположение.
В начале все было хорошо и работало. Затем начал замечать такую закономерность: через некоторое время не получается открыть файл базы данных через gbak или ibexpert (и при локальном подключении и при сетевом подключении к localhost). Выдают ошибку "Файл занят другим процессом". При этом, ПО, для которого эта база предназначена работает с ней исправно.
Перезапуск службы Firebird временно помогает, gbak и ibexpert к БД подключаются.
Понимаю, что симлинки не лучшая идея, но других вариантов сделать все прозрачно для пользователей не вижу.
Пытаюсь проанализировать через Process Monitor с фильтром по имени базы данных. После попытки сделать бекап через gbak (gbak -g -b -v C:\databases\AmirsDB\a76MS0045.FDB C:\databases\AmirsDB\a76MS0045.fbk) проиходят события на скриншоте, сама попытка бекапа завершается ошибкой "файл занят другим процессом"
При попытке сделать бекап этой же БД по символьной ссылке, бекап создается успешно.
Подозреваю, что это связано с тем, что Firebird считает БД и символьную ссылку на БД разными базами данных