1

我有一个旧数据库,我想将其转换为 Firebird 2.5。在包含众所周知的问题“gbak:错误:格式错误的字符串 gbak:检测到无效数据”的表上还原包含 blob 文本字段的数据时会出现问题

执行的步骤:

  1. gfix -user SYSDBA -password masterkey f:\dbb.db -shut -force 0
  2. gfix -v -full -user SYSDBA -password masterkey f:\dbb.db
  3. gbak -v -t -g -ig -user SYSDBA -YF:\backup.log -password "masterkey" f:\dbb.db F:\dbb1.db
  4. gbak -r -v -o -p 16384 -YF:\log.txt -user SYSDBA -password masterkey "f:\dbb1.db" "f:\new.db" -fix_fss_data win1251 -rep

用 win1252,utf8 或 unicode_fss 替换字符集并不能解决问题。

我还尝试使用 InterBase Data Pump 3.4 版迁移数据。

脚步:

  1. 备份元表
  2. 在新数据库上恢复元表
  3. 使用 InterBase 数据泵迁移数据

遇到错误“格式错误的字符串”。

所有发生错误的表都有一个类型为“BLOB SUB_TYPE 1 SEGMENT SIZE 80”的字段

我怀疑一开始数据库的字符集是 WIN1252。之后,有人将字符集更改为 UTF8,并将字符集和整理的所有字段定义从 WIN1252 更改为 UTF8。否则我不明白为什么会收到这些格式错误的字符串错误。另外,我知道这个问题在 FireBird 2.0 到 FireBird 2.5 的迁移中很常见。

有人知道如何解决这个问题吗?

4

3 回答 3

5

格式错误的字符串错误可能来自数据,您可以使用开关 -fix_fss_d 更正此错误,但它也可能来自元数据,您必须使用开关 -fix_fss_m

-FIX_FSS_D[ATA]

此开关强制 gbak 在还原期间修复格式错误的 UNICODE_FSS 字符数据。

在正常情况下,不应需要此开关以及以下开关。但是,如果还原操作因“格式错误的字符串”错误而失败,则 gbak 的消息输出将引导用户使用这些开关中的一个或两个,以适当地修复格式错误的 UNICODE_FSS 数据或元数据。

-FIX_FSS_M[ETADATA]

此开关强制 gbak 在还原期间修复格式错误的 UNICODE_FSS 元数据。

在正常情况下,不应需要此开关和前一个开关。但是,如果还原操作因“格式错误的字符串”错误而失败,则 gbak 的消息输出将引导用户使用这些开关中的一个或两个,以适当地修复格式错误的 UNICODE_FSS 数据或元数据。

链接到firebird gbak 实用程序

于 2012-11-27T20:28:42.593 回答
2

即使听起来很愚蠢,我也是这样修复的:

备份元表
创建还原到新数据库文件
使用 IBExpert 从旧表中提取数据到脚本
中 运行脚本以将数据添加到新数据库

-fix_fss_D 或 fix_fss_m 与不同字符集的组合都没有将所有数据导入新数据库。尝试了所有免费和共享软件工具,但没有结果。

于 2012-11-28T16:10:25.770 回答
2

最后使用 -fix_fss_metadata WIN1252。这有助于我解决这个问题。

例如:

gbak -c -r -v -user SYSDBA -password masterkey C:\backup\Example.bkp C:\TEST7.fdb -fix_fss_metadata WIN1252

于 2019-08-05T10:47:42.330 回答