我们公司已经在其产品中使用Firebird数据库已有4 - 5年的时间。在此之前,我们一直在使用Interbases数据库。最近有新的要求需要启用unicode字符集(目前我们正在使用字符集' NONE')。在调查该问题后,我发现该解决方案需要作为升级ODS(磁盘结构)二进制格式的数据库文件的步骤之一。我已经读过,推荐的解决方案是使用gbak实用程序备份然后恢复数据库。这有一个问题。在original manual到Firebird中写道:
应使用旧版提供的gbak实用程序进行备份 InterBase或Firebird的ODS版本。恢复应该进行 使用较新版本的Firebird中的gbak。
这是问题,因为我正在开发的产品正在开发20年,我真的不能说出我们的客户正在使用的所有ODS版本。我是否应该遵循上述说明,这意味着我的升级实用程序应该具有从Interbase 1.0发布到目前为止所有可能的gbak实用程序版本。基于检测到的ODS版本(例如通过调用命令行实用程序" gstat"作为Firebird安装的一部分提供),我应该调用正确的gbak.exe文件。这对我来说似乎过于复杂。是否可以在备份和恢复阶段使用最新的gbak实用程序?我担心的是我在这个过程中犯了一个错误,数据将会丢失。因此,我不能仅依靠gbak实用程序进行备份,而是手动备份* .gdb文件。
答案 0 :(得分:5)
您应该能够使用当前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数据库似乎可行,但它会使备份在Firebird 2.5上无法恢复,因为较旧的gbaks不知道他们需要跳过RDB$ADMIN
角色。在还原到Firebird 2.5时,会导致尝试插入重复的角色,这会破坏恢复。
但是,当您将数据库更改为使用UTF-8时,您可能需要考虑使用正确的字符集重新创建数据库,并将数据(具有适当的字符集转换)从旧数据库抽取到新数据库。