Доброго времени суток!
FB 2.0.1 CS, 1.5.4 CS
Обнаружил, что выполнение select-запроса в транзакции
consistency
exclusive,
похоже, ставит protected-блокировку на системные таблицы
и при попытке создания новой таблицы (в другой,
read committed,rec_version,nowait транзакции) получаем
unsuccessful metadata update
STORE RDB$FIELDS failed
lock conflict on no wait transaction
Это as designed и правиться не будет?
P.S.
Задача - импорт данных во вновь создаваемую таблицу
в монопольном режиме.
При старте клиент читает и пишет в журнал импорта в consistency-транзакции.
Это гарантирует, что второй экземпляр, будь он запущен, не сможет
помешать работе. Поскольку после создания требуемых таблиц снова
идет обращение к журналу импорта, не хотелось бы прерывать эту транзакцию.
Можно, конечно, реализовать флаг занятости на генераторе и проверять
его при старте клиента, но consistency-транзакция кажется мне более
элегантным решением. Можно использовать специальную таблицу (кстати,
rdb$database не подойдет? :) ) для этих целей, но не хочется умножать
сущности без необходимости.
Помнится, на ibase.ru была UDF, реализующая мьютексы, но это совсем
экстремальное решение.
С уважением, Евгений.