如何修复Firebird错误事务计数超出

时间:2019-05-21 13:23:31

标签: firebird

我有一个Firebird应用程序,该应用程序提供的Firebird错误事务计数已超过。

我们如何解决此错误?

1 个答案:

答案 0 :(得分:0)

此错误的完整错误消息是“超出了实施限制-事务数超过了。执行备份和还原以使数据库再次可操作” 。正如该错误所暗示的那样,您需要备份然后还原数据库。

在Firebird 2.5及更低版本中,最大交易数量为(接近)2 31 -1,对于Firebird 3及更高版本,最大交易数量为2 48 。一旦达到此限制,数据库对于所有意图和目的都是只读的。

要重置事务计数,您需要使用gbak备份数据库,并使用适当的数据库所有者用户(或可能的SYSDBA)来还原它。为此,您需要执行以下步骤:

  • 使用SYSDBA或数据库所有者用户将gfix标记为显式只读数据库:

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

    这是必需的,因为gbak需要启动事务,并且在不再可能的read_write模式下(在read_only模式下,事务将“重用”最后提交的事务用于只读操作)。

  • 使用SYSDBA或数据库所有者用户使用gbak备份数据库:

    gbak -user <user> -password <password> -backup <databasename> <backupfilename>
    
  • 将现有数据库文件<databasename>重命名为其他名称以进行保管。您可以在确认还原正常并且新数据库可用之后将其删除。

  • 使用应该是数据库所有者的适当用户来还原数据库:

    gbak -user <user> -password <password> -create <backupfilename> <databasename>
    
  • 使用SYSDBA或数据库所有者用户的gfix将数据库再次标记为可写:

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