RavenDB数据库恢复:操作失败:无法访问文件,文件被锁定或正在使用

时间:2016-09-21 00:31:56

标签: ravendb

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

  

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

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

到现在为止:我正在建立一个新的环境并思考,我会在IIS上运行RavenDB,但错误会很快再次出现。

事实和我尝试过的事情:

  • 以商业执照运行v.30155
  • 使用自定义AppPool(称为 RavenApplicationPool
  • 将数据文件夹与IIS目录分开(通过Raven/WorkingDir AppSetting)
  • RavenApplicationPool 用户具有"完全控制" IIS文件夹和数据文件夹上的权限
  • 为网站安装并启用了Windows身份验证
  • overlapped recycle disabled for app-pool
  • 未安装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文件夹只是二进制文件/可执行文件等的压缩文件 - 它与IIS网站文件夹不重叠)

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

  • IndexDefinitions(包含许多以.index结尾的文件)
  • 索引(许多具有整数名称的文件夹)
  • 日志(空)
  • system(empty)
  • temp(空)
  • 根文件夹( my-db )为空,即没有 Data 文件, .resource.database raven-data .ico 和工作db
  • 一样

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

*许多行如"复制PATH_TO_INDEX_FILE",*

  

" Esent Restore:失败!无法恢复数据库!",       " 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   instance,String source,String destination,JET_PFNSTATUS   statusCallback)\ r \ n at   Raven.Database.Storage.Esent.Backup.RestoreOperation.Execute()&#34 ;,       "无法恢复数据库无法访问文件,文件被锁定或正在使用"

那又怎样呢?

1 个答案:

答案 0 :(得分:0)

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