首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Berkeley DB SIGBUS错误

Berkeley DB SIGBUS错误
EN

Stack Overflow用户
提问于 2012-05-09 16:51:43
回答 1查看 110关注 0票数 0

我有以下创建Berkeley DB环境的程序。

代码语言:javascript
复制
#include <db.h>
#include <stdio.h>

int main()
{
DB_ENV *env=NULL;
DB* m_db=NULL;

if(db_env_create(&env,0)==-1) printf("fail create\n");
env->set_lk_max_locks(env, 100000);
env->set_lk_max_lockers(env, 100000);
env->set_lk_max_objects(env, 100000);

if(env->open(env,"/tmp/cc", DB_INIT_MPOOL | DB_INIT_CDB, 0)!=0) 
{
    printf("No env, creating one\n");
    if(env->open(env, "/tmp/cc", DB_CREATE | DB_INIT_MPOOL | DB_INIT_CDB, 0) == -1)
        printf("Failed creating env\n");
}

env->close(env,0);  

return 0;
}

如果您删除/tmp/cc/__db.002文件(这是Berkeley DB创建的索引之一),然后重新运行该程序,它将在打开环境时获得SIGBUS (尝试映射一个不存在的文件)。有没有办法使用他们的API来避免这种情况,或者这是一个bug?

EN

回答 1

Stack Overflow用户

发布于 2012-07-08 00:40:07

florinp,我想这是Berkeley DB的bug。在继续之前,它真的应该检查环境中的文件是否都完好无损。

当然,对于像这样被丢弃的CDP数据库,除了删除它并重新开始之外,您无能为力。如果这是您必须处理的常见故障类型,您可以使用shell脚本包装您的程序,该脚本查找退出状态135,然后访问旧数据库并重新启动程序……但这可能会有风险,这取决于您的应用程序。

您还可以移动到事务性数据存储。这将为您提供更多的恢复选项,并可能减少SIGBUSes。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10512746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档