5

我从另一台 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:\databases\WendyUAT”上尝试“RestoreContainer::ValidateTargetForCreation”时返回错误“32(该进程无法访问该文件,因为它正被另一个进程使用。)” .mdf'。

据我所知(使用 Process Explorer 等)没有其他东西正在使用该文件。我在 Windows Defender 中禁用了实时保护。我只是不明白为什么 SQL Server 认为该文件正在使用中,因为 Windows 资源管理器让我可以毫无问题地删除它,所以 Windows 似乎不认为它正在使用中。

任何帮助将不胜感激。

4

4 回答 4

10

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

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

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

USE [master]
GO 

RESTORE DATABASE [WendyUAT] ......

因此,如果您从应用程序运行此备份,请确保master在运行此 T-SQL 恢复脚本之前明确连接到 eg

更新:

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

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
于 2013-05-04T10:55:35.803 回答
1

在还原之前尝试以下脚本

alter database DB_NAME set offline with rollback immediate;

恢复后此脚本启用多用户

alter database DB_NAME set online with rollback immediate;
于 2013-05-04T10:59:33.613 回答
1

就我而言,我安装了两个SQL Server 实例(2008 R2 和 2012)。我不得不从我的两个可用 SQL 实例中停止一个 SQL Server 服务(2008 R2)。这帮助我解决了这个问题,我可以恢复我的数据库。

于 2016-10-03T13:55:11.007 回答
1

我有同样的问题。

我所做的是我只是将目标数据库重命名为不同的名称,然后恢复成功执行。恢复后,我只是将其重命名为我想要的数据库名称。

于 2019-02-18T21:36:43.360 回答