首页 文章

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

提问于
浏览
1

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

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

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

到现在为止:我正在 Build 一个新的环境和想法,我会在IIS上运行RavenDB,但错误很快就会重新出现 .

事实和我尝试过的事情:

  • 在商业许可证上运行v.30155

  • 使用自定义AppPool(称为RavenApplicationPool)

  • 将数据文件夹与IIS目录分开(通过 Raven/WorkingDir AppSetting)

  • RavenApplicationPool用户对IIS文件夹和数据文件夹都具有"Full control"权限

  • 为网站安装并启用了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: //本地主机:8080

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

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

  • IndexDefinitions(包含许多以.index结尾的文件)

  • 索引(许多带整数名称的文件夹)

  • logs(空)

  • 系统(空)

  • temp(空)

  • 根文件夹(my-db)为空,即没有数据文件,.resource.database或raven-data.ico,与工作db一样

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

许多行如“复制PATH_TO_INDEX_FILE”,

“Esent Restore:Failure!无法恢复数据库!”,“Microsoft.Isam.Esent.Interop.EsentFileAccessDeniedException:无法访问文件,文件被锁定或正在使用\ r \ n在Microsoft.Isam.Esent.Interop.Api . 检查(Int32错误)\ r \ n在Microsoft.Isam.Esent.Interop.Api.JetRestoreInstance(JET_INSTANCE实例,字符串源,字符串目标,JET_PFNSTATUS statusCallback)\ r \ n在Raven.Database.Storage.Esent.Backup . RestoreOperation.Execute()“,”无法恢复数据库无法访问文件,文件被锁定或正在使用“

那可能是什么?

1 回答

  • 0

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

相关问题