我正在尝试从应用程序中进行RavenDB备份/恢复。 Raven以嵌入模式运行。我的备份工作正常,现在我需要进行恢复。
要恢复的问题,我想恢复到嵌入式存储当前使用的相同位置。我的计划是关闭嵌入式存储,删除该位置的所有文件,然后在那里恢复:
var configuration = embeddedStore.Configuration;
var backupLocation = // location of a backup folder
var databaseLocation = // location of current DB
// shutdown the storage???
documentStore.Dispose();
// now, trying to delete the directory, I get exception "Can't delete the folder it is in use by other process"
Directory.Delete(databaseLocation, true); // <-- exception here
Directory.CreateDirectory(databaseLocation);
DocumentDatabase.Restore(configuration, backupLocation, databaseLocation, s => { }, defrag: true);
(GitHub上的完整来源)
关闭存储的问题。从我得到的例外情况来看,引擎没有关闭,因为我无法删除文件夹:
该进程无法访问文件'_0.cfs',因为它正由另一个进程使用。
我运行的应用程序是MVC5。问题是在web.config
中设置了数据库位置,我真的不想以任何方式对其进行修改,因此还原必须与现有数据库位于同一位置。
将嵌入式数据库还原到与现有数据库相同的位置的正确方法是什么?
答案 0 :(得分:-1)
一个解决方法是初始化ravendb(在Application_Start中正确),条件是不让ravendb启动。
if (WebConfigurationManager.AppSettings["RavenDBStartMode"]=="Start")
RavenDB.initialize();
用于恢复数据库更改&#34; RavenDBStartMode&#34;到&#34; DontStart&#34;在webconfig中,应用程序池将重新启动并启动还原操作
string dbLocation = Server.MapPath("your database location");
string backupLocation = Server.MapPath("your backup location");
System.IO.File.Delete(dbLocation);
DocumentDatabase.Restore(new RavenConfiguration() { DataDirectory = dbLocation }
, backupLocation, dbLocation, x => { }, false);
RavenDB.initialize();
最后改变你的&#34; RavenDBStartMode&#34;到&#34;开始&#34;再次,所以ravendb可以启动其他重启原因