Pergunta

bsddb.db.dbinvalidargerror: (22, 'argumento inválido - /dbs/supermodels.db: tipo de arquivo inesperado ou formato')

Esse erro é resultado de versões BDB incompatíveis (1,85 ou 3+)? Se sim, como faço para verificar as versões, disparar e resolver esse erro?

Foi útil?

Solução

Sim, isso certamente pode ser devido a versões mais antigas do arquivo DB, mas ajudaria se você postasse o código que gerou essa exceção e o rastreamento completo.

Na ausência disso, você tem certeza de que o arquivo de banco de dados que você está abrindo é do tipo correto? Por exemplo, tentar abrir um arquivo btree como se fosse um hash levanta a exceção que você está vendo:

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

Em *nix, você geralmente pode determinar o tipo de dB usando o file comando, por exemplo

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

Abrir um arquivo de versão 1.85 falha com a mesma exceção:

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

Se você precisar migrar os arquivos do banco de dados, você deve olhar para o db_dump, db_dump185 e db_load Utilitários que acompanham a distribuição BDB.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top