سؤال

bsddb.db.dbinvalidargerrgerror: (22، 'وسيطة غير صالحة - /dbs/supermodels.db: نوع الملف غير متوقع أو تنسيق ")

هل هذا الخطأ نتيجة إصدارات BDB غير متوافقة (1.85 أو 3+)؟ إذا كان الأمر كذلك، كيف يمكنني التحقق من الإصدارات، وإطلاق النار على مشكلة وحل هذا الخطأ؟

هل كانت مفيدة؟

المحلول

نعم، هذا بالتأكيد يمكن أن يكون بسبب الإصدارات القديمة من ملف 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، يمكنك عادة تحديد نوع DB باستخدام file القيادة، على سبيل المثال

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

إذا كنت بحاجة إلى ترحيل ملفات قاعدة البيانات، فيجب عليك أن تنظر إلى db_dump, db_dump185 و db_load المرافق التي تأتي مع distribition BDB.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top