我有一个旧数据库,我想将其转换为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迁移这个问题很常见。
有人知道如何解决这个问题吗?
答案 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 适当的数据或元数据。
答案 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