Ответ 1
Firebird имеет монотонно увеличивающийся счетчик транзакций в виде подписанного 32-битного целого числа (для 2.5 и более ранних). Таким образом, количество транзакций ограничено +/- 2 31 -1. В Firebird 3 идентификатор транзакции был изменен на неподписанное 48-битное целое число (поэтому предел равен 2 48), с возможностью расширения до 64-битных целых чисел в будущем AFAIK.
Счетчик транзакций reset при выполнении резервного копирования и восстановления с помощью gbak
. Это можно сделать в любое время, но когда предел действительно достигнут, он требует маркировки базы данных только для чтения, потому что в базе данных только для чтения "последний" идентификатор транзакции базы данных используется для новых транзакций вместо выделения нового идентификатор транзакции.
Firebird - это база данных MVCC (Multi Version Concurrency Control), что означает, что она поддерживает несколько версий записи. Эти версии записей отмечены идентификатором транзакции, создавшей эту версию. При резервном копировании и восстановлении сохраняются только последние версии и восстанавливаются эти версии записей с низким идентификатором транзакции (вероятно, 1).
Сброс счетчика транзакций невозможен (или, по крайней мере, имеет множество осложнений) из-за видимости версий записей для других транзакций на основе уровня изоляции, времени начала транзакции и т.д. Например, транзакция с повторяемым чтением могут видеть только версии записей, созданные транзакциями, которые были совершены в момент начала транзакции. Рекордные версии, созданные активными транзакциями или транзакциями, которые были совершены после начала транзакции, невидимы.
Невозможно предотвратить это, за исключением регулярного резервного копирования и фактического восстановления до достижения предела транзакции (как это будет reset идентификатор транзакции).