首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法保持事务状态,因为缺少会话事务集合

无法保持事务状态,因为缺少会话事务集合
EN

Stack Overflow用户
提问于 2019-01-09 14:22:18
回答 1查看 501关注 0票数 1

我意外地从我的mongo db中删除了所有的数据库。然后,我尝试在新数据库中插入一个文档。它会抛出错误"Unable to persist state,因为缺少会话事务集合。这表明config.transactions集合已被手动删除。“

我的示例代码:

代码语言:javascript
运行
复制
doc_client = MongoClient(host=host,
                         port=port,
                         connect=True,  # Connect on first operation to avoid multi-threading related errors
                         j=True,  # Requests only return once write has hit the DB journal
                         )
print(doc_client.database_names()) # It works fine
doc_client['test'].insert({'a': 'ss'}) # Throws Error
EN

回答 1

Stack Overflow用户

发布于 2019-01-14 07:32:44

我意外地从我的mongo db中删除了所有数据库

很可能您还丢弃了config.transactions集合。这是一个供内部使用的集合,用于存储用于支持副本集和分片群集的retryable writes的记录。另请参见Config Databases

从MongoDB v3.6+开始,用户将无法从mongo外壳中删除副本集中的config数据库。尽管您使用v3.6之前的mongo shell进行连接,但仍然可以这样做,请确保将shell升级到与服务器版本相匹配。

“无法保持事务状态,因为缺少会话事务集合。这表示已手动删除config.transactions集合。”

您可以在主节点上手动重新创建集合:

代码语言:javascript
运行
复制
use config
db.createCollection("transactions");

或者,副本集选择也会自动重新创建它。这是因为config.transactions集合的创建是副本集节点的一部分。session_catalog_mongod.cpp#L156

在主服务器完成追赶阶段后,新的config.transactions集合将复制到辅助服务器。

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

https://stackoverflow.com/questions/54104289

复制
相关文章

相似问题

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