我从另一台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
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
System.Data.SqlClient.SqlError:操作系统在'D:\ databases\WendyUAT上尝试'RestoreContainer :: ValidateTargetForCreation'时返回错误'32(进程无法访问该文件,因为它正由另一个进程使用.)密度纤维板".
据我所知(使用Process Explorer等),没有其他人使用该文件.我在windows defender中禁用了实时保护.我只是无法理解为什么SQL Server认为该文件正在使用中,因为Windows资源管理器允许我删除它没有任何问题,因此Windows似乎并不认为它正在使用中.
我们将非常感激地提供任何帮助.
在运行此备份之前,如何在应用程序中连接到SQL Server?你连接的数据库是什么?
您无法连接到WendyUAT数据库并在需要还原时使用它 - 您必须明确使用其他数据库,例如master,在运行SMO还原代码之前
我的所有T-SQL恢复脚本将始终包括:
USE [master]
GO
RESTORE DATABASE [WendyUAT] ......
Run Code Online (Sandbox Code Playgroud)
因此,如果您从应用程序运行此备份,请确保master在运行此T-SQL还原脚本之前显式连接到例如
更新:
这是你故意做的事情,还是只是一个错字?
MOVE N'Wendy' TO N'D:\databases\\WendyUAT.mdf',
* **
* *
* * two backslashes here -why???
* only one backslash here...
Run Code Online (Sandbox Code Playgroud)
如果你只使用单个反斜杠吗?
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
Run Code Online (Sandbox Code Playgroud)