恢复数据库 - 无法访问文件,因为它正被另一个进程使用

时间:2013-05-04 10:52:54

标签: sql-server

我从另一台SQL Server 2005计算机备份了一个数据库。我正在尝试将其还原到我的SQL Server 2008实例。

我已经为恢复创建了一个新的数据库,但是在尝试使用以下内容进行恢复时(由ssms生成):

RESTORE DATABASE [WendyUAT] 
FROM DISK = N'D:\wanda20130503.bak' 
WITH FILE = 1,  
MOVE N'Wendy' TO N'D:\databases\\WendyUAT.mdf',  
MOVE N'Wendy_log' TO N'D:\databases\\WendyUAT.ldf',  
MOVE N'sysft_WendyFti' TO N'D:\databases\\WendyUAT.WendyFti',  
NOUNLOAD,  REPLACE,  STATS = 10

我收到以下错误:

  

System.Data.SqlClient.SqlError:操作系统在'D:\上尝试'RestoreContainer :: ValidateTargetForCreation'时返回错误'32(进程无法访问该文件,因为它正由另一个进程使用。)数据库\ WendyUAT.mdf”。

据我所知(使用Process Explorer等),没有其他人正在使用该文件。我在windows defender中禁用了实时保护。我只是无法理解为什么SQL Server认为该文件正在使用中,因为Windows资源管理器允许我删除它而没有任何问题,因此Windows似乎并不认为它正在使用中。

感谢任何帮助。

4 个答案:

答案 0 :(得分:9)

在运行此备份之前,如何在应用程序中连接到SQL Server?你正在连接什么数据库

无法连接到WendyUAT数据库并在您想要还原时使用它 - 您必须明确使用其他数据库,例如: {/ 1}}, 运行SMO还原代码

之前的

我的所有T-SQL恢复脚本将始终包含:

master

因此,如果您从应用中运行此备份,请确保明确连接至例如运行此T-SQL还原脚本之前USE [master] GO RESTORE DATABASE [WendyUAT] ......

<强>更新

这是你故意做的事情,还是仅仅是一个错字?

master

如果只使用单个反斜杠,它是否有效?

MOVE N'Wendy' TO N'D:\databases\\WendyUAT.mdf',  
                     *         **
                     *         *
                     *         *  two backslashes here  -why??? 
                     * only one backslash here...

答案 1 :(得分:1)

在恢复之前尝试以下脚本

alter database DB_NAME set offline with rollback immediate;
恢复后

和此脚本启用多用户

alter database DB_NAME set online with rollback immediate;

答案 2 :(得分:1)

在我的情况下,我安装了两个 SQL Server实例(2008 R2和2012)。我必须从我的两个可用SQL实例停止一个SQL Server服务(2008 R2)。这有助于我解决这个问题,我可以恢复我的数据库。

答案 3 :(得分:0)

我有同样的问题。

我所做的是,我只是将目标数据库重命名为其他名称,然后还原成功执行。恢复后,我将其重命名为所需的数据库名称。