在Python中打开Berkeley DB的问题

5 投票
2 回答
3031 浏览
提问于 2025-04-11 09:26

我在用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 个回答

0

真是的,经过验证这个问题中的所有内容,我最终解决了这个问题。出现“No such file or directory”(没有这样的文件或目录)是因为缺少一些 __db.XXX 文件。使用 bsddb.dbtables.bsdTableDB([dbname],[folder], create=1) 在运行 db4.4_recover 之后,这些文件被创建了,现在一切都正常了。

不过,这个问题有点晦涩,最开始很难搞明白。但是多亏了一个问题《从命令行检查 Berkeley DB 文件》,我得到了我需要的工具。我把这个分享在这里,以防将来有其他人遇到同样的问题,能在 stackoverflow.com 找到这个信息。

3

我觉得答案应该放在“答案”部分,而不是作为问题的附加内容,因为这样可以在各种问题列表页面上标记这个问题已经有了答案。我会帮你这样做,但如果你也有时间去做的话,给我的答案留个评论,这样我就可以把它删掉。

引用“问题中的答案”:

经过验证这个问题中的所有内容,我最终解决了这个问题。出现“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找到。

撰写回答