在Python中打开Berkeley DB的问题
我在用Python打开一个berkeley数据库时遇到了问题,这个数据库是通过bdtables这个库来访问的,所以我需要它能正常工作。
问题似乎出在我想打开的数据库环境上,我手上有一个数据库的副本,它的版本是4.4,而我用的libdb版本是4.6。我在使用bsddb.dbtables.bsdTableDB([dbname],[folder])时遇到了以下错误:
(-30972, "DB_VERSION_MISMATCH: Database environment version mismatch -- Program version 4.6 doesn't match environment version 4.4")
不过,使用bsddb.btopen([dbname])是可以成功的。
我还尝试安装了db4.4-util、db4.5-util和db4.6-util。使用db4.6_verify时出现了:
db4.6_verify: Program version 4.6 doesn't match environment version 4.4
db4.6_verify: DB_ENV->open: DB_VERSION_MISMATCH: Database environment version mismatchs
而使用db4.4_verify时,电脑就卡住了,什么都没有反应。
最后,如果我在数据库上运行db4.4_recover,这个操作是成功的。但是,之后在Python中却出现了'没有这样的文件或目录'的错误。
2 个回答
真是的,经过验证这个问题中的所有内容,我最终解决了这个问题。出现“No such file or directory”(没有这样的文件或目录)是因为缺少一些 __db.XXX 文件。使用 bsddb.dbtables.bsdTableDB([dbname],[folder], create=1) 在运行 db4.4_recover 之后,这些文件被创建了,现在一切都正常了。
不过,这个问题有点晦涩,最开始很难搞明白。但是多亏了一个问题《从命令行检查 Berkeley DB 文件》,我得到了我需要的工具。我把这个分享在这里,以防将来有其他人遇到同样的问题,能在 stackoverflow.com 找到这个信息。
我觉得答案应该放在“答案”部分,而不是作为问题的附加内容,因为这样可以在各种问题列表页面上标记这个问题已经有了答案。我会帮你这样做,但如果你也有时间去做的话,给我的答案留个评论,这样我就可以把它删掉。
引用“问题中的答案”:
经过验证这个问题中的所有内容,我最终解决了这个问题。出现“No such file or directory”的错误是因为缺少一些__db.XXX文件。使用
bsddb.dbtables.bsdTableDB([dbname],[folder], create=1)
在运行db4.4_recover之后,这些文件被创建了,现在一切都正常了。
不过,这个问题有点晦涩,最开始很难弄明白。但是多亏了这个问题 Examining Berkeley DB files from the CLI,我得到了所需的工具。我把这个分享在这里,以防将来有人遇到同样的问题,能在stackoverflow.com找到。