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')

file*nix では、通常、次のコマンドを使用して 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_dumpdb_dump185およびユーティリティを参照してください。db_load

于 2009-08-27T02:00:50.937 に答える