我从另一台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似乎并不认为它正在使用中。
感谢任何帮助。
答案 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)
我有同样的问题。
我所做的是,我只是将目标数据库重命名为其他名称,然后还原成功执行。恢复后,我将其重命名为所需的数据库名称。