Страница 1 из 1

Обновление метаданных, wait и nowait транзакции

Добавлено: 13.06.2022 17:26:00
rusmikle
Всем доброго времени суток,

при работе с таблицами с большим количеством данных иногда возникает ситуация что после интенсивного изменения данных возникает необходимость таблицу удалить. Если транзакция nowait то firebird может вывалить (а может и не вывалить) ошибку lock конфликта при обновлении метаданных. Выход использовать wait транзакцию. Но не во всех фреймворках можно поменять тип транзакции (в данном случае у клиента рукописный свой фреймворк, лезть в который и что то менять себе дороже).
Вопрос, можно как то запросом выяснить что таблица уже освободилась и возможно обновление метаданных или её удаление. Сразу оговорюсь что сие происходит при миграции данных из одной версии в другую, поэтому конкурирующих соединений нет.

Спасибо.

Re: Обновление метаданных, wait и nowait транзакции

Добавлено: 14.06.2022 22:03:40
admin
сие происходит при миграции данных из одной версии в другую
А о каких именно версиях речь ?

http://www.ibase.ru/ibtrans

Re: Обновление метаданных, wait и nowait транзакции

Добавлено: 14.06.2022 23:51:45
rusmikle
версии имеются ввиду самой программы. А FB версии 3 и выше.

Re: Обновление метаданных, wait и nowait транзакции

Добавлено: 15.06.2022 06:34:04
fraks
Если конкурирующих коннектов нет, операция редкая, а фреймворк сам себе на уме, то я бы просто сделал реконнект.

А исходно проблема, вероятно, в таком:
- ходим по собственным ногам. В приложении есть какие-то активные транзакции которые смотрели ту таблицу, и соответственно, хотят продолжать ее видеть.
- после удаления большого количества данных запускается сборка мусора, которая и блокирует удаление таблицы.

В обоих случаях должен помочь реконнект.

Re: Обновление метаданных, wait и nowait транзакции

Добавлено: 15.06.2022 10:12:10
rusmikle
можно конечно пересоединиться, но хотелось бы штатное решение найти. Может кто подскажет. Имя таблиц которые могут проблему устроить известно.