使用gbak和fix_fss_data恢复FireBird 2.5数据库返回格式错误的字符串

时间:2012-11-27 17:22:53

标签: firebird firebird2.5

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

执行的步骤:

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 -Y F:\ backup.log -password" masterkey" f:\ dbb.db F:\ dbb1.db
4)gbak -r -v -o -p 16384 -Y F:\ 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)备份metatable
2)在新数据库上恢复元数据 3)使用InterBase Data Pump

迁移数据

遇到错误"格式错误的字符串"。

发生错误的所有表格都有一个类型为&#34的字段; BLOB SUB_TYPE 1 SEGMENT SIZE 80"

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

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

3 个答案:

答案 0 :(得分:5)

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

  

-FIX_FSS_D [ATA]

     

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

     

不应要求此开关和以下开关   正常情况。但是,如果还原操作失败了   “格式错误的字符串”错误,从gbak输出的消息将引用   用户到这些交换机中的一个或两个以修复格式错误的UNICODE_FSS   适当的数据或元数据。

     

-FIX_FSS_M [ETADATA]

     

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

     

不应要求此开关和前一个开关   正常情况。但是,如果还原操作失败了   “格式错误的字符串”错误,从gbak输出的消息将引用   用户到这些交换机中的一个或两个以修复格式错误的UNICODE_FSS   适当的数据或元数据。

链接到firebird gbak utility

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

最后使用-fix_fss_metadata WIN1252。这可以帮助我解决此问题。

例如:

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