Как исправить ошибку Firebird Превышено количество транзакций - PullRequest
0 голосов
/ 21 мая 2019

У меня есть приложение Firebird, которое выдает ошибку Firebird Превышено число транзакций.

Как мы можем исправить эту ошибку?

1 Ответ

0 голосов
/ 22 мая 2019

Полное сообщение об ошибке этой ошибки: «Превышен предел реализации - превышено число транзакций. Выполните резервное копирование и восстановление, чтобы база данных снова стала работоспособной» . И, как следует из этой ошибки, вам нужно сделать резервную копию, а затем восстановить базу данных.

В Firebird 2.5 и ниже максимальное количество транзакций составляет (около) 2 31 - 1, для Firebird 3 и выше - 2 48 . Как только этот предел достигнут, база данных для всех намерений и целей доступна только для чтения.

Чтобы сбросить количество транзакций, вам необходимо сделать резервную копию базы данных с помощью gbak и восстановить ее, используя соответствующего пользователя-владельца базы данных (или, возможно, SYSDBA). Для этого вам необходимо выполнить следующие шаги:

  • Пометить базу данных только для чтения с помощью gfix , используя SYSDBA или пользователя владельца базы данных:

    gfix -user <user> -password <password> -mode read_only <databasename>
    

    Это необходимо, поскольку gbak требуется запустить транзакцию, а в режиме read_write это больше невозможно (в режиме read_only транзакции будут «повторно использовать» последнюю зафиксированную транзакцию для операций только для чтения).

  • Сделайте резервную копию вашей базы данных с помощью gbak , используя SYSDBA или пользователя владельца базы данных:

    gbak -user <user> -password <password> -backup <databasename> <backupfilename>
    
  • Переименуйте существующий файл базы данных <databasename> во что-то другое для сохранности. Вы можете удалить его после того, как убедитесь, что восстановление прошло успешно и новая база данных пригодна для использования.

  • Восстановите базу данных с соответствующим пользователем, который должен быть владельцем базы данных:

    gbak -user <user> -password <password> -create <backupfilename> <databasename>
    
  • Пометить базу данных как доступную для записи снова с помощью gfix, используя SYSDBA или пользователя владельца базы данных:

    gfix -user <user> -password <password> -mode read_write <databasename>
    
...