繁体   English   中英

在只读文件系统中使用 UpscaleDB 事务

[英]Using UpscaleDB transactions in read-only file system

背景

我有一个使用 C# 和UpscaleDB编写的应用程序。 它按预期工作,但是最近我决定将存储数据库文件的网络驱动器设为只读。

对于我的应用程序,这应该无关紧要,因为它只从 UpscaleDB 文件中读取数据。 但是,我开始failed with OS status 5 (Access is denied.)

我的代码

我使用以下代码打开*.hdb文件:

var env = new Upscaledb.Environment();
var file = IO.Path.Combine(path, "data.hdb");
if (IO.File.Exists(file))
{
  let flags = Upscaledb.UpsConst.UPS_ENABLE_TRANSACTIONS;
  env.Open(file, flags);
}

我发现在此处添加标志Upscaledb.UpsConst.UPS_READ_ONLY帮助,但是在尝试使用事务系统时出现异常(这部分代码实际上使用 F#):

use txn = this.Env.Begin()
let rslt = f(txn)
txn.Commit() // <-- throws "failed with OS status 5 (Access is denied.)"

根据文档,有一个标志Upscaledb.UpsConst.UPS_TXN_READ_ONLY用于只读事务,但使用它不会带来任何变化。

此外,我注意到作为f参数提供的任何读取操作都可以正常执行。 在调试时,我可以看到从 DB 文件中读取了正确的数据。

问题

有没有办法将 UpscaleDB 与只读文件系统中的事务一起使用? 或者也许对我来说唯一的方法是重写我的系统以删除交易?

根据文档,启用事务也会自动启用日记功能。

我发现禁用它(通过设置UPS_DISABLE_RECOVERY标志)可以解决我的问题。 就我而言,我很乐意接受权衡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM