2016-08-16 162 views
1

我正在研究一个涉及使用数据库的项目,我正在对它进行单元测试。现在测试会创建一个数据库作为.mdf文件并使用它。如何覆盖.mdf文件

我想要做的就是让这个.mdf文件放到其它地方的副本,并在每次测试之前替换原来的文件.mdf与我刚刚作出的副本。问题是,当我尝试这样做时,它说该文件正在被另一个进程使用。我发现这个过程是sqlservr.exe

我的问题是:有没有办法阻止服务器使用该文件,以便我可以替换它?我已经尝试过SQL Server BACKUP和RESTORE选项,但它们对我来说不够好,因为它们太慢了处理过程。

任何帮助将不胜感激。

UPDATE:

好了,多了几分问题的信息。基本上我正在改进我的单元测试的性能。大多数测试需要连接到数据库,所以我在.mdf文件中有LocalDb。该文件在TestFixtureSetup期间创建。然后,在每次测试之前(在SetUp期间),通过SQL命令擦除数据库。这似乎不是每个测试重新创建新数据库的最有效方法。所以我尝试了两种截然不同的方法:

  1. 使用SQL BACKUP和RESTORE命令。这有效,但它增加了我的测试执行时间。
  2. 杀死sqlservr.exe进程,本地复制文件并重新启动sqlservr.exe。这也可以,但也会增加执行时间。

所以基本上我正在寻找如何提高重建一个完全空的数据库的性能的建议。

+0

停止服务,复制,然后再次启动? –

+0

https://msdn.microsoft.com/en-AU/library/ms187858.aspx分离可能工作,然后将其附加回 –

回答

2
  • 您可以停止该服务,复制.MDF文件并重新启动服务

  • 您也可以分离数据库,把它复制,并重新将其附加

  • 你也可以备份数据库

更新:

要启动,停止,暂停,恢复或重新启动SQL Server Browser或SQL Server代理的实例。

按照上面的说明启动SQL Server配置管理器。 如果出现对话框用户帐户控制,请单击是。

在SQL Server配置管理器的左窗格中,单击“SQL Server服务”。

在结果窗格中,右键单击SQL Server浏览器,SQL Server代理(MSSQLServer),或SQL Server代理()对于命名实例,

然后单击开始,停止,暂停,恢复或重新启动。

单击确定关闭SQL Server配置管理器。

更新:

See This Pic

+0

有没有更快的方式做这个备份?因为我试图杀死进程,复制文件然后再次启动进程,但实际上比以前需要更多时间。 – SalysBruoga

+0

我会用imgs更新我的答案。 – 2016-08-16 07:54:00

+0

@vstrimaitis在弹出菜单中点击“停止” – 2016-08-16 08:14:52