Pregunta

bsddb.db.DBInvalidArgError: (22 'argumento no válido - /dbs/supermodels.db: tipo de archivo inesperado o formato')

¿Es este error resultado de versiones incompatibles BDB (1,85 o 3 +)? Si es así, ¿cómo puedo comprobar la versión, localizar averías y resolver este error?

¿Fue útil?

Solución

Sí, esto sin duda podría ser debido a las versiones anteriores del archivo db, pero que sería útil que usted fijó el código que genera esta excepción y la traza completa.

A falta de esto, ¿está seguro de que el archivo de base de datos que está abriendo es del tipo correcto? Por ejemplo, al intentar abrir un archivo árbolB como si se trata de un hash plantea la excepción de que está viendo:

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

En * nix normalmente puede determinar el tipo de db utilizando el comando file, por ejemplo.

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

La apertura de un archivo de versión 1.85 falla con la misma excepción:

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

Si es necesario migrar los archivos de base de datos, usted debe buscar en las utilidades db_dump, db_dump185 y db_load que vienen con el distribuition BdB.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top