@Nday001

Как перенести БД Firebird на другой диск (симлинк)?

Есть машина на 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) проиходят события на скриншоте, сама попытка бекапа завершается ошибкой "файл занят другим процессом"

5e7a246a13f5d641315958.png

При попытке сделать бекап этой же БД по символьной ссылке, бекап создается успешно.

Подозреваю, что это связано с тем, что Firebird считает БД и символьную ссылку на БД разными базами данных
  • Вопрос задан
  • 546 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы