我们公司已经在其产品中使用Firebird数据库4至5年。在此之前,我们一直在使用Interbases数据库。最近,出现了一项新要求,要求启用Unicode字符集(当前,我们正在使用字符集“NONE”)。在调查了该问题之后,我发现该解决方案要求升级数据库文件的ODS(磁盘结构)二进制格式为步骤之一。我已经读过,推荐的解决方案是先备份,然后使用gbak实用程序还原数据库。这有一个问题。在Firebird的original manual中,写着:
这是个问题,因为我正在开发的产品已经开发了20年,我真的不能说我们的客户正在使用所有ODS版本。如果我遵循上述指示,这意味着我的升级实用程序应该具有从Interbase 1.0发行到现在的所有可能的gbak实用程序版本。基于检测到的ODS版本(例如,通过调用在Firebird安装过程中提供的命令行实用程序“gstat”),我应该调用正确的gbak.exe文件。对我来说,这似乎是过于复杂的解决方案。不能仅将最新的gbak实用程序用于备份和还原阶段吗?我担心的是在此过程中我在某个地方犯了错误,并且数据将丢失。因此,我不能仅依靠gbak实用程序进行备份,而要手动备份* .gdb文件。
最佳答案
您应该能够使用当前Firebird版本的gbak备份数据库,并使用要迁移到的Firebird版本的gbak进行还原。如果那是一个相同的版本,那没有问题。
专门使用用于创建ODS版本的Firebird或Interbase版本的gbak的说明通常是过大的,因为gbak可以理解较旧的格式。如果您的数据库在当前Firebird版本上运行良好,则应该可以使用该版本的gbak进行备份。据我所知,该指令的含义是您应该使用目标Firebird版本的gbak进行还原。
忽略某些边缘情况,通常在升级ODS时,它将在Firebird 2.5上运行。从Firebird 2.5迁移到Firebird 3时,您需要按照以下说明正确升级。
另外,在进行普通备份时,请确保使用正确的版本。例如,使用Firebird 2.1 gbak备份ODS 11.2/Firebird 2.5数据库似乎可以工作,但是由于旧的gbaks不知道它们需要跳过RDB$ADMIN
角色,因此备份将无法在Firebird 2.5上恢复。在还原到Firebird 2.5时,这会导致尝试插入重复角色,这将破坏还原。
但是,当您将数据库更改为使用UTF-8时,您可能需要考虑使用正确的字符集重新创建数据库,并将数据(具有适当的字符集转换)从旧数据库中抽取到新数据库中。
关于upgrade - 火鸟数据库升级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35621143/