RavenDB数据库还原:操作失败:无法访问文件,该文件已锁定或正在使用

RavenDB数据库还原:操作失败:无法访问文件,该文件已锁定或正在使用,ravendb,Ravendb,一年前,当我们开始使用RavenDB时,我们很快在生产中遇到了这个错误: 操作失败:无法访问文件,文件已锁定或正在使用 我们通过一些论坛发现,我们可以通过不将RavenDB作为IIS网站运行,而是作为一项服务来解决这个问题。我们做到了,再也没有看到错误 直到现在:我正在建立一个新的环境,我想,我会尝试一下在IIS上运行RavenDB,但是错误很快又出现了 事实和我的尝试: 在商业许可证上运行v.30155 使用自定义应用程序池(称为RavenApplicationPool) 将数据文件夹与II

一年前,当我们开始使用RavenDB时,我们很快在生产中遇到了这个错误:

操作失败:无法访问文件,文件已锁定或正在使用

我们通过一些论坛发现,我们可以通过不将RavenDB作为IIS网站运行,而是作为一项服务来解决这个问题。我们做到了,再也没有看到错误

直到现在:我正在建立一个新的环境,我想,我会尝试一下在IIS上运行RavenDB,但是错误很快又出现了

事实和我的尝试:

  • 在商业许可证上运行v.30155
  • 使用自定义应用程序池(称为RavenApplicationPool)
  • 将数据文件夹与IIS目录分开(通过
    Raven/WorkingDir
    AppSetting)
  • RavenApplicationPool用户对IIS文件夹和数据文件夹都具有“完全控制”权限
  • 已为网站安装并启用Windows身份验证
  • 用于应用程序池
  • 未安装webdav发布(根据中的要求)
  • 敲我的键盘(运气不好)
当站点运行几分钟后,错误会随机发生。尝试使用以下命令还原备份时也会发生此情况:

C:\RavenDBExecutables\Server\raven.Server.exe--restore source=C:\SOME\u PATH\my-db-backup.raven--restore database name=my db--restore database=

(RavenDBExecutables文件夹只是二进制文件/可执行文件等的压缩包-它与IIS网站文件夹不重叠)

运行还原时,将创建以下文件夹:

  • IndexDefinitions(包含许多以.index结尾的文件)
  • 索引(具有整数名称的大量文件夹)
  • 日志(空)
  • 系统(空)
  • 温度(空)
  • 根文件夹(my db)为空,即没有数据文件、.resource.database或raven-Data.ico与工作数据库一样
导入失败后,如果我访问,我将获得

*很多行,比如“将路径\复制到\索引\文件”*

“Esent还原:失败!无法还原数据库!”, Microsoft.Isam.Esent.Interop.EsentFileAccessDeniedException:无法访问文件,该文件已锁定或正在使用中\r\n Microsoft.Isam.Esent.Interop.Api.Check(Int32 err)\r\n位于 Microsoft.Isam.Esent.Interop.Api.JetRestoreInstance(JET_实例 实例、字符串源、字符串目标、JET_PFNSTATUS 状态回调)\r\n位于 Raven.Database.Storage.Esent.Backup.RestoreOperation.Execute()“, 无法还原数据库无法访问文件,文件已锁定或正在使用


那么会是什么呢?

发生这种情况的原因是IIS默认情况下进行重叠回收。 这意味着两个版本的应用程序都在运行(并且都试图使用相同的资源)。 如果将“重叠回收”设置为false,则不应发生这种情况。
当用户将两个数据库设置为同一路径时,我们也看到了类似的错误。出现这种情况的原因是IIS默认情况下是重叠回收的。 这意味着两个版本的应用程序都在运行(并且都试图使用相同的资源)。 如果将“重叠回收”设置为false,则不应发生这种情况。
当用户将两个数据库设置为同一路径时,我们也看到了类似的错误

Hi Ayende,正如我所写的,我已经禁用了重叠回收(实际上,安装程序在创建应用程序池时已经为我完成了)。不幸的是,在这种情况下,这不是我的解决方案。嗨,Ayende,正如我所写的,我已经禁用了重叠回收(实际上,安装程序在创建应用程序池时为我做了)。不幸的是,在这种情况下,这不是我的解决方案。请检查您的系统事件日志,我昨晚实际上发生了此错误,结果表明应用程序池没有访问数据目录的权限。请检查您的系统事件日志,事实上,就在昨晚,我遇到了这个错误,结果证明应用程序池没有访问数据目录的权限。