【问题标题】:RavenDB database restore: Operation failed: Cannot access file, the file is locked or in useRavenDB 数据库还原:操作失败:无法访问文件,文件被锁定或正在使用
【发布时间】:2016-09-21 00:31:55
【问题描述】:

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

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

我们通过一些论坛发现,我们可以通过不将 RavenDB 作为 IIS 网站运行,而是作为服务运行来摆脱这种情况。我们做到了,并且再也没有看到错误。

直到现在:我正在设置一个新环境并想,我会尝试在 IIS 之外运行 RavenDB,但错误很快再次出现。

事实和我的尝试:

  • 在商业许可证上运行 v.30155
  • 使用自定义 AppPool(称为 RavenApplicationPool
  • 将数据文件夹与 IIS 目录分开(通过 Raven/WorkingDir AppSetting)
  • RavenApplicationPool 用户对 IIS 文件夹和数据文件夹拥有“完全控制”权限
  • 为网站安装并启用了 Windows 身份验证
  • overlapped recycle disabled 应用程序池
  • webdav-publishing 未安装(在setup docs 中要求)
  • 敲我的键盘(运气不好)

当站点运行了几分钟后,错误随机发生。尝试使用以下命令还原备份时也会发生这种情况:

C:\RavenDBExecutables\Server\raven.Server.exe --restore-source=c:\SOME_PATH\my-db-backup.raven --restore-database-name=my-db --restore-database= http://localhost:8080

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

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

  • IndexDefinitions(包含大量以 .index 结尾的文件)
  • 索引(大量文件夹名称为整数)
  • 日志(空)
  • 系统(空)
  • 温度(空)
  • 根文件夹(my-db)为空,即没有Data文件、.resource.databaseraven-data .ico 与工作数据库一样

导入失败后,如果我访问http://localhost:8080/docs/Raven/Restore/Status,我会得到

*很多行,例如“复制 PATH_TO_INDEX_FILE”,*

"Esent 还原:失败!无法还原数据库!", "Microsoft.Isam.Esent.Interop.EsentFileAccessDeniedException: 无法访问文件,文件已锁定或正在使用\r\n at Microsoft.Isam.Esent.Interop.Api.Check(Int32 err)\r\n at Microsoft.Isam.Esent.Interop.Api.JetRestoreInstance(JET_INSTANCE 实例,字符串源,字符串目标,JET_PFNSTATUS statusCallback)\r\n 在 Raven.Database.Storage.Esent.Backup.RestoreOperation.Execute()", “无法恢复数据库无法访问文件,文件被锁定或正在使用”

那会是什么?

【问题讨论】:

  • 检查你的系统事件日志,我昨晚确实遇到了这个错误,结果发现应用程序池没有对数据目录的权限。

标签: ravendb


【解决方案1】:

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

【讨论】:

  • 嗨 Ayende,正如我所写,我已经禁用了重叠回收(实际上,安装程序在创建应用程序池时已经为我完成了它)。所以不幸的是,在这种情况下,这不是我的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多