1

bsddb.db.DBInvalidArgError: (22, '无效参数 -- /dbs/supermodels.db: 意外的文件类型或格式')

此错误是由不兼容的 BDB 版本(1.85 或 3+)造成的吗?如果是这样,我如何检查版本、排除故障并解决此错误?

4

1 回答 1

1

是的,这当然可能是由于 db 文件的旧版本造成的,但如果您发布生成此异常的代码和完整的回溯,它会有所帮助。

如果没有这个,你确定你打开的数据库文件是正确的类型吗?例如,尝试像打开哈希一样打开 btree 文件会引发您看到的异常:

>>> import bsddb
>>> bt = bsddb.btopen('bt')
>>> bt.close()
>>> bsddb.hashopen('bt')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib/python2.4/bsddb/__init__.py", line 298, in hashopen
    d.open(file, db.DB_HASH, flags, mode)
bsddb.db.DBInvalidArgError: (22, 'Invalid argument -- ./bt: unexpected file type or format')

在 *nix 中,您通常可以使用file命令确定 db 的类型,例如

$ file /etc/aliases.db cert8.db 
/etc/aliases.db: Berkeley DB (Hash, version 8, native byte-order)
cert8.db:        Berkeley DB 1.85 (Hash, version 2, native byte-order)

打开一个 1.85 版本的文件失败,同样的例外:

>>> db = bsddb.hashopen('/etc/aliases.db')    # works, but...
>>> db = bsddb.hashopen('cert8.db')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib/python2.4/bsddb/__init__.py", line 298, in hashopen
    d.open(file, db.DB_HASH, flags, mode)
bsddb.db.DBInvalidArgError: (22, 'Invalid argument -- ./cert8.db: unexpected file type or format')

如果您需要迁移数据库文件,您应该查看bdb 发行版附带的db_dump,db_dump185和实用程序。db_load

于 2009-08-27T02:00:50.937 回答