如何在只读文件系统中使用UpscaleDB事务?
背景
我用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() // <-- 抛出 "failed with OS status 5 (Access is denied.)"
根据文档,存在一个用于只读事务的标志Upscaledb.UpsConst.UPS_TXN_READ_ONLY,但使用它并未改变现状。
另外我注意到,传入f的所有读取操作都能正常执行,调试时可以看到从数据库文件中读取到了正确的数据。
问题
是否可以在只读文件系统中使用UpscaleDB事务?或者我只能重写系统以移除事务?
内容的提问来源于stack exchange,提问作者LA.27
相关产品推荐
相关产品推荐

