gpt4 book ai didi

超过Firebird交易计数

转载 作者:行者123 更新时间:2023-12-04 03:27:27 27 4
gpt4 key购买 nike

我们有一个运行Firebird数据库的实现,在该错误中:

“超出了实现限制-超出了事务计数。执行备份和还原以使数据库再次可操作。”

我们知道如何通过使数据库为只读,执行备份和还原并使其再次变为读写来解决此问题,但是我们不太确定是什么原因造成的。我感觉交易限制在十亿(?)以内。

有人可以确认吗?预防这种情况的正确方法是什么?

最佳答案

Firebird具有以带符号的32位整数形式(用于2.5及更早版本)的单调递增的事务计数器。因此,事务数限制为+/- 231-1。在Firebird 3中,交易ID已更改为无符号的48位整数(因此限制为248),并且在将来的AFAIK中有扩展为64位整数的空间。

使用gbak执行备份和还原时,将重置事务计数器。可以随时执行此操作,但是当实际达到限制时,需要将数据库标记为只读,因为在只读数据库中,数据库的“最后一个”事务标识用于新事务,而不是分配新的事务。交易编号。

Firebird是MVCC(多版本并发控制)数据库,这意味着它可以维护记录的多个版本。这些记录版本标记有创建该版本的事务的ID。在进行备份和还原时,仅备份最新版本,在还原时,这些记录版本的事务ID较低(可能为1)。

由于基于隔离级别,事务开始的时间等其他事务的记录版本的可见性,因此仅重置事务计数器是不可能的(或至少:具有很多复杂性)。例如,具有可重复读取的事务只能看到记录由事务启动时提交的事务创建的版本。由事件事务或事务开始后提交的事务创建的记录版本不可见。

除了在达到事务限制之前进行常规备份和实际还原之外,没有其他方法可以防止这种情况发生(因为这也会重置事务ID)。

关于超过Firebird交易计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22984231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com