[英]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.