我有一个旧数据库,我想把它转换成Firebird 2.5。当恢复包含blob文本字段的表上的数据时,出现了一个问题;gbak:错误:格式不正确的字符串gbak:检测到无效数据">
执行的步骤:
- gfix-用户SYSDBA-密码主密钥f:\dbb.db-关闭-强制0
- gfix-v-完整用户SYSDBA-密码主密钥f:\dbb.db
- gbak-v-t-g-ig-user SYSDBA-Y F:\backup.log-password"万能钥匙";f: \dbb.db f:\db1.db
- gbak-r-v-o-p 16384-Y F:\log.txt-用户SYSDBA-密码主密钥";f: \dbb1.db"quot;f: \new.db"-fix_fss_data win1251-rep
用win1252、utf8或unicode_fss替换字符集并不能解决问题。
我还尝试使用InterBase data Pump版本3.4迁移数据。
步骤:
- 备份元表
- 在新数据库上恢复元表
- 使用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