火鸟数据库升级
Firebird database upgrade
我们公司在其产品中使用 Firebird 数据库已经 4 到 5 年了。在此之前,我们一直在使用 Interbases 数据库。最近有新需求,需要启用unicode字符集(目前我们使用的是字符集'NONE')。在调查这个问题后,我发现解决方案需要升级数据库文件的 ODS(磁盘结构)二进制格式作为步骤之一。我读过推荐的解决方案是使用 gbak 实用程序备份然后恢复数据库。这有一个问题。在 original manual 到 Firebird 中写着:
The backup should be taken using the gbak utility supplied by the old
ODS version of InterBase or Firebird. The restore should be carried
out using gbak from the newer version of Firebird.
这是个问题,因为我正在开发的产品已经开发了 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 数据库似乎可行,但它会使备份在 Firebird 2.5 上无法恢复,因为旧的 gbak 不知道他们需要跳过 RDB$ADMIN
角色.在还原到 Firebird 2.5 时,这会导致尝试插入重复的角色,这将破坏还原。
但是,当您将数据库更改为使用 UTF-8 时,您可能需要考虑使用正确的字符集重新创建数据库,并将数据(通过适当的字符集转换)从旧数据库传输到新.
我们公司在其产品中使用 Firebird 数据库已经 4 到 5 年了。在此之前,我们一直在使用 Interbases 数据库。最近有新需求,需要启用unicode字符集(目前我们使用的是字符集'NONE')。在调查这个问题后,我发现解决方案需要升级数据库文件的 ODS(磁盘结构)二进制格式作为步骤之一。我读过推荐的解决方案是使用 gbak 实用程序备份然后恢复数据库。这有一个问题。在 original manual 到 Firebird 中写着:
The backup should be taken using the gbak utility supplied by the old ODS version of InterBase or Firebird. The restore should be carried out using gbak from the newer version of Firebird.
这是个问题,因为我正在开发的产品已经开发了 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 数据库似乎可行,但它会使备份在 Firebird 2.5 上无法恢复,因为旧的 gbak 不知道他们需要跳过 RDB$ADMIN
角色.在还原到 Firebird 2.5 时,这会导致尝试插入重复的角色,这将破坏还原。
但是,当您将数据库更改为使用 UTF-8 时,您可能需要考虑使用正确的字符集重新创建数据库,并将数据(通过适当的字符集转换)从旧数据库传输到新.