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: The operating system returned the error ’32 (The process cannot access the file because it is being used by another process.)’ while attempting ‘RestoreContainer::ValidateTargetForCreation’ on ‘D:\databases\WendyUAT.mdf’.

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

我们将非常感激地提供任何帮助.

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

您无法连接到WendyUAT数据库并在需要还原时使用它 – 您必须明确使用其他数据库,例如: master,在运行SMO还原代码之前

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

USE [master]
GO 

RESTORE DATABASE [WendyUAT] ......

因此,如果您从应用中运行此备份,请确保明确连接到例如在运行此T-SQL还原脚本之前使用master

更新:

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

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

如果你只使用单个反斜杠吗?

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

转载注明原文:sql-server – 恢复数据库 – 无法访问文件,因为它正被另一个进程使用 - 代码日志