使用gbak和fix_fss_data的Firebird 2.5数据库还原返回格式错误的字符串



我有一个旧数据库,我想把它转换成Firebird 2.5。当恢复包含blob文本字段的表上的数据时,出现了一个问题;gbak:错误:格式不正确的字符串gbak:检测到无效数据">

执行的步骤:

  1. gfix-用户SYSDBA-密码主密钥f:\dbb.db-关闭-强制0
  2. gfix-v-完整用户SYSDBA-密码主密钥f:\dbb.db
  3. gbak-v-t-g-ig-user SYSDBA-Y F:\backup.log-password"万能钥匙";f: \dbb.db f:\db1.db
  4. gbak-r-v-o-p 16384-Y F:\log.txt-用户SYSDBA-密码主密钥";f: \dbb1.db"quot;f: \new.db&quot-fix_fss_data win1251-rep

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

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

步骤:

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

遇到的错误";格式不正确的字符串"。

发生错误的所有表都有一个类型为"0"的字段;BLOB SUB_ TYPE 1区段大小80";

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

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

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

-FIX_FSS_D[ATA]

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

以下情况下不需要此开关和以下开关正常情况下。但是,如果恢复操作失败"格式错误的字符串";错误,从gbak输出的消息将引用用户使用其中一个或两个开关来修复格式错误的UNICODE_FSS数据或元数据。

-FIX_FSS_M[ETADATA]

此开关强制gbak在恢复

在正常情况下。但是,如果恢复操作失败"格式错误的字符串";错误,从gbak输出的消息将引用用户使用其中一个或两个开关来修复格式错误的UNICODE_FSS数据或元数据。

firebird gbak实用程序链接

即使听起来很愚蠢,我也用这种方式修复了它:

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

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

在末尾使用-fix_fss_metadata WIN1252。这帮我解决了这个问题。

例如:

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

最新更新